#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int idata uchar buf[4]={0}; uchar Num=0; uchar RX_flag=0;
/*************************************************** 功能:发送一帧数据 ***************************************************/ void TX_data(uchar *TX,uchar send_num) { uchar i; ES=0; for(i=0;i<send_num;i++) { TI=0; SBUF=*(TX+i); while(!TI); TI=0; } // RI=0; ES=1;
} /*************************************************** 功能:延时一段时间 ***************************************************/ /*void delay() { uchar i,j; for(i=0;i<250;i++) for(j=0;j<200;j++) ; } */
/*************************************************** main()主函数 ***************************************************/ void main() { TMOD=0X20; //T1定时工作方式2, TL1=0XFD; TH1=0XFD; //波特率为9600 bit/s PCON=0X00; //波特率不倍增 SCON=0X50; //串中为工作方式1,允许接收 TR1=1; //启动定时器T1 ES=1; //开串行中断 EA=1; //开启总中断
while(1) { if(RX_flag) { RX_flag=0; TX_data(buf,Num); Num=0; //delay(); } }
}
/*************************************************** 功能:串口中断接受服务程序 ***************************************************/ void serial() interrupt 4 { if(RI) { RI=0; buf[Num]=SBUF; Num++; } if(buf[0]!='A') Num=0; if(Num==4) RX_flag=1; if(TI) TI=0;
} 这是我的程序 ,硬件没有问题,软件就是pc机发的和收的有时是对的,有时是错的,程序在只设置发送数据给pc机时接受正常,但是 要是通过串口调试发数据给单片机时,无法接到一直时对的数据,数据很不稳定,没有规律。 |