本帖最后由 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;
} |