一、单片机与PC机串行通信的设计
工业现场的测控系统中,常使用单片机进行监测点的数据采集,然后单片机通过串口与PC通信,把采集的数据串行传送到PC机上,再在PC机上进行数据处理。
PC机配置的都是RS-232标准串口,为D型9针插座,输入/输出为RS-232电平。D型9针插头引脚如下:
如下表为RS-232C的D型9针插头的引脚定义。
引脚号 | 功能 | 符号 | 方向 |
---|---|---|---|
1 | 数据暂替检测 | DCD | 输入 |
2 | 接收数据 | RXD | 输入 |
3 | 发送数据 | TXD | 输出 |
4 | 数据终端就绪 | DTR | 输出 |
5 | 信号地 | GND | |
6 | 数据通信设备准备好 | DSR | 输入 |
7 | 请求发送 | RTS | 输出 |
8 | 清除发送 | CTS | 输入 |
9 | 振铃指示 | RI | 输入 |
由于两者电平不匹配,因此必须把单片机输出的TTL电平转换为RS-232电平。
单片机与PC的接口如下图所示。图中的转换芯片为MAX232,接口连接只用了3条线,即RS-232插座中的2引脚、3引脚与5引脚。
二、单片机向PC发送数据示例
要求单片机通过串行口的TXD引脚向PC机串行发送8个数据字节。在proteus中使用两个串行口虚拟终端观察串行口线上出现的串行传输数据。
两个虚拟终端窗口为VT1和VT2,其中窗口VT1显示的数据表示单片机串口发送给PC机的数据,窗口VT2显示的数据表示由PC机经RS-232串口模型COMPIM接收到的数据,由于使用了串口模型COMPIM,从而省去了PC机的模型。
proteus仿真原理图如下:
需要注意要设置虚拟终端的波特率与代码中设置的波特率保持一致。经过MAX232转换后电平是相反的,设置VT2属性中的【RX/TX Polarity】为【Inverted】。
软件设计,首先初始化串口通信,设置串口工作方式1,定时器工作方式2,波特率9600bps,波特率不加倍,代码如下:
void UsartInit()
{
SCON=0x40; // 设置串口工作方式1
TMOD=0x20; // 设置定时器T1工作方式2
TH1=TL1=0xFD; // 设置波特率为9600bps,波特率不倍增
PCON=0x00;
EA=1;
TR1=1;
}
发送数据功能单独编写一个函数,如下:
void send