用51单片机写一个振动传感器801s及串口的程序
时间: 2023-09-16 09:11:55 浏览: 250
以下是用51单片机编写的801s振动传感器及串口程序:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit VibrationSensor = P3^2; // 振动传感器连接P3.2引脚
sbit Led = P1^0; // 连接LED灯的引脚
void UART_Init() // 串口初始化函数
{
TMOD = 0x20; // 定时器1工作在模式2
TH1 = 0xFD; // 波特率为9600,TH1计数初值
TL1 = 0xFD; // 波特率为9600,TL1计数初值
PCON = 0x00; // SMOD=0,波特率不加倍
TR1 = 1; // 启动定时器1
SCON = 0x50; // 串口模式1,允许接收
EA = 1; // 允许中断
ES = 1; // 允许串口中断
}
void UART_SendByte(uchar dat) // 通过串口发送一个字节
{
SBUF = dat;
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志
}
void UART_SendString(uchar *str) // 通过串口发送一个字符串
{
while (*str != '\0')
{
UART_SendByte(*str++);
}
}
void main()
{
Led = 0; // 关闭LED灯
UART_Init(); // 初始化串口
while (1)
{
if (VibrationSensor == 1) // 振动传感器检测到振动
{
Led = 1; // 打开LED灯
UART_SendString("Vibration Detected!\r\n"); // 通过串口发送警告信息
while (VibrationSensor == 1); // 等待振动结束
Led = 0; // 关闭LED灯
}
}
}
void UART_ISR() interrupt 4 // 串口中断服务函数
{
if (RI) // 接收到数据
{
RI = 0; // 清除接收完成标志
}
if (TI) // 发送完成
{
TI = 0; // 清除发送完成标志
}
}
```
该程序使用P3.2引脚连接振动传感器,当检测到振动时,通过串口发送警告信息并打开LED灯,直到振动结束后关闭LED灯。串口波特率为9600,使用定时器1实现波特率发生器。串口中断服务函数用于清除中断标志。
阅读全文