51单片机串口控制继电器

来源:本站
导读:目前正在解读《51单片机串口控制继电器》的相关信息,《51单片机串口控制继电器》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机串口控制继电器》的详细说明。
简介:实验室有个项目,用到报警功能。比如当温度或应力过高或者过低的时候启动报警器,通过给串口发送一个命令来控制继电器。不巧去年被我正负极接反烧了,最近开始搞单片机,苦心经营,利用实验室单片机学习板给搞定了。

程序如下:

#include<reg52.h>

#define uchar unsigned char

sbit JDQ=P3^7; //继电器接P3.7

sbit FMQ=P3^6;

sbit LED=P0^0;

sbit LEDra=P0^1;

sbit LEDar=P0^2;

uchar dat[4];

int i=0;

void Delay(unsigned int ii) //1mS

{

unsigned int jj;

for(;ii>0;ii--)

for(jj=0;jj<125;jj++)

{;}

}

void init_serialcom( void ) //串口通信初始设定

{

TMOD|=0x20; //定时器中的方式控制寄存器TMOD,设置T1为工作模式2,当TL1溢出时,TH1的值自动装入TL1,TH1和TL1当然都要赋值.TMOD前四位T1,后四位T0:GATE=0,C/T=0,M1=0,M0=01

TR1=1; //定时器中的运行控制寄存器TCON,允许T1计数

TH1=0xfd; //波特率9600

TL1=0xfd;

SCON = 0x50 ; //SM0=0;SM1=1;REN=1; UART为模式1,8位数据,允许接收,

PCON |= 0 ; //SMOD=1;波特率的问题。

IE|=0x90 ; //中断允许寄存器IE,P97,EA终端总允许标志位,ES串行口中断允许位

}

void jdq() interrupt 4{ //void 函数名() interrupt 4

EA=0;

if(RI)

{

RI=0;

if(i<4)

{

dat[i] = SBUF;

i++;

}

if(dat[2]==0x10 && dat[0]==0xE5 && dat[1]==0xA1 && dat[3]==0x4E) //E5A1 104E

{

JDQ=0;//吸合

LED=0;//P0口LED亮

LEDra=1;

LEDar=1;

}

else if(dat[2]==0x11 && dat[0]==0xE5 && dat[1]==0xA1 && dat[3]==0x4D) //E5A1114D

{

JDQ=1; //释放

LED=1; //P0口LED灯灭

LEDra=1;

LEDar=1;

}

else

{

LEDra=0;

LEDar=0;

LED=1;

}

if(i>=4)i=0;else;

}

EA=1;

}

main() //串口方式1发送时的定时信号,也就是移位脉冲,由定时器1产生。不是定时器0。

{

init_serialcom();

Delay(10);

while(1);

}

第一次独立写的,程序粗糙了点,但是完美运行。

发送:E5A1 104E,继电器闭合

E5A1 114D,继电器断开

这里控制用到了四个字节,所以在中断程序里面我定义了一个数组,最后判断这四个字节是否都正确。如果一个字节的话更简单。

提醒:《51单片机串口控制继电器》最后刷新时间 2024-03-14 01:09:36,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机串口控制继电器》该内容的真实性请自行鉴别。