一、原理图: 二、C程序源代码 /* 此程序已经经本人亲自调试运行过,如有疑问,请联系 QQ:286288986 */ #include //预定义头文件 #define uchar unsigned char //宏定义 sbit keyin=P3^3; //按键定义 sbit LED=P3^5; //指示灯定义 uchar a; //接收数据记存器 void main() //主函数 { keyin=1; //按键口置1 led=1; //灭led灯 TMOD=0x20; //选择顶时器/计数器1中的方式2 SP=0x60; // 设置堆榨地址 TH1=0xfd; //波特率9600bit/s TL1=0xfd; SCON=0x50; //串口通信方式2,允许收发 TR1=1; //开启计数器 while(1) //循环 { if(keyin==0) //判断按键是否按下,是则按键处理 { SBUF=0x00; //接收数据处理 while(TI==0) ; //发送完清除接收标志位 TI=0; } if(RI==1) //是否接收 { RI=0; //接收完接收标志位清零 a=SBUF; //读接收数据 if(a==0) //判断接收数据是否正确 { if(led==1) //正确led灯取反 led=0; else led=1; } } } } 三、汇编程序 /* 此程序已经经本人亲自调试过,如果在学习当中有什么疑问, QQ:286288986 */ ORG 00H JMP START //开始 ORG 10H //开始地址 START: MOV SP,#60H //设置堆榨地址 MOV SCON,#50H //串口通信方式2,允许收发 MOV TMOD,#20H //选择顶时器/计数器1中的方式2 MOV TH1,#0FDH //波特率9600bit/s MOV TL1,#0FDH SETB TR1 //开启计数器 SETB P3.3 //开关输入口置1 SETB P3.5 //LED显示口灭 SCAN: JB RI,UART //判断是否接收 JNB P3.3,KEYIN //判断按键是否按下,是则按键处理 JMP SCAN //不是按键扫描 KEYIN: MOV A,#5AH //发送数据装入A MOV SBUF,A //发送数据 WAIT: // 等待发送 JBC TI,SCAN //发送完了清除TI标志位 JMP WAIT UART: //接收数据处理 MOV A,SBUF CJNE A,#5AH,ERROR //简单的地址码设置为5AH,用户可随便定义 CLR RI //清除接收标志位 CPL P3.5 //点亮灯 ERROR: JMP SCAN //返回到扫描 END |
|Archiver|手机版|家电维修论坛
( 蜀ICP备19011473号-4 川公网安备51102502000164号 )
GMT+8, 2025-5-20 13:54 , Processed in 0.125842 second(s), 18 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.