TC35i芯片远程控制另一个与AT89C52单片机相连的TC35i来驱动与这个单片机相连的继电器的C语言程序 加上备注
时间: 2024-02-05 15:12:32 浏览: 62
继电器c程序驱动, 简单
4星 · 用户满意度95%
以下是TC35i芯片远程控制另一个与AT89C52单片机相连的TC35i来驱动与这个单片机相连的继电器的C语言程序,注释已加入:
```c
#include <reg52.h> //头文件
#include <string.h>
#include <stdio.h>
#define FOSC 18432000L //指定晶振频率
#define BAUD 9600 //指定波特率
sbit Relay = P1^0; //定义继电器控制引脚
unsigned char idata buf[60]; //定义缓冲区
unsigned char idata index; //定义缓冲区索引
void UART_init() //串口初始化函数
{
TMOD |= 0x20; //设置定时器1为模式2,8位自动重载
TH1 = TL1 = -(FOSC/12/32/BAUD); //计算并设置波特率,使用定时器1
TR1 = 1; //启动定时器1
PCON &= ~0x10; //波特率不加倍
SCON = 0x50; //设置串口为工作方式1,允许接收
EA = ES = 1; //开启总中断和串口中断
}
void UART_interrupt() interrupt 4 //串口中断函数
{
if (RI) //当接收中断标志位被置位
{
RI = 0; //清除接收中断标志位
buf[index++] = SBUF; //将接收到的数据存入缓冲区
}
if (TI) //当发送中断标志位被置位
{
TI = 0; //清除发送中断标志位
}
}
void main()
{
UART_init(); //串口初始化
while(1)
{
if (index > 0) //当缓冲区中有数据时
{
if (buf[0] == 'O' && buf[1] == 'N') //如果收到“ON”指令
{
Relay = 1; //继电器闭合
}
else if (buf[0] == 'O' && buf[1] == 'F' && buf[2] == 'F') //如果收到“OFF”指令
{
Relay = 0; //继电器断开
}
index = 0; //清空缓冲区
memset(buf, 0, sizeof(buf)); //清空缓冲区内存
}
}
}
```
该程序使用AT89C52单片机和TC35i芯片通过串口通信实现了远程控制继电器的功能。当收到串口数据时,程序会判断数据内容是否为“ON”或“OFF”,如果是则控制继电器闭合或断开。程序使用了中断方式接收串口数据,具有较高的实时性和稳定性。
阅读全文