欲实现单片机向PC机不断发送0-9,试利用串行口方式2实现,采用偶校验4假设晶振为11.0592MHZ,波特率为9600。
时间: 2024-04-09 18:28:17 浏览: 194
单片机与PC机串行通信的实现
4星 · 用户满意度95%
要实现单片机向PC机不断发送0-9,可以利用51单片机的串行口方式2,并且设定偶校验和特定的晶振和波特率。
首先,设置晶振频率为11.0592MHz,可以使用以下语句:
```c
#define FOSC 11059200UL
```
然后,设置波特率为9600,可以使用以下语句:
```c
#define BAUDRATE 9600
#define DIVIDER (unsigned int)(FOSC / 32 / BAUDRATE)
#define HIGH_BYTE(divider) ((unsigned char)((divider) >> 8))
#define LOW_BYTE(divider) ((unsigned char)(divider))
```
接下来,初始化串行口,设置为方式2和偶校验,并且设置波特率:
```c
void init_serial()
{
SCON = 0x50; // 设置为方式2,允许接收
TMOD &= 0x0F; // 清零T1的控制位
TMOD |= 0x20; // 设置T1为方式2
TH1 = HIGH_BYTE(DIVIDER); // 设置波特率
TL1 = LOW_BYTE(DIVIDER); // 设置波特率
PCON |= 0x80; // 启用波特率发生器
EA = 1; // 允许中断
ES = 1; // 允许串行口中断
}
```
然后,编写一个发送函数,用于发送0-9的数据:
```c
void send_data(unsigned char data)
{
SBUF = data; // 将数据发送到串行缓冲区
while (!TI); // 等待发送完成
TI = 0; // 清除发送完成标志位
}
```
最后,在主函数中循环发送0-9的数据:
```c
void main()
{
init_serial(); // 初始化串行口
unsigned char i;
for (i = 0; i <= 9; i++)
{
send_data(i); // 发送数据
}
while (1); // 程序无限循环
}
```
这样,单片机就会通过串行口方式2向PC机不断发送0-9的数据,并且采用偶校验,晶振为11.0592MHz,波特率为9600。
阅读全文