在AT89S51片内RAM20H~3FH单元中有32B数据若采用方式1 进行串行通讯波特率为1200波特 fosc=12MHz编写发送接收程序对。
由于方式1需要使用定时器来产生波特率,因此需要配置定时器和中断。下面是AT89S51的串口配置和发送/接收程序示例:
串口配置:
void InitSerial()
{
TMOD = 0x20; // 定时器1工作在模式2
TH1 = 0xfd; // 波特率为1200,TH1的初值为0xfd
SCON = 0x50; // 串口工作在模式1
TR1 = 1; // 启动定时器1
EA = 1; // 开启总中断
ES = 1; // 开启串口中断
}
发送程序:
void SendSerial(char ch)
{
SBUF = ch; // 将要发送的字符存入SBUF
while(!TI); // 等待发送完成
TI = 0; // 清除发送完成标志位
}
接收程序:
void ReceiveSerial() interrupt 4
{
char ch;
if(RI) // 判断是否接收到数据
{
ch = SBUF; // 读取接收到的数据
RI = 0; // 清除接收完成标志位
// TODO: 处理接收到的数据
}
}
注意,以上程序需要在主函数中调用InitSerial()函数进行串口初始化。处理接收到的数据的代码需要根据具体需求进行编写
原文地址: http://www.cveoy.top/t/topic/hbNA 著作权归作者所有。请勿转载和采集!