单片机串口扩展

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TXD PC机 RXD 232/422 转换器
75174
75175
75174
75175
75174
75175
……
TXD RXD TXD RXD
TXD
RXD
MCS-51 1号
MCS-51 2号
MCS-51 n号
多机通讯程序设计
⒈ PC机软件设计
开 始 初始化 8250 输入单片机 编号 发送单片机 编号 接收单片机送回 的编号 N 编号一致吗 ? Y 取键盘字 符
D5 D5
D6 D6
D7 D7
从PC机和单片机帧格式可知:通过软件编程,使得PC机在 发送地址(单片机编号)时,奇偶位为1,发送数据时为0;单片 机接收时,TB8为1表示收到的地址,为0表示收到的数据。
PC机与单片机的多级通信
例:从PC机的键盘上输入单片机的编号,要求PC机与该 单片机进行通信测试,从键盘上输入一个字符,发送给 某单片机,单片机受到该字符后,又发回给PC机,在屏 幕上显示出来。 由于RS-232C不能实现多机通信,故采用RS-422标准。 电路如下:
RS232电平转换芯片
电平转换 单片机电平是TTL电平,它与RS-232C电平不兼容, 必须进行电平转换。电平转换的电路很多,MAX232是 一种新型的专用集成电路,类似的集成电路还很多。
C1+ C1 C1C2+ C2T1IN TTL/CMOS 输入 T2IN TTL/CMOS 输出 R1OUT R2OUT 1 R2IN 1 电压倍增器 +5V~+10V 电压反向器 +10V~-10V 1 +5V 1 T1OUT T2OUT R1IN RS-232C 输入 VCC V+ VC3
outportb(0x3f8,c1); waitok: /*查询接收数据是否有效*/ coms=inportb(0x3fd); if((coms&0x01)==0) goto waitok; c2=inportb(0x3f8); printf(“The return char is:”); putchar(c2); }
PC机与单片机通信设计
二、PC机与单片机双机通信 PC机与单片机构成主从式上下位计算机系统。 例:从PC机键盘上输入一个字符,然后将这个字符发送给单片机, 单片机接收到这个字符后,不做任何处理,又将它发回给PC机,PC 机将这个字符显示在屏幕上。连接电路如下:
RXD PC机 TXD
T1OUT
T1IN(
RS232、RS422、RS485对比
接 口 性 能
功能 传输方式 逻辑“0”电平 逻辑“1”电平 最大速率 最大距离 驱动器加载输出电 压 接受器输入敏感度 接收器输入阻抗 组态方式 抗干扰能力 传输介质 RS-232C 双向,全双工 单端 3V~15V -3V~-15V 20kb/s 30m RS-422A 双向,全双工 差分 2V~6V -2V~-6V 10Mb/s 1200m RS-485 双向,半双工 差分 1.5V~6V -1.5V~-6V 10Mb/s 1200m
PC机COM口
MCS-51系列单片机串行通信接口
⒉ RS-422A通信接口 接口信号:9针D型头 电气特性 请求发送负RTS- 电平转换 请求发送负RTS+
清除发送正CTS+ 清除发送负CTS– 9 5
6
1
发送数据负TX- 发送数据正TX+ 接收数据正RX+ 接收数据负RX- 信号地GND
3.RS-485通信接口:将RS-422A的发送数据信号正端与 接收数据信号正端连起来,发送数据信号负端与接收 数据信号负端连起来就成为RS-485通信接口
例:设COM1的波特率为9600,则 outportb(0x3fb,0x80);/*写线路控制寄存器,访问波特率因子寄存器*/ outportb(0x3f8,0x0c);/*写入波特率因子低字节*/ outportb(0x3f9,0x00);/*写入波特率因子高字节*/
PC机串口初始化
⒉ 设置数据格式 例:设数据为7位,1位起始位,1位停止位,偶校验,则 设置如下:
向单片机发送 字符
接收单片机发回 的字符 显示发回的 字符 结 束
程序清单: #include “stdio.h” main() { char c1,c2,n1,n2; int coms; outportb(0x3fb,0x80); /*初始化8250*/ outportb(0x3f8,0x30); outportb(0x3f9,0x00); outportb(0x3fb,0x2b); /*8位数据,1位停止,奇偶校验位为1*/ outportb(0x3fc,0x03); /*PC机处于发送地址状态*/ outportb(0x3f9,0x00); /*禁止8250中断*/ printf(“Please input the number of MCS:\n”); scanf(“%c”,&n1); do{ /*查询发送移位寄存器是否空*/ coms=inportb(0x3fd)&0x40; }while(coms!=0x40); outportb(0x3f8,n1); /*PC机发送单片机地址编号*/ outportb(0x3fc,0x01); /*PC机处于接收状态*/ waitok1: /*查询单片机返回的编号是否有效*/ coms=inportb(0x3fd); if((coms&0x01)==0)
例2 PC机从COM1发送一个字符,程序如下: send(char sendchar) { int coms; do{ /*查询发送缓冲器是否空*/ coms=inportb(0x3fd)&0x20; }while(coms!=0x20); outportb(0x3f8,sendchar); }
例3 PC机从COM1接收一个字符,程序如下: char receive() { char coms,receivechar; waitok: /*查询接收数据是否有效*/ coms=inportb(0x3fd); if((coms&0x01)==0) goto waitok; receivechar= inportb(0x3f8); return receivechar; }
;接收PC机发来的字符 ;将字符回送给PC机 ;等待发送完毕 ;恢复现场
PC机与单片机通讯多机通信
三、PC机与单片机通讯多机通信 多机通信的关键问题:识别单片机!给单片机编号。 怎样识别单片机?
起始 位 起始 位 奇偶 位 TB8 停止 位 停止 位
D0 D0
D1 D1
D2 D2
D3 D3
D4 D4
C2
C4
RS-232C 输出
C1+ V+ C1C2+ C2VT2OU
T
R2IN
1 2 3 4 5 6 7 8
MAX 232
16 15 14 13 12 11 10 9
VCC GN D1OU T R T 1IN R1OU T T 1IN T2IN R2OU
T
PC机和单片机串口通讯的硬件电路
接8051机 11p(TXD) 10p(RXD)
±5V~±15V
±3V 3~7KΩ 点对点 弱 扁平或多芯电缆
±2V
±0.2V >4KΩ 1台驱动器:10台接 收器 强 二对双绞线
±1.5V
±0.2V >7KΩ 32台驱动器:32台 接收器 强 一对双绞线
3 PC机与单片机通信
PC机是国内目前使用应用最广泛的微机,在与 单片机串行接口后,可以方便地构成主从分布式 多机系统。从机(单片机)作数据采集或实时控 制,主机作数据处理或中央管理等。 这种多机系统在过程控制、仪表生产、生产自 动化和企业管理等方面都有广泛的应用。此外微 机和单片机串行接口后,可以大大方便单片机的 开发过程。
复位后初始值 XXXXXXXXB XXXXXXXXB 00000000B 00000001B 00000000B 00000000B
线路控制寄存器(LCR)
调制解调器控制寄存器(MCR)
3FBH
3FCH
2FBH
2FCH
01100000B
XXXX0000B
线路状态寄存器(LSR)
调制解调器状态寄存器(MSR)
outportb(0x3fb,0x1a);
⒊ 设置操作方式 不允许中断:
outportb(0x3fc,0x03); 允许中断: outportb(0x3fc,0x0b); 自测试工作方式,且不允许中断: outportb(0x3fc,0x13);
⒋ 设置中断允许寄存器 开放中断语句:
outportb(0x3f9,0x0f);
MCS-51单片机通信软件
主程序
开 始 初始化定时器 T1 初始化串行口 启动定时器T1 开放中断 主程序踏 步
中断服务程序
中断服务程 序 关中断
清接收中断标志 RI
保护现场 接收PC机发来的字 符 将字符发送回PC 机 开中断,恢复现 场 中断返 回
单片机接收程序
主程序: ORG LJMP ORG LJMP MAIN: MOV MOV MOV MOV MOV SETB SETB SETB HERE: SJMP 0000H MAIN 0023H SERVE TMOD,#20H ;初始化T1 TH1,#0F3H TL1,#0F3H SCON,#50H ;串行口为方式1,REN=1 PCON,#80H ;SMOD=1 TR1 EA ES HERE
中断服务程序: SERVE: CLR EA CLR RI PUSH PSW SETB RS0 CLR RS1 PUSH ACC MOV A,SBUF MOV SBUF,A WAIT: JNB TI,WAIT CLR TI POP ACC POP PSW SETB EA RETI END
;中断服务程序 ;保护现场
PC机的发送、接收程序
例1 将PC机的COM1初始化为9600波特率、7位数据、偶 校验、1位停止位、不中断,则初始程序如下: initcom1() { outportb(0x3fb,0x80); /*写线路控制寄存器,访问 波特率因子寄存器*/ outportb(0x3f8,0x0c); /*写入波特率因子低字节*/ outportb(0x3f9,0x00); /*写入波特率因子高字节*/ outportb(0x3fb,0x1a); /*设数据为7位,1位起始 位, 1位停止位,偶校验*/ outportb(0x3fc,0x03); /*不允许中断*/ }
开 始 初始化8250 有键输入吗? Y 取键盘字符 发送寄存器空否 ? Y 向单片机发送字 符 接收单片机发回的字 符 接收的数据有效码 ? Y 显示发回的字 符 结 束 N N N
do{ /*查询发送缓冲器是否空*/ coms=inportb(0x3fd)&0x20; }while(coms!=0x20);
一、PC机串口资源及编程使用方法 PC机一般有COM1和COM2两个串口。
端口地址 COM1 3F8H 3F8H 3F8H 3F9H 3F9H 3FAH COM2 2F8H 2F8H 2F8H 2F9H 2F9H 2FAH
寄存器名称 发送器保持寄存器(TBR) 接收器数据寄存器(RBR) 波特绿因子低位寄存器(DLL) 波特绿因子高位寄存器(DLH) 中断允许寄存器(IER) 中断标识寄存器(IIR)
TXD MCS-51 RXD
MAX232 R1IN R1OUT
由于PC机是RS232C电平,单片机 是TTL电平,用 MAX232进行电平 转换。
பைடு நூலகம்
约定: 波特率:2400b/s 信息格式:8位数据,1位停止位 传送方式:PC机采用查询式收发数据,单片机采用中断式收 发数据
PC机发送程序
⒈ PC机的通信软件
50
75 110 134.5 150 300
00H
00H 00H 00H 00H 00H
C0H
60H 40H 3AH 30H 20H
600
1200 1800 2000 2400 3600
00H
00H 00H 00H 00H 00H
18H
10H 0CH 06H 03H 01H
4800
7200 9600 19200 38400 115200
3FDH
3FEH
2FDH
2FEH
XXXXXXXXB
XXXXXXXXB
PC机串口初始化
使用串口必须先初始化,有以下4个步骤。 ⒈ 设置波特率 DLH DLL 波特率 DLH DLL 波特率 DLH DLL 波特率
09H
06H 04H 03H 03H 01H
00H
00H 17H 59H 00H 80H
#include “stdio.h” main() { char c1,c2; int coms; outportb(0x3fb,0x80);/*初始化8250*/ outportb(0x3f8,0x30); outportb(0x3f9,0x00); outportb(0x3fb,0x03);/*8位数据,1位停 止位*/ outportb(0x3fc,0x03); c1=getchar();
相关文档
最新文档