通用串口通信.docx
- 文档编号:10579396
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:57
- 大小:178.81KB
通用串口通信.docx
《通用串口通信.docx》由会员分享,可在线阅读,更多相关《通用串口通信.docx(57页珍藏版)》请在冰豆网上搜索。
通用串口通信
两片51单片机互相通信的串行通信程序(一个发送程序,一个接收程序)
作者:
佚名 来源:
不详 录入:
Admin 更新时间:
2008-7-2620:
01:
31 点击数:
2
【字体:
】
系统晶振是11.0592MHz
;51单片机发送单片机程序
;此程序用Proteus仿真通过
;此程序在硬件上测试通过
;2007-05-27
;附有简化电路图
;为了使初学者能看懂,程序与图尽可能的简单扼要
;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮
;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信
ORG 0000H
AJMP START
ORG 0040H
START:
MOV SP,#60H
MOV SCON,#50H ;串口方式1
MOV TMOD,#20H ;T1方式2
MOV TL1,#0FDH ;波特率9600的常数
MOV TH1,#0FDH
SETB TR1
MOV r5,#00h
WAIT:
MOV p1,#0ffh
MOV a,p1
MOV r5,a
lcalldelay ;读键盘,这里去抖动,还要加几句话
MOV a,p1
nop
CJNE A,5,WAIT ;是否有键输入
MOV SBUF,a ;串口输出键盘输入的值
NOP
SS:
JBC TI,WAIT ;是否发送完毕
SJMP SS
DELAY:
;延时子程序
PUSH 0 ;保存现场
PUSH 1
MOV 0,#06H
DELAY1:
MOV 1,#0H
DJNZ 1,$
DJNZ 0,DELAY1
POP 1 ;恢复现场
POP 0
RET
END
;系统晶振是11.0592MHz
;51单片机接收单片机程序
;此程序用Proteus仿真通过
;此程序在硬件上测试通过
;2007-05-27
;附有简化电路图
;为了使初学者能看懂,程序与图尽可能的简单扼要
;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮
;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信
ORG 0000H
AJMP START
ORG 0040H
START:
MOV SCON,#50H ;串口方式1
MOV TMOD,#20H ;T1方式2
MOV TL1,#0FDH ;波特率9600的常数
MOV TH1,#0FDH
SETB TR1
WAIT:
JBC RI,DIS_REC ;是否接收到数据
sjmp wait
DIS_REC:
MOV A,SBUF ;读串口接收到的数据
MOV p1,a
SJMP wait
end
PC机与多MCS-51单片机间的串行通信设计
作者:
北京工业大学 许丽佳 陈阳舟 来源:
电子工程师 点击数:
1023 更新时间:
2006-5-30
您可以添加到网摘让更多人关注此文章:
摘 要:
主要讲解了IBM-PC机与MCS-51单片机多机系统的通信原理,给出了其硬件接口框图,并详细地分析了系统的多机通信软件设计。
关键词:
单片机,分布式系统,串行通信
1 引 言
在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。
它们大多由IBM-PC微机和MCS-51单片机组成。
单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。
同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。
各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。
故IBM-PC机(上位机)与各MCS-51单片机(下位机)之间的通信显得尤其重要。
本文主要探讨它们之间的远距离串行通信接口和软件程序设计。
2 硬件设计接口
RS-232-C串行通信接口是美国电气工业协会(EIA)与BELL公司等一起开发的一种标准通信协议,现在它在终端、外设与计算机中被广泛采用。
该标准规定了21个信号和25个引脚,但在智能仪器与计算机之间的通信中常用2个信号及3个引脚(2脚数据输入,3脚数据输出,7脚信号地)。
它采用双极性的负逻辑信号,0逻辑信号为+3V至12V,1逻辑信号为-3V至-12V,它的传输速率最大为20kbit/s,传输距离仅为15m。
由于RS-232主要是完成电平移位、转换和信号反相等,所以它有自己的电平转换与驱动芯片,如MC1488(发送)与MC1489(接受)。
IBM-PC机有两个标准的RS-232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由TXD(发送数据)和RXD(接收数据)来进行全双工通信的,它们的电平是TTL电平,为了PC机与MCS-51机之间能可靠地进行串行通信,需要用电平转换芯片。
由于MC1488和MC1489需要±12V、+5V电源供电,故采用MAXIM公司生产的低功耗、单电源的MAX232芯片,因为它自身带有电源电压变换器,可以把+5V电源变换成RS-232输出电平所需的±10V电压,能实现RS-232的技术指标,并只需要+5V的电源,为串行通信带来了较好的性能和低廉的价格。
MAX232的接口电路图如图2所示。
PC机采用可编程串行异步通信控制器8251A来实现,通过对INS8251A初始化可以控制串行数据传送格式和速度及其工作方式,使得它与单片机的通信方式一致,从而实现PC机与单片机之间的通信。
MCS-51和8251A的连接图见图3。
由于远距离数据传输,在系统中用了两片MAX485芯片进行数据传送,还采用了两级光电隔离来提高系统的抗干扰能力。
单片机和PC机之间的RS-232通信硬件接口电路框图如图4所示。
3 串行通信的软件程序设计
3.1 主从式多机通信原理
MCS-51用于多机通信时必须工作在方式2或方式3。
以方式3为例,每发送一帧数据为11位:
1位起始位(0),8位数据位和1位停止位
(1),附加的第9位数据在非多机系统中为奇偶校验位,在发送端有SCON的TB8产生,在接收端传送到SCON的RB8。
它还可设定为“0”或“1”作为在多机通信中区分数据帧(0标志)还是地址帧(1标志)的标志。
在MCS-51多机系统中有以下协议:
所有的各从机均处于听命状态,即SM2=1,以便接收主机发来的地址,当接收到一帧信息的RB8为“1”时,表示主机发送来的是地址信息,所有的从机均发生接收中断,否则中断屏蔽。
当一从机进入相应的中断服务程序,把接收到的地址和本机的地址比较,如果相符合就令其SM2=0,并向主机发回本机地址以作应答,该从机就与主机联通,准备接收主机发来的命令或数据信息,而其他的未被寻址从机保持SM2=1并退出各自的中断服务程序。
这样,只有SM2=0的从机才能接收到主机发送来的数据信息,顺利实现地址帧和数据帧的分离。
被寻址从机在通信完成后重新使SM2=1,并退出中断服务程序,等待下次通信。
3.2 多机通信协议
要实现单片机和PC机的正常通信,必须正确设定它们两者之间的通信方式,保证双方都用相同的波特率、起始位、停止位、奇偶校验位,并且要建立双方通信的应答信号。
单片机既可工作在同步移位寄存器方式下也可工作在UART(通用异步收发器)下。
串行口的通信方式是由特殊功能寄存器SCON来控制的。
其各控制定义如下:
SM0,SM1:
工作模式设定位;SM2:
允许使用方法2、3多机通信控制位;RB8:
接收数据第9位;TB8:
发送数据第9位;TI:
发送中断标志;RI:
接收中断标志。
本文中工作方式为3,即9位UART定时器T1作为波特率发生器,工作在方式2,若选定波特率为1200bps,则计数初值为0E8H(SMOD=0,时钟频率Fosc为11.059MHz)。
PC机的异步通信接口为INTEL8251A,它可设定1位、1.5位或2位停止位,数据可在5~8位之间选择,通信频率为0~9.6Kbps,有奇偶校验、帧校验、溢出校验三种方式。
可通过对它写入一定的方式控制字、命令控制字从而进行初始化。
它与MCS-51的连接如前面所示,则它的数据口地址为0F0H,控制口地址为0F1H。
它的工作状态寄存于其状态字寄存器中,可由MCS-51的CPU读取。
通信协议如下:
(1)串行通信波特率为1200bps;
(2)帧格式为8位数据位,一位起始位,一位可编程的第9位(即发送和接收的地址/数据位的标志位),一位停止位;(3)主机和从机遵循主从原则,主机用呼叫方式选择从机,数据在主机和从机之间双向传递,各从机之间的相互通信需通过主机作为中介;(4)主从机之间还应传送一些供它们识别的命令和状态字,如以00H表示主机发送从机接收命令,以01H表示从机发送主机接收命令等。
3.3 通信程序设计思路及其实现
程序主要包括主机程序(由主机主程序和通信子程序组成)、从机主程序和其中断服务程序组成。
主机程序主要完成对8251A的初始化以及主机与从机之间的通信,主机程序框图见图5。
而从机主程序主要完成对串行口的初始化、波特率的设置(应与8251A的波特率一致),它的中断程序主要用来完成MCS-51单片机与PC机的数据通信。
从机中断服务程序框图见图6。
这里简单介绍8251A的初始化程序,设8251A工作于异步通信方式,波特率系数×1,字符长度为8位,偶校验,所以方式字为7DH,又设8251A为全双工方式,出错标志复位,故其命令控制字为27H,其相应的初始化程序如下:
MOVR0,#0F0H
4 结束语
本系统软硬件在IBMPC/XT机和DICE系列的MCS-51单片机上进行过调试,运行良好,验证了其在仿真平台的控制,现已用于实际系统,且特别适用于从机实时性要求较高的中小型工控系统。
参考文献
1 何立民.单片机应用文集
(2).北京:
北京航空航天大学出版社,1993
2 何立民.单片机高级教程.北京:
北京航空航天大学出版社,2000
3 胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,1996
4 陈荣保,肖本贤,李钢.基于MODEM和单片机的远程通讯系统设计与实现.微电子学与计算机,1999
(1)5 何飞跃。
基于MCS-51单片机的LCU与上位机的通信.微计算机信息,1999
(1)
单片机C51串口中断接收和发送测试例程(含通信协议的实现)
通信协议:
第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。
测试方法:
可以将串口调试助手的发送框写上95102025,并选上16进制发送,接收框选上16进制显示,如果每发送一次就接收到95102025,说明测试成功。
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收
//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的
#include
#include
#defineINBUF_LEN4//数据长度
unsignedcharinbuf1[INBUF_LEN];
unsignedcharchecksum,count3;
bitread_flag=0;
voidinit_serialcomm(void)
{
SCON=0x50;//SCON:
serailmode1,8-bitUART,enableucvr
TMOD|=0x20;//TMOD:
timer1,mode2,8-bitreload
PCON|=0x80;//SMOD=1;
TH1=0xF4;//Baud:
4800fosc=11.0592MHz
IE|=0x90;//EnableSerialInterrupt
TR1=1;//timer1run
//TI=1;
}
//向串口发送一个字符
voidsend_char_com(unsignedcharch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
//向串口发送一个字符串,strlen为该字符串长度
voidsend_string_com(unsignedchar*str,unsignedintstrlen)
{
unsignedintk=0;
do
{
send_char_com(*(str+k));
k++;
}while(k } //串口接收中断函数 voidserial()interrupt4using3 { if(RI) { unsignedcharch; RI=0; ch=SBUF; if(ch>127) { count3=0; inbuf1[count3]=ch; checksum=ch-128; } else { count3++; inbuf1[count3]=ch; checksum^=ch; if((count3==(INBUF_LEN-1))&&(! checksum)) { read_flag=1;//如果串口接收的数据达到INBUF_LEN个,且校验没错, //就置位取数标志 } } } } main() { init_serialcomm();//初始化串口 while (1) { if(read_flag)//如果取数标志已置位,就将读到的数从串口发出 { read_flag=0;//取数标志清0 send_string_com(inbuf1,INBUF_LEN); } } } RS-232、RS-422与RS-485标准及应用 一、RS-232、RS-422与RS-485的由来 RS-232、RS-422与RS-485都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。 RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。 为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。 RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。 为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。 由于EIA提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称谓。 RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。 因此在视频界的应用,许多厂家都建立了一套高层通信协议,或公开或厂家独家使用。 如录像机厂家中的Sony与松下对录像机的RS-422控制协议是有差异的,视频服务器上的控制协议则更多了,如Louth、Odetis协议是公开的,而ProLINK则是基于Profile上的。 二、RS-232串行接口标准 目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。 RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。 RS-232采取不平衡传输方式,即所谓单端通讯。 收、发端的数据信号是相对于信号地,如从DTE设备发出的数据在使用DB25连接器时是2脚相对7脚(信号地)的电平,DB25各引脚定义参见图1。 典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5~+15V,负电平在-5~-15V电平。 当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。 接收器典型的工作电平在+3~+12V与-3~-12V。 由于发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。 RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。 所以RS-232适合本地设备之间的通信。 其有关电气参数参见表1。 规定 RS232 RS422 R485 工作方式 单端 差分 差分 节点数 1收、1发 1发10收 1发32收 最大传输电缆长度 50英尺 400英尺 400英尺 最大传输速率 20Kb/S 10Mb/s 10Mb/s 最大驱动输出电压 +/-25V -0.25V~+6V -7V~+12V 驱动器输出信号电平 (负载最小值) 负载 +/-5V~+/-15V +/-2.0V +/-1.5V 驱动器输出信号电平 (空载最大值) 空载 +/-25V +/-6V +/-6V 驱动器负载阻抗(Ω) 3K~7K 100 54 摆率(最大值) 30V/μs N/A N/A 接收器输入电压范围 +/-15V -10V~+10V -7V~+12V 接收器输入门限 +/-3V +/-200mV +/-200mV 接收器输入电阻(Ω) 3K~7K 4K(最小) ≥12K 驱动器共模电压 -3V~+3V -1V~+3V 接收器共模电压 -7V~+7V -7V~+12V 表1 三、RS-422与RS-485串行接口标准 1.平衡传输 RS-422、RS-485与RS-232不一样,数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B,如图2。 通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通用 串口 通信