lizhiguo 发表于 2008-5-17 10:42:02

请教,怎样定义通信包?

老师:
  您好!我想问一下如何用C语言定义一个通信包,我想用SPI接口传输一个两字节的数据包,且每个字节的内容都已经知道,那么该如何把它们组织成一个包呢?包括发送包和接收包.谢谢!!
unsigned char led_7={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
flash unsigned char position={0xef,0xdf,0xbf,0x7f};
数据包的第一个字节为数组1的内容(循环)
数据包的第二个字节为数组2的内容(循环),那么该如何组织这个数据包呢?谢谢老师!!

Gorgon_Meducer 发表于 2008-5-17 11:12:21

如果我没有理解错误的话,你可以采用奇偶辨别的方法,比如,在SPI传输完成中断处理程序中加入如下的代码

void SPI_STC_ISR(void)
{
    static unsigned char s_n = 1;
    static unsigned char s_chCounter = 0;
    unsigned char chData = SPDR;                  //SPI接收到的数据
   
    if (s_n == 0)
    {
      //发送第一字节
      SPDR = led_7;
    }
    else
    {
      //发送第二个字节
      SPDR = led_7;
      s_chCounter++;
      s_chCounter %= 20;                        //4和10的最小公倍数
    }
    s_n = (s_n == 1) ? 0 : 1;
}


在主程序里面,while循环之前,通过SPDR = led_7;来启动整个发送。

Gorgon_Meducer 发表于 2008-5-17 11:14:04

补充一点,SPI如果采用中断的方式,往往会达到上兆的频率。这种情况下,会消耗系统大量
资源,所以建议,增大SPI的分频。同时,在通讯很次要的情况下,使用查询方式发送数据包。
页: [1]
查看完整版本: 请教,怎样定义通信包?