(九)方式一 单工串行通信 (未能解决)已解决,但不会调试
工作方式一讲解:
(1)特点
1.8位UART接口。
2.帧结构为10位,包括起始位(为0),8位数据位,1位停止位。
3.波特率由指令设定,由T1的溢出率决定。
(2)发送操作
当执行一条“MOV SBUF,A”指令时,启动发送操作,A中的数据从TXD端实现异步发送。发送完一帧数据后自动置TI=1,请求中断。要继续发送时,TI必须由指令清零。
(3)接收操作
当置REN=1时,串行口采样RXD,当采样到1至0的跳变时,确认串行数据帧的起始位,开始接收一帧数据,直到停止位到来时,把停止位送入RB8中。置位RI请求中断。CPU取走数据后用指令清零RI。
未能成功解决,技术难点 遇到 两个 main 函数,不知道究竟该怎样调试,还是把它们一个个输入进去???????
还是以后用 实物 试一试!!!!
电路图:
2、 参考代码(由于有两个 main 不知道 该怎样解决)
1 // 甲机串行发送 2 #include<reg52.h> 3 #define uint16 unsigned int 4 #define uchar8 unsigned char 5 6 void main() 7 { 8 uchar8 temp = 0; 9 TMOD = 0x20; // 设置定时器T1 为 方式2 10 TH1= 0xfd; 11 TL1= 0xfd; 12 SCON = 0x40; 13 PCON = 0x00; 14 TR1 = 1; 15 P2 = 0xff ; 16 17 while(1) 18 { 19 while(T1==0); 20 T1=0; 21 temp=P2; 22 SBUF = temp ; 23 24 } 25 26 } 27 28 29 // 乙机串行接收 30 #include<reg52.h> 31 #define uint16 unsigned int 32 #define uchar8 unsigned char 33 34 void main() 35 { 36 uchar8 temp = 0; 37 TMOD = 0x20; // 设置定时器T1 为 方式2 38 TH1= 0xfd; 39 TL1= 0xfd; 40 SCON = 0x50; 41 PCON = 0x00; 42 TR1 = 1; 43 44 while(1) 45 { 46 while(RI==0); 47 RI=0; 48 temp=SBUF; 49 P1=temp ; 50 51 } 52 53 }
郁闷啊,再来试一下
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
由于这是两个程序代码,所以要分别编译,生成 .HEX 文件
然后断开 proteus 的 远程调试按钮,分别加载到里面就可以了,注意两个hex 不要加载犯了。
1 // 甲机串行发送 2 #include<reg52.h> 3 #define uint16 unsigned int 4 #define uchar8 unsigned char 5 6 void main() 7 { 8 uchar8 temp = 0; 9 TMOD = 0x20; // 设置定时器T1 为 方式2 10 TH1= 0xfd; 11 TL1= 0xfd; 12 SCON = 0x40; 13 PCON = 0x00; 14 TR1 = 1; 15 P2 = 0xff ; 16 17 while(1) 18 { 19 while(T1==0); 20 T1=0; 21 temp=P2; 22 SBUF = temp ; 23 24 } 25 26 }
1 // 乙机串行接收 2 #include<reg52.h> 3 #define uint16 unsigned int 4 #define uchar8 unsigned char 5 6 void main() 7 { 8 uchar8 temp = 0; 9 TMOD = 0x20; // 设置定时器T1 为 方式2 10 TH1= 0xfd; 11 TL1= 0xfd; 12 SCON = 0x50; 13 PCON = 0x00; 14 TR1 = 1; 15 16 while(1) 17 { 18 while(RI==0); 19 RI=0; 20 temp=SBUF; 21 P1=temp ; 22 23 } 24 25 }
注意: 与 书上 图 改了 一下,把 开关移 到了 P2 口
成功了 ,代码要重新分析,添加注释!!!!!!!!!!!!!!!!! fuck
再次分析: 实际上 可以把 从 甲机 RXD 到 乙机 TXD 的一根线拆掉,只保留一根线既可,因为是单向的啊,如下
懂了伐, 至于 工作方式1 ,要看书 123页