照课本上的例子写的,看了感觉没问题,编译也能通过,下载到单片机上就是不好用.找了很长时间也找不出毛病。<br />B机(接收)程序:<br />#include <reg51.h><br />#include "intrins.h"<br />#define uchar unsigned char<br />#define uint unsigned int<br />#define ulong unsigned long<br />uchar idata buf[1];<br />uint pf;<br />void init1(void) //串口初始化//<br />{ TMOD=0x20;<br /> TH1=0xe8;<br /> TL1=0xe8;<br /> PCON=0x00;<br /> TR1=1;<br /> SCON=0x50;<br />}<br />void receive(uchar idata *d)<br />{ uchar i;<br /> do<br /> { while(RI==0);<br /> RI=0;<br /> }while((SBUF^0xaa)!=0); //判断A机发送请求//<br /> SBUF=0xbb; //发应答信号//<br /> while(TI==0); <br /> TI=0; <br /> while(1)<br /> { pf=0;<br /> for(i=0;i<16;i++)<br /> { while(RI==0);<br /> RI=0;<br /> d=SBUF; //接收数据//<br /> pf+=d; //求校验和//<br /> }<br /> while(RI==0);<br /> RI=0;<br /> if((SBUF^pf)==0) //比较校验和//<br /> { SBUF=0x00; <br /> break;<br /> }<br /> else <br /> { SBUF=0xff; //出错发FF 重新接收//<br /> while(TI==0);<br /> TI=0;<br /> }<br /> }<br />}<br />void main()<br />{ init1();<br /> receive(buf);<br /> }<br />A机(发送)程序:<br />#include <reg51.h><br />#include <absacc.h><br />#include "intrins.h"<br />#define uchar unsigned char<br />#define uint unsigned int <br />uchar idata buf[1]={0x35};<br />uchar ab=0;<br />uint pf;<br />uchar a,m,p;<br />void init1(void) //串口初始化//<br />{ TMOD=0x20;<br /> TH1=0xe8;<br /> TL1=0xe8;<br /> PCON=0x00;<br /> TR1=1;<br /> SCON=0x50;<br />}<br />void send(uchar idata *d)<br />{ uchar i;<br /> do<br /> { SBUF=0xaa; //发送联络信号//<br /> while(TI==0); //等待发送成功//<br /> TI=0;<br /> while(RI==0); //等待B机//<br /> RI=0;<br /> }while((SBUF^0xbb)!=0); //B机未准备好,继续联络//<br /> do<br /> { pf=0;<br /> for(i=0;i<16;i++)<br /> { SBUF=d; //发送数据//<br /> pf+=d;<br /> while(TI==0);<br /> TI=0;<br /> }<br /> SBUF=pf; //发送校验和//<br /> while(TI==0);<br /> TI=0;<br /> while(RI==0);<br /> RI=0;<br /> }while(SBUF!=0); //B机回答出错则重发//<br />}<br />void main(void)<br />{ init1();<br /> send(buf);<br />}<br /> |
|