89C51单片机内部RAM的数组samp【10】(取值范围0~99)通过串口工作方式2,偶校验,发到上位机。数组元素类型unsigned char ,变量每一位按照十位和个位依次传输。代码
时间: 2024-04-09 09:28:01 浏览: 90
以下是使用89C51单片机通过串口工作方式2,偶校验,将内部RAM的数组samp【10】发送到上位机的代码:
```c
#include <reg51.h>
#define BAUDRATE 9600 // 串口波特率
#define FREQ_OSC 11059200 // 单片机振荡器频率
unsigned char samp[10] = {11, 22, 33, 44, 55, 66, 77, 88, 99, 0};
unsigned char parity = 0;
void init_serial()
{
TMOD |= 0x20; // 设置定时器1为模式2(8位自动重装载)
TH1 = TL1 = -(FREQ_OSC / (16 * BAUDRATE)); // 设置波特率
TR1 = 1; // 启动定时器1
SCON = 0x50; // 设置串口为模式2(8位数据,可变波特率)
EA = ES = 1; // 允许串口中断
}
void serial_send(unsigned char data)
{
while (!TI); // 等待上一个数据发送完成
TI = 0;
SBUF = data;
}
void send_data(unsigned char data)
{
unsigned char temp;
temp = (data / 10) + '0'; // 十位数据转换为ASCII码
parity ^= temp; // 计算校验位
serial_send(temp);
temp = (data % 10) + '0'; // 个位数据转换为ASCII码
parity ^= temp; // 计算校验位
serial_send(temp);
}
void send_array()
{
unsigned char i;
for (i = 0; i < 10; i++)
{
send_data(samp[i]);
}
send_data(parity); // 发送校验位
}
void main()
{
init_serial(); // 初始化串口
while (1)
{
send_array(); // 发送数组到上位机
}
}
```
这段代码会将数组`samp`中的10个元素通过串口发送到上位机,每个元素的十位和个位按照ASCII码形式传输,并且会计算偶校验位。请注意,此代码仅包含发送部分,接收数据的部分需要另外的代码来实现。
阅读全文