这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能:
引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。
定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。
定义了一个发送数据的函数send,该函数将数据发送到串口,等待数据发送完成后清除发送中断标志。
定义了一个打印字符串的函数Print_Str,该函数将一个以空字符结尾的字符串发送到串口。
定义了串口初始化函数SerInit,该函数配置串口通信的相关寄存器,包括设置波特率、串口模式、定时器模式等。
定义了一个延时函数delay_ms,用于产生指定毫秒数的延时。
定义了全局变量Txd_data,用于保存接收到的数据。
定义了串口中断服务函数Uart_isr,当接收到数据时会触发串口中断,该函数将接收到的数据发送回去。
在main函数中,首先调用SerInit进行串口初始化,然后开启总中断,延时一段时间,接着使用Print_Str函数发送一些字符串。
在main函数的主循环中,程序会一直循环执行。
总体来说,这段代码配置了8051单片机的串口通信功能,使其能够接收和发送数据。通过串口,你可以与外部设备进行数据交换和通信。
go
#include "reg52.h"
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define FSOC 11059200L
#define BAUD 9600
void send(unsigned char dat) {
SBUF = dat;
while (!TI);
TI = 0;
}
void Print_Str(unsigned char *s) {
while (*s != '\0') {
send(*s++);
}
}
void SerInit(void) {
SCON = 0x50;
TMOD = 0x20;
TCON = 0x40;
TH1 = -(FSOC / BAUD / 12 / 16);
TL1 = -(FSOC / BAUD / 12 / 16);
PCON = 0x80;
RI = 0;
TI = 0;
ES = 1;
}
void delay_ms(unsigned int t) {
unsigned char ttt;
while (t--) {
for (ttt = 0; ttt < 125; ttt++);
}
}
unsigned char Txd_data;
void Uart_isr() interrupt 4 {
if (RI) {
Txd_data = SBUF;
RI = 0;
send(Txd_data);
}
}
void main(void) {
SerInit();
EA = 1;
delay_ms(200);
Print_Str("zheng dian bao shi ");
Print_Str("\r\n");
while (1) {
}
}