CC2530实现M3650B-HA主动模式读卡(串口中断接收)

来源:互联网 发布:ios7软件下载 编辑:程序博客网 时间:2024/05/22 12:48

最近在用CC2530学习ZigBee协议栈,先在裸机上写了一个通过M3650B-HA高频读写模块读取卡ID并且通过串口发送到2530,2530再通过串口中断收数的数据,M3650B-HA高频读写模块是主动i模式,通过查询手册可知返回的数据长度是12个字节,第5-10字节是卡的ID号,最后一个字节是校验和(异或取非校验),图如下:


接着,就开始写程序吧!

/***************************************程序功能:串口收数****串口数据输入:P0_2*************************************/#include <ioCC2530.h>#define uint unsigned int#define uchar unsigned charuchar num[50];uint i = 0, flag = 0;/*********函数申明*********/void Delayms(uint xms);void uart0_init();void setSysClk();/********* 主函数  ********/void main(){    setSysClk();            //系统时钟初始化  uart0_init();           //串口初始化  while(1)  {    if(flag==1)    {      //i = 0;      //此处用户可以添加自定义代码    }  }}void setSysClk(){  CLKCONCMD&=0XBF;         //设置系统时钟为32MHz  Delayms(1);  CLKCONCMD&=0XC0;  Delayms(1);}void uart0_init(){  PERCFG =0x00;            // UART0选择位置0 TX@P0.3 RX@P0.2  P0SEL|=0x0C;             // P0.3 P0.2选择外设功能  U0CSR|=0xC0;             // UART模式接收器使能  U0UCR|=0X00;             //无奇偶校验,1位停止位  U0GCR|=8;                //查表获得 U0GCR和 U0BAUD  U0BAUD =59;              // 波特率9600  UTX0IF =0;  URX0IE =1;               //使能接收中断 IEN0@BIT2  IEN0 |=0x04;   EA = 1;                  //开总中断     }/********毫秒延时函数**********/
//串口每发送完八位(一个字节)就进入此中断,要收完一次数据,需要进入八次中断,应注意此细节void Delayms(uint xms)   //i=xms 即延时i毫秒{  uint i,j;  for(i=xms;i>0;i--)    for(j=587;j>0;j--);}/*******中断处理函数**********/#pragma vector=URX0_VECTOR__interrupt void UART0_ISR(void){  URX0IF =0;     //清除接收中断标志  num[i++] = U0DBUF;//接受数据  if(i==1)  {    flag = 1;  }}


1 0
原创粉丝点击