打印

求助关于串口接收发送数组,我给的错在哪里

[复制链接]
1688|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
109445686|  楼主 | 2011-9-8 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 109445686 于 2011-9-9 07:40 编辑

下面是我修改后的代码,目的是用中断,来发送指定的数组,然后比较数组发送接收到符合要求的数组
请高手帮忙检查下
谢谢

#include <reg52.h>                       
#include"main.h"
#include"com.h"
uint count=0;
unsigned char raid[4];
unsigned char rai[4]={0x01,0x02,0x03};
void main (void)
{
UartInit();//初始化
while(1)
{   
   if(count==4)
  {  
   senddata(rai);
   if(raid[3]==0x03)
   {
    senddata(raid);
   }
   count=0;
  }
}              
}
//                    串口初始化
//------------------------------------------------*/
void UartInit(void)  
PCON |= 0x80;  //使能波特率倍速位SMOD
SCON = 0x50;  //8位数据,可变波特率
AUXR &= 0xbf;  //定时器1时钟为Fosc/12,即12T
AUXR &= 0xfe;  //串口1选择定时器1为波特率发生器
TMOD &= 0x0f;  //清除定时器1模式位
TMOD |= 0x20;  //设定定时器1为8位自动重装方式
TL1 = 0xFA;  //设定定时初值
TH1 = 0xFA;  //设定定时器重装值
ET1 = 0;  //禁止定时器1中断
TR1 = 1;  //启动定时器1
EA  = 1;                  //打开总中断
ES = 1;       //打开串口中断
}

/*------------------------------------------------
                    发送一个字节
------------------------------------------------*/
void sendbyte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
                    发送一个字符串
------------------------------------------------*/
void senddata(unsigned char *s)
{
ES = 0;     //关闭串口中断
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
  sendbyte(*(s));
  s++;
}
ES = 1;            //打开串口中断
}

/*------------------------------------------------
                     串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{  
if(RI)
{
  RI = 0;   //清除接收中断标志位
  raid[count]=SBUF; //读出接收到的数据               
  count++;
}  
if(TI)  //如果是发送标志位,清零
TI=0;
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝