学习钻头时卡住了

时间:2017-02-16 20:49:46

标签: bit microchip

这是我的第一个问题,因为我不熟悉编码。

好吧,我正在尝试在SPI中使用MCP数字电位器。当我使用PIC16,用C语言编写时,我了解到XC8库无法包含在PIC16项目中......所以我想我会通过点击,了解我的工作来学习很多东西......

但......似乎没有用!所以我制作了一个有一些延迟的LED版本,以便了解发生了什么。

我有两个问题:首先,“命令”数据似乎没有被转移。事实证明,我只能看到第一位的闪光灯。 “时钟”指示灯工作正常,闪烁8次。

另外,我不明白为什么我的无限循环不是无限的。我得到几个周期然后回调主函数,依此类推。它与我的延迟有关,因为当我改变延迟时它会改变周期数。

这是我的代码:

#include <stdio.h>
#include <pic16f18875.h>

#define temoin LATAbits.LATA0
#define CS LATAbits.LATA1
#define CLK LATAbits.LATA2
#define DAT LATAbits.LATA3

#define MASK = 0x80 //isolate the MSB

unsigned char commande = 0b10011000; //led sequence to be observed (command)

void delay(void)
    {              int f, g;
                    for(f=0;f<1000;f++)
            {
                      for(g=0;g<1;g++)
                  {  } } }     //simple delay                    

void main()
{
        int i;

//init                        
        TRISA=0x00;    //porta as output
        LATA = 0x00; //init all bits to 0        

        CS=0;   //enable writing               

 //send command

        for (i=0; i<8; i++) //browse through the command byte
            {

            if (commande & MASK) //read msb and compare                      
                     DAT = 1;                        
            else                        
                     DAT = 0;


                CLK=1; //clock signal
                delay();                   
                CLK=0;
                delay();

              commande <<=1; //left shift, read next bit 

            }

        CS = 1;

        while (1) //just a heartbeat
        {
          temoin = 1;
          delay();             
          temoin = 0;
          delay();             
        }
}

我真的在网上找到了很多信息,但没有一个对我很好。我可能只缺乏特殊的C语言知识,但我不知道是什么。

提前致谢!

干杯

1 个答案:

答案 0 :(得分:0)

我很确定你的问题只是你的#define MASK = 0x80 //isolate the MSB ^- ??? 搞砸了:

if (commande & MASK) //read msb and compare

该等号最终被视为定义的一部分,因此预处理器将扩展

if (commande & = 0x80) //read msb and compare

为:

commande

这根本不是你想要的!最终会修改if语句中的0x80,屏蔽低于=的所有位。

删除定义中的batman应解决此问题。

关于另一部分 - 无限循环不是无限 - 确保您的处理器没有启用看门狗定时器。您可能需要在熔丝位中禁用它。