#include <reg52.h> #include <intrins.h> sfr AUXR = 0x8e; sbit D5 = P2^0; void UartInit(void) { SCON = 0x50; PCON = 0x00; TMOD =0x20; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; } void Delay1000ms() { unsigned char i, j, k; _nop_(); i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } void sendByte(char data_msg) { SBUF = data_msg; while(TI==0); TI =0; } void sendString(char* str) { while(*str !='\0') { sendByte(*str); str++; } } void main() { char cmd; UartInit(); while(1) { if(RI==1) { RI = 0 ; cmd = SBUF; if (cmd == 'o') { D5 =0; } if (cmd == 'f') { D5 =1; } } } }添加注释
时间: 2023-12-02 14:04:50 浏览: 97
Keil 中头文件INTRINS.H的作用
```
#include <reg52.h> // 用于STC89C52单片机的头文件
#include <intrins.h> // 包含了一些内嵌汇编指令
sfr AUXR = 0x8e; // 定义AUXR寄存器的地址,用于控制定时器
sbit D5 = P2^0; // 定义P2口的0号引脚为D5
void UartInit(void) { // 初始化串口函数
SCON = 0x50; // SCON寄存器设置,其中SM0=0、SM1=1为模式1:8位数据,可变波特率
PCON = 0x00; // PCON寄存器设置,用于波特率的计算
TMOD = 0x20; // TMOD寄存器设置,其中M1=1,M0=0为定时器1工作模式2:8位自动重装计数器
TH1 = 0xFD; // 定时器1的初值,用于波特率的计算
TL1 = 0xFD; // 定时器1的初值,用于波特率的计算
TR1 = 1; // 启动定时器1
}
void Delay1000ms() { // 延时函数,用于控制程序执行的速度
unsigned char i, j, k;
_nop_(); // 内嵌汇编指令,用于延时
i = 8; // 根据定时器的设置,需要延时8次才能达到1秒
j = 1;
k = 243;
do {
do {
while (--k); // 内嵌汇编指令,用于延时
} while (--j);
} while (--i);
}
void sendByte(char data_msg) { // 发送单个字节的数据
SBUF = data_msg; // 将数据写入SBUF寄存器
while(TI==0); // 等待数据发送完成
TI = 0; // 发送完成后清除TI标志位
}
void sendString(char* str) { // 发送字符串
while(*str !='\0') { // 判断字符串是否结束
sendByte(*str); // 逐个字节发送
str++; // 指向下一个字节
}
}
void main() {
char cmd; // 定义接收到的指令
UartInit(); // 初始化串口
while(1) {
if(RI==1) { // 判断是否接收到数据
RI = 0 ; // 清除RI标志位
cmd = SBUF; // 获取接收到的数据
if (cmd == 'o') { // 判断是否为'o'
D5 = 0; // 如果是,将D5引脚输出低电平
}
if (cmd == 'f') { // 判断是否为'f'
D5 = 1; // 如果是,将D5引脚输出高电平
}
}
}
}
```
这是一个基于STC89C52单片机的程序,实现了串口通信和控制P2口的0号引脚(即D5)的输出状态,使其可以控制外部的电路。其中,UartInit()函数是初始化串口的,sendByte()函数是发送单个字节的数据,sendString()函数是发送字符串,main()函数是程序的主函数,通过接收串口传来的指令,判断控制D5的输出状态。
阅读全文