本帖最后由 yel_bit 于 2009-8-6 15:31 编辑
用单片机和Pc机进行串口通信,下面是我的程序,要实现的功能是:Pc机给单片机发送b的时候返回 invalid,发送其他的字符时返回 十六进制的 65,76,43三个数。程序没有错误也没有警告 ,就是通信的时候第一次发b时能返回invalid,再发的时候就什么也不返回。求高手帮忙看一下,小弟提前谢过啦!
#include<reg52.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
#define length 10
uchar temp,flag,i;
uchar line[length]="invalid!";
uchar code serial_data[]={0x65,0x76,0x43};
void serial_send_str(uchar temp);
void serial_send_string(uchar strlen);
void main()
{
TMOD=0x20; //定时器T1工作在方式1;
TH1=0xfd; //设置波特率为:9600;
TL1=0xfd;
TR1=1; //开定时器T1;
SM0=0;
SM1=1;
REN=1; //设置串口工作方式1;
EA=1; //开总中断;
ES=1; //开串口中断;
while(1)
{
if (flag==1&temp=='b')
{
flag=0 ;
serial_send_string(length);
}
if(flag==1&temp!='b')
{
ES=0;
flag=0;
for(i=0;i<3;i++)
{
SBUF=serial_data;
while(!TI);
TI=0;
}
ES=1;
}
}
}
void serial_send_str(uchar temp) //发送字符子程序;
{
ES=0;
SBUF=temp;
while(!TI);
TI=0;
ES=1;
}
void serial_send_string(uchar strlen)
{
uchar k;
while(k<strlen)
{
serial_send_str(line[k]);
k++;
}
}
void serial_receive() interrupt 4 //中断接收子程序;
{
RI=0;
temp=SBUF;
flag=1;
} |