基于51单片机的电力载波通信开关电路的制作
扫描二维码
随时随地手机看文章
一、原理图:
二、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