最近在做一个单片机串口与PC机通信的程序,基本功能是接收到PC机发来的一段代码,做出某些动作,并回复一些代码,开始用的是STC的开发板,程序基本可以用了,但换成ATMEL89C51IC2,程序里,串口接收那部分就不能完整运行了.
大概发下我的接收部分,可以肯定设置上面是没问题的.
uint8 flag = 0;
uint8 flag1 = 0;
uint8 BUFFER[8];
uint8 Uart_Len;
接收中断大概是这样的:
void uart_init() interrupt 4
{
flag = 0;
Uart_Len = 0;
while(flag<10&&Uart_Len<8)
{
if(RI == 1)
{
RI = 0;
BUFFER[Uart_Len++] = SBUF;
flag = 0;
flag1 = 1;
}
else { TI=0;flag++;}
}
}
main()
{
..
..
while(1)
{
if(flag1 ==1)
{
if(BUFFER[0]==0x0a)
{
if(BUFFER[1] == 0x01)
{
if(BUFFER[2] == 0x02)
{这里是要做处理的,我给这里放过标志位,但是程序根本到不了这里} (用STC的单片机就不会出现这个问题,想问高手,是时序出的问题吗?谢谢)
}
}
else if(....)
.......
}
}
}中断里貌似写错了点,原程序想不起来杂写的了,但是保证是在STC开发板上运行过的. 判断接收放到主程序里,是因为处理接收后要发送一段代码回去,我在主程序里用了发送函数,再把发送函数放到中断里编译器提示警告.
还有就是波特率是9600 晶振是11.0592
貌似我设置成2400时,调试是可以用的,是不是我时序上出了问题呢?
|