用c语言实现串行输入16个字符,存入片内RAM的50H起始单 元,串行口波特率为2400(设晶振为11.0592MHz)。(采用方式1)
时间: 2024-05-05 08:17:57 浏览: 83
可以使用以下代码实现:
```c
#include <reg51.h>
void main() {
unsigned char i;
TMOD = 0x20; // 定时器1作为8位自动重装载计数器,模式2
TH1 = 0xfd; // 波特率2400,晶振11.0592MHz
SCON = 0x50; // 串行口工作方式1,允许接收
TR1 = 1; // 启动定时器
for (i = 0; i < 16; i++) {
while (!RI); // 等待接收到数据
RI = 0; // 清除接收标志位
P0 = SBUF; // 将接收到的数据存入P0口
*(unsigned char xdata *) (0x50 + i) = P0; // 存入片内RAM中
while (!TI); // 等待发送完成
TI = 0; // 清除发送标志位
}
while (1); // 程序结束
}
```
串行口的工作方式1是指8位数据,无校验位,1位停止位。在本程序中,波特率的计算公式为:
波特率 = 晶振频率 / (32 * (256 - TH1))
因为定时器模式为模式2,所以定时器1的初值为256-TH1,计满后会自动重新从256-TH1开始计数。
程序将接收到的数据存入P0口,再将其存入片内RAM中。P0口是一个8位I/O端口,用于输入输出数据。片内RAM的50H起始单元是一个外部扩展存储器的地址,通过变量指针的方式存取。
程序最后进入死循环,等待结束。
阅读全文