一、原理图:
二、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