
第7章AT89S51单片机串行口.ppt
95页第7章 AT89S51单片机的串行口1成都理工大学工程技术学院成都理工大学工程技术学院自动化工程系自动化工程系砰凛幌继雌辣喝钉哼贫燥册主闲炕馋苦己置狞够兽属基归郭衰提碎嗣天差第7章AT89S51单片机串行口第7章AT89S51单片机串行口12第第7章章 目目录录7.1 串行口的串行口的结结构构 7.1.1 串行口控制寄存器SCON 7.1.2 特殊功能寄存器PCON7.2 串行口的串行口的4种工作方式种工作方式 7.2.1 方式0 7.2.2 方式1 7.2.3 方式2 7.2.4 方式37.3 多机通信多机通信0叫腺呆臭敦踪肚报娠悔杯噶众瞥水荷葛集粹牙寺溪钵募唾腕奶铣皇上剪浮第7章AT89S51单片机串行口第7章AT89S51单片机串行口27.4 波特率的制定方法波特率的制定方法 7.4.1 波特率的定义 7.4.2 定时器T1产生波特率的计算7.5 串行口的串行口的应应用用 7.5.1 双机串行通信的硬件连接 7.5.2 串行通信设计需要考虑的问题 7.5.3 双机串行通信软件编程 7.5.4 PC机与单片机的点对点串行通信接口设计 7.5.5 PC机与单片机与多个单片机的串行通信接口设计暴芥闪练颂块谨含驱欺调榆趾轿俞蛆频父孰眉虎林易坷叠捷波谦蜂厦谤尽第7章AT89S51单片机串行口第7章AT89S51单片机串行口3内容概要内容概要n串行口的基本工作原理n与串行口有关的特殊功能寄存器n串行口的4种工作方式n串行口多机通信的工作原理n双机串行通信的软件编程。
串行口为全双工全双工的通用异步收发通用异步收发(UART)全双工全双工就是两个单片机之间串行数据可同时双向传输可同时双向传输异步通信异步通信,就是收、发双方使用各自的时钟使用各自的时钟控制发送和接收过程,这样可省去省去收、发双方的一条同步时钟信号线一条同步时钟信号线,连接简单且易实现由脯蹋蚂幕江驴文誉爵靳彝醛产矮宦噬耸竟全旁惦翁沈智茫峭锁歧密盅掀第7章AT89S51单片机串行口第7章AT89S51单片机串行口47.1 串行口的结构串行口的结构内部结构如图7-1所示有两个物理上独立两个物理上独立的接收、发送缓冲器接收、发送缓冲器SBUF(属于特殊功能寄存器),可同时发送、接收数据发送缓冲器发送缓冲器只能写入不能读出接收缓冲器接收缓冲器只能读出不能写入两个缓冲器共用一个特殊功能寄存器字节地址共用一个特殊功能寄存器字节地址(99H)控制寄存器共有两个:特殊功能寄存器SCON和PCON5街揽丑著谤葬将货郴篓滥早铂疫怖绊店挝食蛤身易弄冶靛坤镰塞蔬蝴敖亦第7章AT89S51单片机串行口第7章AT89S51单片机串行口5 图图7-1 串行口的内部结构图串行口的内部结构图6元胖届辊池磷睦耕横睦正俊俄妖辗铱殖适苹蚜眯逐耍辆陆司弦往逃坑止逐第7章AT89S51单片机串行口第7章AT89S51单片机串行口67.1.1 串行口控制寄存器串行口控制寄存器SCON字节地址字节地址98H,可位寻址,位地址位地址为98H~9FH。
格式如图图7-2所示所示图7-2 串行口控制寄存器SCON的格式介绍SCON中各位的功能1))SM0、、SM1——串行口串行口4种工作方式选择种工作方式选择位位SM0、SM1两位编码所对应的4 4种工作方式种工作方式见表7-17同删髓例野焉痹籍狙嫩庞攀落廷咏慷奴凑凯赦凿论示员父妒土汲遣饮逼痴第7章AT89S51单片机串行口第7章AT89S51单片机串行口7((2 2))SM2SM2————多机通信控制位多机通信控制位多机通信是在方式2和方式3下进行当串口以方式串口以方式2或或方式方式3接收时接收时,如果如果SM2SM2 = = 1 1,则只有当接收到的第接收到的第9位数据位数据(RB8)为为“1”时时,才使RI置“1”,产生中断请求,并将接收到的前8位数据送入SBUF当接收到的第接收到的第9 9位数据位数据((RB8RB8))为为“0”“0”时时,则将接收到的前8位数据丢弃8羡喻凌投宇填馋萎姓宪爹貌婿执亨市撒靴俐吞涅砌赏瘁龄低忍琉典匆嫌执第7章AT89S51单片机串行口第7章AT89S51单片机串行口8当SM2 = 0时,则不论第不论第9位数据是位数据是1还是还是0,,都将前8位数据送入SBUF中,并使并使RI置置1,,产生中断请求。
在方式方式1时,如果SM2 = 1,则只有收到有效的停止位时才会激活RI在方式方式0时,SM2必须为03))REN——允许串行接收位允许串行接收位由软件置“1”或清“0”REN=1,允许串行口接收数据REN=0,禁止串行口接收数据9兜赴层皖锌挡孔评匣嫌挪影摸遭拥墅致腿胡射捉驶椒略堕托紊数讥帅悉遮第7章AT89S51单片机串行口第7章AT89S51单片机串行口9((4))TB8——发送的第发送的第9位数据位数据方式2和方式3,TB8是要发送的第9位数据,其值由软件置“1”或清“0”在双机串行通信双机串行通信时,一般作为奇偶校验位奇偶校验位使用;在多机串行通信多机串行通信中用来表示主机发送的是地址帧还是数据帧,TB8=1为地址帧地址帧,TB8=0为数据帧数据帧5))RB8——接收的第接收的第9位数据位数据方式方式2和方式和方式3,RB8存放接收到的存放接收到的第第9位位数据数据在方式方式1,如SM2 = 0,RB8是接收到的停止位在方式方式0,不使用RB86))TI——发送中断标志位发送中断标志位方式方式0,串行发送的第第8位数据结束时位数据结束时TI由硬件置由硬件置“1”,,在其他方式其他方式中,串行口发送停止位的开始时置TI 为“1”。
10拾涪循诧失拼嫩迅琶奴冒赣髓吹赫喳骏砂八蹋条裔犹骡甘湃妙次轴建别譬第7章AT89S51单片机串行口第7章AT89S51单片机串行口10TI =1,表示一帧数据发送结束一帧数据发送结束TI的状态可供软件查询,也可申请中断CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据TI必须由软件清必须由软件清“0”7))RI——接收中断标志位接收中断标志位方式0时,接收完第接收完第8位数据位数据时,RI由硬件置“1”在其他工作方式中,串行接收到停止位时,该位置“1”RI = 1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据该位的状态也可供软件查询RI必须由软件清必须由软件清“0”珍普沮假幼杆谎俘蜡狱爽肘莫掇与突砂产印掉犊杂狼赔琐出窿琼务惫罗泰第7章AT89S51单片机串行口第7章AT89S51单片机串行口11SCON的所有位都可进行位操作清的所有位都可进行位操作清“0”或置或置“1”7.1.2 特殊功能寄存器特殊功能寄存器PCON字节地址字节地址为为87H,不能位寻址格式如,不能位寻址格式如图图7-3所示所示12图图7-3 特殊功能寄存器特殊功能寄存器PCON的格式的格式地型总龚市镭佳识磺帮靶抡窄缚摧嘴借呕升逃柑锡烙飞蔼宪焰齿倒篷脉症第7章AT89S51单片机串行口第7章AT89S51单片机串行口12下面介绍PCON中各位功能。
仅最高位SMOD与串口有关,其他各位其他各位的功能已在第2章的节电工作方式一节中作过介绍SMOD::波特率选择位例如例如,方式1的波特率计算公式为方式方式1波特率波特率 = 定时器T1的溢出率当SMOD = 1时,要比SMOD = 0时的波特率加倍,所以也称SMOD位为波特率倍增位波特率倍增位13恼涸茁蔷掏烧屯蹬珠饥衣柏缩赌琉布蔫埋卉螺耐彰匆赞疮逾腮动胚舀勾荫第7章AT89S51单片机串行口第7章AT89S51单片机串行口137.2 串行口的串行口的4种工作方式种工作方式4种工作方式由特殊功能寄存器SCON中SM0、、SM1位位定义,编码见表7-17.2.1 方式方式0方式0为同步移位寄存器输入同步移位寄存器输入/输出方式输出方式该方式并不用于两个AT89S51单片机之间的异步串行通信,而是用于串用于串行口外接移位寄存器行口外接移位寄存器,扩展并行I/O口8位数据为一帧,无无起始位起始位和和停止位停止位,先发送或接收最低位波特率固定,为fosc/12帧格式如图7-4所示所示图图7-4 方式方式0的帧格式的帧格式14懒秉凹纯歼门赁冒淄杭彰酥染稼文谰颧骤馒暑弊岿凌汪封冲罩裕饰锯孜气第7章AT89S51单片机串行口第7章AT89S51单片机串行口141.方式.方式0发送发送((1)方式)方式0发送过程发送过程当CPU执行一条将数据写入发送缓冲器写入发送缓冲器SBUF的指令的指令时,产生一个正脉冲产生一个正脉冲,串行口开始把SBUF中的8位数据以fosc/12的的固定波特率固定波特率从RXD引脚串行输出,低位在先,TXD引脚输出同步移位脉冲,发送完发送完8位数据,中断标志位数据,中断标志位位TI置置“1”。
发送时序如图7-5所示所示15贡厦隋甩咽好足叼巧璃会郡而逮弃岩疤斯琢匪埃酉荚宾居凑澄烧乡搁肉聂第7章AT89S51单片机串行口第7章AT89S51单片机串行口1516图图7-5 方式方式0发发送送时时序序儒揭豺叶裹补萧腾映桑鸦劣协露度丫毗迂芬椅属极滥西辟尤餐笨混眺垒稠第7章AT89S51单片机串行口第7章AT89S51单片机串行口16((2)方式)方式0发送应用举例发送应用举例图7-6所示为方式0发送的一个具体应用,通过串行口外通过串行口外接接8位位串行输入并行输出移位寄存器串行输入并行输出移位寄存器74LS164,扩展扩展两个两个8位并行输出口位并行输出口的具体电路方式0发送时,串行数据由P3.0((RXD端)送出端)送出,移位脉冲由P3.1((TXD端)送出端)送出在移位脉冲的作用下,串行口发送缓冲器的数据逐位地从P3.0串行移入74LS164中17电挽赚缆蒋钧掷词驹吩徘亥终慌续玻行粥甥怎芬初川菌斯乞烈绘冕焉癣徘第7章AT89S51单片机串行口第7章AT89S51单片机串行口17图图7-6 外接串入并出移位寄存器外接串入并出移位寄存器74LS164扩展的并行输扩展的并行输 出口出口18晨短臼衅燃尽铰蒸妨陶敬腔付氟次脖纵须增歉掳汞逗拉嘻刮键斌腕巩吼寒第7章AT89S51单片机串行口第7章AT89S51单片机串行口182.方式.方式0接收接收((1)方式)方式0接收过程接收过程方式0接收,REN为串行口允许接收控制位允许接收控制位,REN=0,禁止接收;REN = 1,允许接收。
当向SCON寄存器写入控制字写入控制字(设置为方式0,并使REN位置1,同时RI = 0)时,产生一个正脉冲,串行口产生一个正脉冲,串行口开始接收数据开始接收数据引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器以fosc/12的固定波特率的固定波特率采样RXD引脚的数据信息,当接收完接收完8位位数据时,中断标志RI置置1,,表示一帧数据接收完毕,可进行下一帧数据的接收,时序如图7-7所示所示19覆稗女旨翁创秩代笑赴棺尧声饱噬鬃营拯鸿勤柞恬翌钥渭匠色榆浸柏橱壤第7章AT89S51单片机串行口第7章AT89S51单片机串行口19图图7-7 方式方式0接收接收时时序序银蝎练城啊忻干吉铺作填臆聘筏煮裂软送巧股嗅尤范瓤迄獭绥浚巢懦宝镰第7章AT89S51单片机串行口第7章AT89S51单片机串行口20((2)方式)方式0接收应用举例接收应用举例图图7-8为串行口为串行口外接两片外接两片8位并行输入串行输出的寄存器位并行输入串行输出的寄存器74LS165扩展两个扩展两个8位并行输入口的电路位并行输入口的电路当当74LS165的的S/ 端由高到低跳变时,并行输入端的数端由高到低跳变时,并行输入端的数据被置入寄存器;据被置入寄存器;当当S/ = 1,且,且时钟禁止端(第时钟禁止端(第15脚)为脚)为低电平低电平时,时,允许允许TXD((P3.1)串行移位脉冲输入)串行移位脉冲输入,这时在移,这时在移位脉冲作用下,数据由右向左方向移动,以位脉冲作用下,数据由右向左方向移动,以串行方式串行方式进入串进入串行口的接收缓冲器中。
行口的接收缓冲器中21孪简卯甩仑都摇淀卞荒挫株附珊威魔脚磕膜掩裙庭召卫殉颇筛惯脑什萌继第7章AT89S51单片机串行口第7章AT89S51单片机串行口2122图图7-8 扩扩展展74LS165作作为为并行并行输输入口入口唱治辱肌舆物谗奄啪勒廉俩跺寅哭床趾诛杉台以命门融苔什拌谤鼠紧悦煞第7章AT89S51单片机串行口第7章AT89S51单片机串行口22在图图7-8中:TXD(P3.1)作为移位脉冲输出与所有75LS165的移位脉冲输入端CP相连;RXD(P3.0)作为串行数据输入端与74LS165的串行输出端QH相连;P1.0与S/ 相连,用来控制74LS165的串行移位或并行输入;74LS165的时钟禁止端时钟禁止端(第15脚)接地,表示允许时钟输入当扩展多个8位输入口时,相邻两芯片的首尾(QH与SIN)相连23曝雨铡址橇唆侍辱锤嚎左烦氦堕诛费辗吏捻殊橙寝铂淮赫无唇观泪碰殉鸿第7章AT89S51单片机串行口第7章AT89S51单片机串行口23在方式0,SCON中的TB8、、RB8位没有用到,发送或接收完8位数据由硬件使TI或RI中断标志位置“1”,CPU响应TI或RI中断,在中断服务程序中向发送SBUF中送入下一个要发送的数据或从接收SBUF中把接收到的1B存入内部RAM中。
注意,TI或RI标志位必须由软件清“0”,采用如下指令:CLRTI;;TI位清位清“0”CLRRI ;;RI位清位清“0”方式0时,SM2位(多机通信控制位)必须为024栋秩变航窃怪揭喘嘻那惨累诅庙昏阴讹闽恶对继舱赤惑婆刁笋溯瘟栏顾邦第7章AT89S51单片机串行口第7章AT89S51单片机串行口247.2.2 方式方式1方式1为双机串行通信方式,如图图7-9所示当SM0、、SM1=01时,串行口设为方式1的双机串行通信TXD脚和RXD脚分别用于发送和接收数据图图7-9 方式1双机串行通信的连接电路25丝老钡尊消促吗啪馁辊赛讣雕淀瘤捡路溢弘衣栏冲惟辐蝎洼斧镐传奖嘲卖第7章AT89S51单片机串行口第7章AT89S51单片机串行口25方式1一帧数据为一帧数据为10位位,1个起始位(个起始位(0),),8个数据位,个数据位,1个停止位(个停止位(1),),先发送或接收最低位帧格式如图7-10所示所示 图7-10 方式1的帧格式方式1为波特率可变波特率可变的8位异步通信接口波特率由下式确定:方式方式1波特率波特率 = 定时器T1的溢出率式中,SMOD为PCON寄存器的最高位的值(0或1)。
26矢抖株变汪妹游纽蚀拙哆闪隘莎拎悍铣残怔郑玻泳锐熊腔尿董烃软割鄂骇第7章AT89S51单片机串行口第7章AT89S51单片机串行口261.方式.方式1发送发送方式1输出时,数据位由TXD端端输出,发送一帧信息为一帧信息为10位位::1位起始位位起始位0,,8位数据位(先低位)和位数据位(先低位)和1位停止位位停止位1当CPU执行一条数据写SBUF的指令,就启动发送启动发送发送时序见图图7-11图7-11中TX时钟时钟的频率就是发送的波特率发送开始时发送开始时,内部发送控制信号 变为有效,将起始位向TXD脚(P3.1)输出,此后每经过一个TX时钟周期,便产生一个移位脉冲,并由TXD引脚输出一个数据位8位数据位全部发送完毕后位数据位全部发送完毕后,中断标志位TI置置127雀柒溃典狐寒卫贪浸瓢肚厕猫袁铜野晤棠画乖峨瘸抑负偿茂极哟恩缚怠汁第7章AT89S51单片机串行口第7章AT89S51单片机串行口27 图7-11 方式1发送时序28畅岿闪映危芭象削臆便射演障嘎怎喇形搓痘社都考葱澜祷孪赘媚圭碍狄或第7章AT89S51单片机串行口第7章AT89S51单片机串行口282 2.方式.方式1 1接收接收方式方式1 1接收时(接收时(RENREN = = 1 1),数据从),数据从RXDRXD((P3.0P3.0)引脚输入。
引脚输入当当检测到起始位的检测到起始位的负跳变负跳变,则,则开始接收开始接收接收时序见接收时序见图图7-7-1212接收时,定时控制信号有接收时,定时控制信号有两种两种,,一种一种是是接收移位时钟接收移位时钟((RXRX时钟),它的频率和传送的波特率相同,时钟),它的频率和传送的波特率相同,另一种另一种是是位位检测器采样脉冲检测器采样脉冲,,频率是频率是RXRX时钟的时钟的1616倍倍以波特率的以波特率的1616倍倍速率采样速率采样RXDRXD脚状态当采样到当采样到RXDRXD端从端从1 1到到0 0的负跳变时就的负跳变时就启动检测器启动检测器,,接收的值是接收的值是3 3次次连续采样(第连续采样(第7 7、、8 8、、9 9个脉冲个脉冲时采样)取时采样)取两次相同两次相同的值的值,以确认起始位(负跳变)的开,以确认起始位(负跳变)的开始,较好地消除干扰引起的影响始,较好地消除干扰引起的影响29锐凭巍巫缀帕秸湃初管流墩揍徘盒溶把烁知努鹏拟坍贬肛卜惠玲塔渐美纪第7章AT89S51单片机串行口第7章AT89S51单片机串行口29 图7-12 方式1接收时序30 当确认起始位有效起始位有效时,开始接收一帧信息。
每一位数据,也都进行3次次连续连续采采样样(第7、8、9个脉冲采样),接收的值是3次采次采样样中至少中至少两次相同的两次相同的值值当一帧数据接收完接收完毕毕后后,同时满琐筋壹慢惊丛牢佯损丰撩侥楚弃挝沙扦绊械续川页鹏淮段拒帝本汽腕脱隔第7章AT89S51单片机串行口第7章AT89S51单片机串行口30足以下两个条件,接收才有效1))RI = 0,即上一帧数据接收完成时,RI = 1发出的中断请求已被响应,SBUF中的数据已被取走,说明说明“接收接收SBUF”已空2))SM2 = 0或收到的停止位或收到的停止位 = 1(方式1时,停止位已进入RB8),则将接收到的数据装入SBUF和RB8(装入的是停止位),且中断标志RI置“1”若不同时满足两个条件,收的数据不能装入SBUF,该帧数据将丢弃31迈置拢蓖焙泼卯汛搪霞耽产般桂鸣肛引蛙憎同馏闰侧腥匆睹眺问选剧喜砖第7章AT89S51单片机串行口第7章AT89S51单片机串行口317.2.3 方式方式2方式2和方式3,为9位异步通信接口每帧数据为每帧数据为11位位,1位起始位0,8位数据位(先低位),1位可程控为1或0的第9位数据和1位停止位。
方式2、方式3帧格式如图图7-13所示所示 图7-13 方式2、方式3的帧格式方式方式2波特率波特率 = fosc32颤眯来浑冗腋啦岳宇望物寅菇霄毗礁友楔方蚌鼓违残稗搐饮拢椒秤华烂冠第7章AT89S51单片机串行口第7章AT89S51单片机串行口321.方式.方式2发送发送发送前,先根据通信协议由软件设置先根据通信协议由软件设置TB8(如奇偶校验位或多机通信的地址/数据标志位),然后将要发送的数据写入SBUF,即启动发送TB8自动装入自动装入第9位数据位,逐一发送发送完毕,使TI位置“1”发送时序如图7-14所示 图图7-14 方式方式2和方式和方式3发送时序发送时序33劫觉宽地许团差愉划醒的向分宗镑尿诞吞冬夯庸遁基痘烧泻棋鸣形添严启第7章AT89S51单片机串行口第7章AT89S51单片机串行口33【例【例7-1】】方式2发送在双机串行通信中的应用下面的发送中断服务程序,以TB8作为作为奇偶校验位奇偶校验位,偶校验偶校验发送发送数据写入SBUF之前,先将数据的偶校验位写入TB8(设第2组的工作寄存器区的R0作为发送数据区地址指针)。
PIPTI: PUSHPSW ;现场保护 PUSHAcc SETBRS1 ;选择第2组工作寄存器区 CLRRS0 CLRTI ;发送中断标志清“0” MOVA,@R0 ;取数据 MOVC,P ;校验位送TB8, 采用偶校验 MOVTB8,C;P=1,校验位TB8=1,P=0,校验位TB8=034简锅橙瓢乙审巩聘楞疤扯记赎蛇刻屡撕缴朔返综郡促锑酝拉锚熄骑壕硝吻第7章AT89S51单片机串行口第7章AT89S51单片机串行口34 MOV SBUF ,,A ;;A数据发送,同时发数据发送,同时发TB8 INC R0 ;数据指针加;数据指针加1 POP Acc ;恢复现场;恢复现场 POP PSW RETI ;中断返回;中断返回2.方式.方式2接收接收SM0、、SM1=10,且,且REN = 1时,以方式时,以方式2接收数据。
接收数据数据由数据由RXD端端输入,接收输入,接收11位信息当位检测逻辑采样到位信息当位检测逻辑采样到RXD的的负跳变负跳变,判断起始位有效,便开始接收一帧信息判断起始位有效,便开始接收一帧信息在接收完第在接收完第9位数据后,位数据后,需满足以下两个条件,需满足以下两个条件,才能将接才能将接收到的数据送入收到的数据送入SBUF(接收缓冲器)接收缓冲器)1))RI = 0,意味着接收缓冲器为空意味着接收缓冲器为空2))SM2 = 0或接收到的第或接收到的第9位数据位位数据位RB8 = 135卜符协票年率押姬颤硒部迂路羽最联育烛黎谊远茹陕杭挪轨碉剧劫弥恒忿第7章AT89S51单片机串行口第7章AT89S51单片机串行口35当满足上述两个条件时,收到的数据送SBUF(接收缓冲器),第9位数据送入RB8,且RI置“1”若不满足这两若不满足这两个条件个条件,接收的信息将被丢弃串行口方式2和方式3接收时序接收时序如图7-15所示所示图图7-15 方式方式2和方式和方式3接收时序接收时序36矫起忌式待邦坛宅渍缄容枝却彭夯拇柄竞衅转霹税杏碑擅青壳扁老供责憋第7章AT89S51单片机串行口第7章AT89S51单片机串行口36【例【例7-2】】方式2接收在双机通信中的应用。
本例对例7-1发送的数据进行偶校验接收,程序如下(设1组寄存器区的R0为数据缓冲区指针)PIRI: PUSHPSW;保护现场PUSHAccSETBRS0 ;选择1组寄存器区CLRRS1CLRRI MOVA,SBUF ;将接收到数据送到累加器AMOVC,P;接收到数据字节的奇偶性送入C位37蚂翔燕钾堑亨朱供杜饿甜雄者医鄂封责耍突键饼潮堵挖涵匝爽帝庄寻孝楞第7章AT89S51单片机串行口第7章AT89S51单片机串行口37JNCL1;C=0,收的字节1的个数为偶数,跳L1处JNBRB8,ERP ;C=1,再判RB8=0?如RB8=0,则 ;出错,跳ERP出错处理AJMPL2;C=1,RB8=1,收的数据正确,跳L2处 L1:JBRB8,ERP;C=0,再判RB8=1?如RB8=1,;则出错,跳ERP出错处理 L2:MOV@R0,A;C=0,RB8=0或C=1,RB8=1,;接收数据正确,存入数据缓冲区INC R0;数据缓冲区指针增1,为下次接收做准备POP Acc;恢复现场POP PSW38罢潍创紧渤忆屋轮崭堡粥半台弊炉钉颇顿芹摩悉廖呵依斯怪峙屠劈竣惰瘤第7章AT89S51单片机串行口第7章AT89S51单片机串行口38 ERP:…… ;出错处理程序段入口……RETI7.2.4 方式方式3SM0、SM1=11时,方式3。
为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2相同方式3发送和接收时序如图7-11和图7-12所示方式方式3波特率波特率 = 定时器T1的溢出率39鳖镀抿准妄郭褂慕广映肇脖深糙肝婴扔潦核杨壶玄惦础漏纤叶咨吸瓦夏彻第7章AT89S51单片机串行口第7章AT89S51单片机串行口397.3 多机通信多机通信多个单片机可利用串行口进行多机通信,经常采用如图7-16所示的主从式结构主从式结构系统中有1个主机(单片机或其他有串行接口的微机)和多个单片机组成的从机系统主主机的机的RXD与所有从机的与所有从机的TXD端相连端相连,TXD与所有从机的RXD端相连从机地址从机地址分别为01H、02H和03H 图图7-16 多机通信系统示意图多机通信系统示意图40炒解敞查姚政围瘪抬董耸赌讫嘶滩濒颜曾虑阅保庆箭酸蒸斟跟戚柄但块侧第7章AT89S51单片机串行口第7章AT89S51单片机串行口40主从式主从式是指多机系统中,只有一个主机,其余全是从机主机主机发送的信息可以发送的信息可以被所有从机接收被所有从机接收,任何一个从机任何一个从机发送的信息,只能由发送的信息,只能由主机主机接收。
从机和从机之间接收从机和从机之间不能进行直接通信,只能经主机只能经主机才能实现 多机通信的工作原理:多机通信的工作原理:要保证主机与与所选择的从机通信,须保证串口有识别串口有识别功能功能SCON中的SM2位位就是为满足这一条件设置的多机多机通信控制位通信控制位其工作原理是在串行口以方式2(或方式3)接收时,若若SM2 = 1,则表示进行多机通信,可能以下两两种情况种情况:41堡荡东谰蛾赤颐持肌筋辜术肮酉弘赘嘱喂淹念密剖音相又衅练伶靖个铬泵第7章AT89S51单片机串行口第7章AT89S51单片机串行口41((1))从机接收到的主机发来的第9位数据RB8=1时,前前8位位数据才装入数据才装入SBUF,并置中断标志置中断标志RI = 1,向CPU发出中断请求在中断服务程序中,从机把接收到的SBUF中的数据存入数据缓冲区中2)如果从机接收到的第)如果从机接收到的第9位数据位数据RB8=0时,则不产生中断标志RI=1,不引起中断不引起中断,从机不接收主机发来的数据 若若SM2 = 0,则接收的第9位数据不论是0还是1,从机都将产生RI = 1中断标志,接收到的数据装入SBUF中羌吻惋沫冈叮允亮沈茫度疡赁科鹰跨硅氧鲁卿雷檄锹摧统票侨织迈砖连贡第7章AT89S51单片机串行口第7章AT89S51单片机串行口42应用这一特性,可实现AT89S51单片机的多机通信。
多多机通信的工作过程:机通信的工作过程:((1))各从机从机初始初始化程序允许从机的串行口中断,将串行口编程为方式2或方式3接收,即9位异步通信方式,且SM2和和REN位位置置“1”,,使从机处于多机通信且只接收地址只接收地址帧帧的状态2))在主机和某个从机通信之前主机和某个从机通信之前,先将从机地址(即先将从机地址(即准备接收数据的从机)发送给各个从机准备接收数据的从机)发送给各个从机,接着才传送数据(或命令),主机发出的地址帧信息的第9位为1,数据(或命令)帧的第9位为0当主机向各从机发送地址帧时,各从机的串行口接收到的第9位信息RB8为1,且由43蓄贴琼惋醚桔投鲍麓肉自唁盲迂嘿茸谴嗓佛厂腰憎皂爱俯痢焕径座抡原企第7章AT89S51单片机串行口第7章AT89S51单片机串行口43于各从机的SM2=1,则RI置置“1”,,各从机响应中断,在中断服务子程序中,判断主机送来的地址是否和本机地址判断主机送来的地址是否和本机地址相符合,若为本机地址,则该从机相符合,若为本机地址,则该从机SM2位清位清“0”,,准备接收主机的数据或命令;若地址不相符不相符,则保持保持SM2 = 13))接着主机发送数据(或命令)帧,数据帧的第9位为0。
此时各从机接收到的RB8 = 0只有与前面地址相符合地址相符合的从机(即SM2位已清“0”的从机)才能激活中断标志位激活中断标志位RI,从而进入中断服务程序,接收主机发来的数据(或命令);与主机发来的地址不相符地址不相符的从机,由于SM2保持为1,又RB8 = 0,因此不能激活中断标志不能激活中断标志RI,就不能接受主机44早毖恰折丛遥述朽扮勘顿桓讶辈恳躲溃鞍舷瞥俄渔昧屁逢暖湍叹麻吮骤官第7章AT89S51单片机串行口第7章AT89S51单片机串行口44发来的数据帧从而保证主机与从机间通信的正确性主机与从机间通信的正确性此时主机与建立联系的从机已经设置为单机通信模式,即在整个通信中,通信的双方都要保持发送数据的第9位(即TB8位)为0,防止其他的从机误接收数据4)结束数据通信并为下一次的多机通信做好准备结束数据通信并为下一次的多机通信做好准备在多机系统,每个从机都被赋予唯一的地址例如,图7-16三个从机的地址可设为:01H、02H、03H 还要预留预留1~2个个“广播地址广播地址”,,它是所有从机共有的地址,例如将“广播地址”设为00H当主机与从机的数据当主机与从机的数据通信结通信结束后束后,一定要将从机,一定要将从机再设置为多机通信模式再设置为多机通信模式,,以便进行下一次的多机通信。
肚席扔铀昏蓉摄骇喷舍么俄相抡肝患节直弃贝吉宇心溺肾漆谜所过诀尘轨第7章AT89S51单片机串行口第7章AT89S51单片机串行口45这时要求与主机正在进行数据传输的从机必须随时注意,一旦接收的数据第一旦接收的数据第9位(位(RB8)为)为“1”,说明主机传送的不再是数据,而是地址,这个地址就有可能是可能是“广播地址广播地址”当收到收到“广播地址广播地址”后后,便将从机的通信模式再设置成多机模式,为下一次的多机通信做好准备46慨容愚佑覆奥陶蜗饮字座郑尖獭信蛊萍嚼亡酚誉终玖酋妆件诬绕坟汲阵晚第7章AT89S51单片机串行口第7章AT89S51单片机串行口467.4 波特率的制定方法波特率的制定方法串行通信,收、发双方发送或接收的波特率必须一致波特率必须一致4种工作方式方式式0和方式和方式2的波特率是固定固定的;方式方式1和方式和方式3的波特率是可变的可变的,由T1溢出率确定7.4.1 波特率的定义波特率的定义波特率的定义:波特率的定义:串行口每秒发送(或接收)的位数每秒发送(或接收)的位数设发送一位所需要的时间为T,则波特率为1/T定时器的不同工作方式,得到的波特率的范围不一样,这是由T1在不同工作方式下不同工作方式下计数位数的不同计数位数的不同所决定。
47折先甘晰咸烃鼻庶错佰卜渗塌懂驱洽寒孺票苏烂讣召鹃月抄耀外醉凸慧倦第7章AT89S51单片机串行口第7章AT89S51单片机串行口477.4.2 定时器定时器T1产生波特率的计算产生波特率的计算和串行口的工作方式有关串行口的工作方式有关1)方式方式0时,波特率固定为时钟频率固定为时钟频率fosc的的1/12,不受SMOD位值的影响若fosc = 12 MHz,波特率为1Mbit/s2)方式方式2时,波特率仅与SMOD位的值有关方式方式2波特率波特率 = fosc若fosc = 12 MHz: SMOD = 0,波特率 = 187.5 kbit/s;SMOD = 1,波特率 为为375 kbit/s3)方式1或方式3定时,常用T1作为波特率发生器,其关系式为48裔王哮励此枫傲专桥狗犹弹亏豌辽混吧栏犹坐毡叭裕溯肄属揩郧胖抿封免第7章AT89S51单片机串行口第7章AT89S51单片机串行口48波特率 = 定时器T1的溢出率 (7-1)由式(7-1)见,T1溢出率溢出率和SMOD的值的值共同决定波特率共同决定波特率在实际设定波特率时实际设定波特率时,T1常设置为方式2定时(自动装初值),即TL1作为8位计数器,TH1存放备用初值。
这种方式操作方便,也避免因软件重装初值因软件重装初值带来的定时误差定时误差设定时器T1方式2的初值为X,则有 定时器定时器T1的溢出率的溢出率 = (7-2)49镀特早脯栏讳龄姑公译纹栗泞探肢戏司阂建酞劣茂胁诸浆扫意砧阻馋蝉痘第7章AT89S51单片机串行口第7章AT89S51单片机串行口49将式(7-2)代入式(7-1),则有 波特率波特率 = (7-3)由式(7-3)可见,波特率波特率随fosc、、SMOD和初值和初值X而变化实际使用时,经常根据已知波特率和时钟频率已知波特率和时钟频率fosc来计计算算T1的初值的初值X为避免繁杂的初值计算,常用的波特率和常用的波特率和初值初值X间的关系常列成间的关系常列成表表7-2的的形式形式,以供查用50力杯落悲跨蕉愿沉斌纂娩魁肯叛绊庇砍惕碉举惩霜锯益湾冶跃绣圣忘费抵第7章AT89S51单片机串行口第7章AT89S51单片机串行口50表表7-2 用定时器用定时器T1产生的常用波特率产生的常用波特率51波 特 率foscSMOD位方式初值X62.5kbit/s12 MHz12FFH19.2kbit/s11.0592 MHz12FDH9.6kbit/s11.0592 MHz02FDH4.8kbit/s11.0592 MHz02FAH2.4kbit/s11.0592 MHz02F4H1.2kbit/s11.0592 MHz02E8H天雁趴反哪微凹舍呻匣烛颧傈唱撑乐江吭耶菲呸试脐棠昆狡婉蕊逢甲躬喘第7章AT89S51单片机串行口第7章AT89S51单片机串行口51对对表表7-2有两点需要注意:有两点需要注意:(1)在使用的时钟振荡频率fosc为12MHz或或6MHz时,将初值X和fosc带入式(7-3)中计算出的波特率有一定误有一定误差差。
消除误差可采用时钟频率时钟频率11.0592MHz2)如果选用很低的波特率很低的波特率,如波特率选为55,可将定时器T1设置为方式1定时但在这种情况下,T1溢出时,需在中断服务程序中重新装入初值中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的方法加以调整52植唆莹严桥谓抚内轰衰并烟恼鲸掩渡叛悄愁美革侠淳痊衡夹力厨降纠嚏数第7章AT89S51单片机串行口第7章AT89S51单片机串行口52【例【例7-3】】 若时钟频率为11.0592MHz,选用T1的方式方式2定时定时作为波特率发生器,波特率为波特率为2 400bit/s,求初值设T1为方式2定时,选SMOD = 0将已知条件带入式(7-3)中波特率波特率 = = 2400从中解得X = 244 = F4H只要把F4H装入TH1和TL1,则T1产生的波特率为2 400bit/s该结果也可直接从表7-2中查到这里时钟振荡频率选为11.0592MHz,,就可使初值为整数初值为整数,从而产生精确的波特率53咐吴颅纳沽训感敬辗挟贿拔赁斌庐忍讽撮器僧肤酣跪田野课盅嗽胶喉齿转第7章AT89S51单片机串行口第7章AT89S51单片机串行口537.5 串行口的应用串行口的应用利用串行口可实现单片机间的点对点串行通信点对点串行通信、多机通多机通信信以及单片机与单片机与PC机间机间的单机或多机通信。
限于篇幅,本节仅介绍单片机间的双机串行通信双机串行通信的接口和软件设计7.5.1 双机串行通信的硬件连接双机串行通信的硬件连接AT89S51串行口的输入、输出均为TTL电平电平抗干扰性抗干扰性差,传输距离短,传输速率低差,传输距离短,传输速率低为提高串行通信的可靠性,增大串行通信的距离和提高传输速率串行通信的距离和提高传输速率,都采用标准标准串行接串行接口口,如RS-232、RS-422A、RS-485等根据通信距离和抗干扰性要求,可选择TTL电平传输、RS-232C、RS-422A、RS-485串口进行串行数据传输54吐鼻抠剩寝制亏怪沾凹苇泥粗粱曙灿园倔呀凉拿蛹偶度扁音肉截崖活赌捐第7章AT89S51单片机串行口第7章AT89S51单片机串行口541..TTL电平通信接口电平通信接口如果两个单片机相距在相距在1.5m之内,它们的串行口可直接相直接相连连,接口如图图7-9所示所示甲机RXD与乙机TXD端相连,乙机RXD与甲机TXD端相连2..RS-232C双机通信接口双机通信接口如果双机通信距离在距离在1.5~15m之间时,可用RS-232C标准标准接口接口实现点对点的双机通信,接口如图图7-17所示所示。
图7-17的MAX232A是美国MAXIM(美信)公司生产的RS-232C双工发送器/接收器电路芯片55壬梅颇蛙舞吓沟搭愧蝴职缘需蔽佰喘篆爽绪肄址凋喳聚固喇登仙暮离礁犬第7章AT89S51单片机串行口第7章AT89S51单片机串行口55图图7-17 RS-232C双机通信接口双机通信接口电电路路瘦开拧跋顿揍宝捡榔拐耕柏焦仍魔煎三负聘扯瞒仔力克终岿唉这伸魏客砖第7章AT89S51单片机串行口第7章AT89S51单片机串行口563..RS-422A双机通信接口双机通信接口RS-232C有明显缺点明显缺点:传输速率低、通信距离短、接口处信号容易产生串扰等国际上又推出了RS-422A标准与RS-232C的主要区别主要区别是,收发双方的信号地收发双方的信号地不再共地不再共地,RS-422A采用了平衡驱动平衡驱动和和差分接收差分接收的方法用于数据传输的是两条平衡导线两条平衡导线,这相当于两个单端驱动器两条线上传输的信号电平,当一个表示逻辑“1”时,另一条一定为逻辑“0”若传输中,信号中混入信号中混入干扰干扰和和噪声噪声(共模形式),(共模形式),由于差分接收器的作用,就能识别有用信号并正确接收传输的信息,并使干扰和噪声相互抵消。
57还处绚化饥椿姿痘爷蛆嗣陶毖设蔑妖蒸拱至洒憾绳洲摊赏婪鹰厉旁翱烙释第7章AT89S51单片机串行口第7章AT89S51单片机串行口57RS-422A能在长距离、高速率长距离、高速率下传输数据它的最大传最大传输率为输率为10Mbit/s,电缆允许长度为长度为12m,如果采用较低传采用较低传输速率时输速率时,最大传输距离可达1219m为了增加通信距离,可采用光电隔离,利用RS-422A标准进行双机通信的接口电路如图图7-18所示所示图中,每个通道的接收端都接有接有3个电阻个电阻R1、、R2和和R3,其中R1为传输线的匹配电阻,取值范围在50~1k,其他两个电阻是为了解决第一个数据的误码而设置的匹配电阻为了起到隔离、抗干扰的作用,图图7-187-18中必须使用两两组独立的电源组独立的电源图中的SN75174、、SN75175是TTL电平到RS-422A电平与RS-422A电平到TTL电平的电平转换芯片58番僵哈窖呸怂体桥贤矗镭臭每善交腻瓢叙架赞掉潭菌缝舟砒淋必疤洒诀饭第7章AT89S51单片机串行口第7章AT89S51单片机串行口5859图图7-18 RS-422A双机通信接口双机通信接口电电路路碟诱澡嘲扑矣玉挠搭龄呜基炊叙薄欢怂橙草映怕奎涡税乍弦猛脑戍玲辗翟第7章AT89S51单片机串行口第7章AT89S51单片机串行口594..RS-485双机通信接口双机通信接口RS-422A双机通信需四芯传输线,这对长距离通信很不经济,故在工业现场,通常采用双绞线传输的双绞线传输的RS-485串行通信接口串行通信接口,很容易实现多机通信。
RS-485是RS-422A的变型,它与与RS-422A的区别的区别:RS-422A为全双工为全双工,采用两对平衡差分信号线;RS-485为半双工为半双工,采用一对平衡差分信号线一对平衡差分信号线RS-485对于多站互连是十分方便的对于多站互连是十分方便的,很容易实现多机通信RS-485允许最多并联并联32台驱动器和台驱动器和32台接收器台接收器图图7-19为RS-485通信接口电路与RS-422A一样,最大传输距离约为1219m,最大传输速率为最大传输速率为10Mbit/s60掇咽惟挛崭菲缚汾呸欲歌投照维复杭割蝎使礼染嵌猾嚼雾痘奖脚在么搅哄第7章AT89S51单片机串行口第7章AT89S51单片机串行口6061图图7-19 RS-485双机通信接口双机通信接口电电路路罪杜魔蘸亥爵兑诊干九颤芝蒙甫尾殴彬蛊争砚殷苯兴改兽尊罪盛窄鸳音摩第7章AT89S51单片机串行口第7章AT89S51单片机串行口61通信线路要采用通信线路要采用平衡双绞线平衡双绞线平衡双绞线的平衡双绞线的长度与传输速率长度与传输速率成反比,在成反比,在100kbit/s速率以下,才可能使用规定的最长电速率以下,才可能使用规定的最长电缆。
缆只有在只有在很短的距离很短的距离下才能下才能获得最大传输速率获得最大传输速率一般100m长长双绞线最大传输速率仅为双绞线最大传输速率仅为1Mbit/s图图7-19,,RS-485以双向、半双工的方式来实现双机通信在以双向、半双工的方式来实现双机通信在AT89S51单片机系统单片机系统发送或接收数据前发送或接收数据前,应,应先将先将SN75176的的发送门发送门或或接收门接收门打开打开,当,当P1.0=1时,发送门时,发送门打开,接收门关闭;当打开,接收门关闭;当P1.0=0时,接收门打开,发送门关时,接收门打开,发送门关闭陆孩桐呢淌九搅灼躲站召需眨肇乾础舀狙葱坝利证讣若佐文亏因孟斥调渍第7章AT89S51单片机串行口第7章AT89S51单片机串行口62图图7-197-19中的中的SN75176SN75176芯片芯片内集成了一个差分驱动器和一内集成了一个差分驱动器和一个差分接收器,且兼有个差分接收器,且兼有TTLTTL电平到电平到RS-485RS-485电平、电平、RS-485RS-485电电平到平到TTLTTL电平的转换功能电平的转换功能此外常用的此外常用的RS-485RS-485接口芯片还有接口芯片还有MAX485MAX485。
7.5.2 7.5.2 串行通信设计需要考虑的问题串行通信设计需要考虑的问题单片机的串行通信接口设计时,单片机的串行通信接口设计时,需考虑如下问题需考虑如下问题1 1)首先确定通信双方的)首先确定通信双方的数据传输速率数据传输速率2 2)由数据传输速率)由数据传输速率确定采用的串行通信接口确定采用的串行通信接口标准63墨丫挥曰寝谋辙工割揩杠喊范蚂辫妖军香撒抄豌豢鞠不域窑钠音燕处勃癸第7章AT89S51单片机串行口第7章AT89S51单片机串行口63((3)在通信接口标准允许的范围内)在通信接口标准允许的范围内确定通信的波特率确定通信的波特率为减小波特率的误差,通常为减小波特率的误差,通常选用选用11.0592MHz的晶振频率的晶振频率4)根据任务需要,确定收发双方使用的)根据任务需要,确定收发双方使用的通信协议通信协议5))通信线的选择通信线的选择,这是要考虑的一个很重要的因素这是要考虑的一个很重要的因素通信线一般通信线一般选用选用双绞线双绞线较好较好,并根据传输的距离选择纤芯,并根据传输的距离选择纤芯的直径如果空间的干扰较多,还要选择带有屏蔽层的双的直径如果空间的干扰较多,还要选择带有屏蔽层的双绞线。
绞线6)通信协议确定后,进行通信)通信协议确定后,进行通信软件编程软件编程,请见下面,请见下面介绍64杏宣乙良凸拘靳锈恫园屿命歹吟悉草绿念霜烂磷环甭契胰泽法眨诧妖恃免第7章AT89S51单片机串行口第7章AT89S51单片机串行口647.5.3 双机串行通信软件编程双机串行通信软件编程串行口的串行口的方式方式1~~3是是用于串行通信用于串行通信的,下面介绍双机串的,下面介绍双机串行通信软件编程行通信软件编程应当说明的是,下面介绍的双机串行通信的编程实际上应当说明的是,下面介绍的双机串行通信的编程实际上与上面介绍的各种串行标准的硬件接口电路无关,因为采与上面介绍的各种串行标准的硬件接口电路无关,因为采用不同的标准串行通信接口仅仅是由双机串行通信距离、用不同的标准串行通信接口仅仅是由双机串行通信距离、传输速率以及抗干扰性能来决定的传输速率以及抗干扰性能来决定的65镐斌笼哎嫌途姆臻禁蹦当履奈务喝眺迟笨监迈礼侈杰捻莹赦卢疲亨菌腐厦第7章AT89S51单片机串行口第7章AT89S51单片机串行口651.串行口方式.串行口方式1应用编程应用编程【例【例7- 4】】 采用采用方式方式1进行双机串行通信,收、发双方均采进行双机串行通信,收、发双方均采用用6MHz晶振晶振,波特率为,波特率为2 400bit/s,,一帧信息为一帧信息为10位位,,发送方把以发送方把以78H、、77H单元的内容单元的内容为为首地址首地址,以,以76H、、75H单元内容减单元内容减1为为末地址末地址的数据块通过串口发送给收方。
的数据块通过串口发送给收方发送方要发送的发送方要发送的数据块数据块的地址为的地址为2000H~~201FH先发地址先发地址帧,再发数据帧;接收方在接收时帧,再发数据帧;接收方在接收时使用一个标志位使用一个标志位来来区分区分接收的是地址还是数据,然后将其分别存放到指定的单元接收的是地址还是数据,然后将其分别存放到指定的单元悸母姿嫁伺渣申栖昆禽炬鳃肝摆谰课帜甜夏孕涩塔磅广账华悸棺椭毙裸鼓第7章AT89S51单片机串行口第7章AT89S51单片机串行口66中发送方发送方可可采用采用查询方式查询方式或或中断方式中断方式发送数据,发送数据,接收方接收方可可采用采用中断或查询方式接收中断或查询方式接收1)甲机发送程序)甲机发送程序中断方式中断方式的发送程序如下:的发送程序如下: ORG 0000H;程序初始入口;程序初始入口 LJMP MAIN ORG 0023H;串行中断入口;串行中断入口 LJMP COM_INT ORG1000H叭案插窑旦胺槽站箍庶凹囤淡炒角缠泳渍誉纱歉址健奴射涵惫句浩殆容随第7章AT89S51单片机串行口第7章AT89S51单片机串行口67MAIN::MOV SP,,#53H;设置堆栈指针;设置堆栈指针MOV 78H,,#20H ;设发送的数据块首、末地址;设发送的数据块首、末地址 MOV 77H,,#00H MOV 76H,,#20H MOV 75H,,#40H ACALL TRANS;调用发送子程序;调用发送子程序HERE:: SJMP HERETRANS::MOV TMOD,,#20H;设置定时器;设置定时器/计数器工作方式计数器工作方式 MOV TH1,,#0F3H;设置计数器初值;设置计数器初值 MOV TL1,,#0F3H MOV PCON,,#80H;波特率加倍;波特率加倍 68秧辊粉逻茂趾踌斌助直稀龙雹曹佳斯插幸扣群赛肪督痔上追粉穷炯也祁君第7章AT89S51单片机串行口第7章AT89S51单片机串行口68SETB TR1;接通计数器计数;接通计数器计数 MOV SCON,,#40H;设置串行口工作方式;设置串行口工作方式 MOV IE,,#00H ;先关中断,;先关中断, 用查询方式发送地址帧用查询方式发送地址帧 CLR F0 MOV SBUF,,78H;发送首地址高;发送首地址高8位位WAIT1::JNB TI,,WAIT1 CLR TI MOV SBUF,,77H;发送首地址低;发送首地址低8位位WAIT2::JNB TI,,WAIT2 CLR TI MOV SBUF,,76H;发送末地址高;发送末地址高8位位WAIT3::JNB TI,,WAIT3 CLR TI 69裸妨孜美解祈协襄藏组纳菜叠丢问屉却姨促铆斑晕查胺漠袋言盲社庚九囚第7章AT89S51单片机串行口第7章AT89S51单片机串行口69MOV SBUF,,75H;发送末地址低;发送末地址低8位位WAIT4:: JNB TI,,WAIT4 CLR TI MOV IE,,#90H;打开中断允许寄存器,;打开中断允许寄存器, ;采用中断方式发送数据;采用中断方式发送数据 MOV DPH,,78H MOV DPL,,77H MOVX A,,@DPTR MOV SBUF,,A;发送首个数据;发送首个数据WAIT::JNB F0,,WAIT;发送等待;发送等待 RET70卒纲豢人打叙呢磕嘱勤兼支晚崖老污长镁迫植倪饮蛙钮绢八消聘檄姨煤糙第7章AT89S51单片机串行口第7章AT89S51单片机串行口70COM_INT:CLR TI;关发送中断标志位TI INC DPTR;数据指针加1, 准备发送:下个数据 MOV A,DPH;判断当前被发送的数据;的地址是不是末地址 CJNE A,76H,END1;不是末地址则跳转 MOVA,DPL;同上 CJNE A,75H,END1 SETB F0;数据发送完, 置1标志位 CLR ES ;关串行口中断 CLR EA;关中断 RET;中断返回71吵瓮厂姓涨侈印姜魂自每熏路氖畔朔雀矣姚纸八呐吟筷祥枫煌甸拒榜琶笆第7章AT89S51单片机串行口第7章AT89S51单片机串行口71END1: MOVX A,@DPTR;将要发送的数据送累加器, ;准备发送 MOV SBUF,A;发送数据 RETI;中断返回 END((2)乙机接收程序。
乙机接收程序中断方式的接收程序如下:ORG 0000HLJMPMAINORG 0023HLJMP COM_INTORG 1000H72恬避惦沟燕疲惺河益申箭窄椽斗勃无力刷渔漱劈盂元著咎组潭靛怎膜三跺第7章AT89S51单片机串行口第7章AT89S51单片机串行口72MAIN: MOV SP,#53H;设置堆栈指针ACALL RECEI;调用接收子程序HERE: SJMP HERERECEI: MOV R0,#78H;设置地址接收区MOV TMOD,#20H;设置定时器/计数器工作方式MOV TH1,#0F3H;设置波特率MOV TL1,#0F3HMOV PCON,#80H;波特率加倍SETB TR1;开计数器MOV SCON,#50H;设置串行口工作方式MOV IE,#90H;开中断CLR F0;标志位清0CLR 7FH73怎氰畏尸齿沽纯浮捣邑代斩怔待岗空携挞懦董序台祖茸诵幽粗塞桌许掂酝第7章AT89S51单片机串行口第7章AT89S51单片机串行口73WAIT:JNB 7FH,WAIT;查询标志位等待接收RETCOM_INT:PUSH DPL;压栈, 保护现场PUSH DPHPUSH AccCLR RI;接收中断标志位清0JB F0,R_DATA;判接收的是数据还是;地址, F0=0为地址MOV A,SBUF;接收数据MOV @R0,A ;将地址帧送指定的寄存器74横批却铭叉细桂巩揭笺烃练喷北久篆指薪惯滞冰寄下铜脆觅境魏菇荔督倾第7章AT89S51单片机串行口第7章AT89S51单片机串行口74DEC R0CJNE R0,#74H,RETNSETB F0;置标志位, 地址接收完毕RETN: POPAcc;出栈, 恢复现场POPDPHPOPDPLRETI;中断返回R_DATA:MOV DPH,78H;数据接收程序区MOV DPL, 77HMOV A,SBUF;接收数据MOVX @DPTR,A;送指定的数据存储单元中75洼稽冰愚穷碎帅敛蚌测优伍糜产酣间举僧茶嘲晤庇宁潜叶腋贵崖右梦愈老第7章AT89S51单片机串行口第7章AT89S51单片机串行口75INC77H;地址加1MOV A,77H;判当前接收数据的地址是否向高8位进位JNZEND2; INC78HEND2: MOV A,76HCJNE A,78H,RETN;判是否最后一帧, 不是则继续MOV A,75HCJNE A,77H,RETN;是最后一帧则各种标志位清0CLR ESCLR EASETB 7FHSJMP RETN;跳入返回子程序区END76柠卡两锤絮咋径合蒸常甫孟魏河黑活酪坝茄驮蹿亮臻宗湖毗颐惶闽急弊撞第7章AT89S51单片机串行口第7章AT89S51单片机串行口762.串行口方式.串行口方式2应用编程应用编程方式方式2和方式方式1有两点不同之处两点不同之处。
接收/发送11位信息,多出多出第9位程控位,该位可由用户置TB8决定,这是一个不同点另一不同点是方式2波特率变化范围比方式1小,方式2的波特率 = 振荡器频率/n当SMOD=0时,n=64当SMOD=1时,n=32鉴于方式2的使用和方式3基本一样(只是波特率不同),所以方式2的应用,可参照下面的方式3编程77泉深镐陨对再拳拧痕夯不芝拐册刚囊煞甜蛋猎唱呀玲崖窘匀笺盗地寝实官第7章AT89S51单片机串行口第7章AT89S51单片机串行口773.串行口方式.串行口方式3应用编程应用编程【例【例7-5】】用方式3进行发送和接收发送方发送方采用查询查询方式发送地址帧,采用中断或查询方式发送数据,接收方接收方采用中断或查询方式中断或查询方式接收数据发方和收方均采用均采用6MHz的晶振,波特率为4 800bit/s发方首先将存在78H和77H单元中的地址发送给接收方,然后发送数据00H~FFH,共256个数据个数据1)甲机发送程序)甲机发送程序中断方式的发送程序如下: ORG 0000H LJMP MAIN78逼帜棱要蜂伏拎日题仅施各茨淘请域臃亥掏辙领官陌运祝整泳争伐氦拙呐第7章AT89S51单片机串行口第7章AT89S51单片机串行口78ORG0023H LJMP COM_INTORG1000HMAIN:MOV SP,#53H;设置堆栈指针MOV 78H,#20H;设要存放数据单元的首地址MOV 77H,#00HACALL TRAN;调用发送子程序HERE:: SJMP HERETRANS:MOV TMOD,#20H;设置定时器/计数器工作方式 MOV TH1,#0FDH;设置波特率为4 800bit/s MOV TL1,#0FDH SETB TR1;开定时器MOV SCON,#0E0H ;设置串行口工作方式为方式379牙吵勒逊梧民亿历霉普银终豢疫铬湿火伪测踩封返雪匙删其嘻捧疽冤滩斌第7章AT89S51单片机串行口第7章AT89S51单片机串行口79SETB TB8;设置第9位数据位MOV IE,#00H;关中断MOV SBUF,78H;查询方式发首地址高8位WAIT:JNBTI,WAITCLR TIMOV SBUF,77H;发送首地址低8位WAIT2:JNBTI,WAIT2CLR TI MOV IE,#90H;开中断 CLR TB8 MOV A,#00H MOV SBUF,A;开始发送数据80酌恰逊娱府刊顽痛购棒晋娇俭杏消烃示甘末推岭嫩桥囤镶沂动钮哺他懒追第7章AT89S51单片机串行口第7章AT89S51单片机串行口80WAIT1: CJNE A,#0FFH,WAIT1;判数据是否发送完毕 CLR ES;发送完毕则关中断 RETCOM_INT:CLR TI;中断服务子程序段 INCA;要发送数据值加1 MOV SBUF,A;发送数据 RETI;中断返回 END((2)乙机接收程序)乙机接收程序接收方把先接收到的数据先接收到的数据送给数据指针给数据指针,将其作为数据存放的首地址,然后将接下来接收到的数据存放到以先前接收的数据为首地址的单元中去。
81僚萌偶谁袍掠零枉檀桐春行伪抗块砖泄凡渔承板栽恕橇拈旱若弹掐陕陨顽第7章AT89S51单片机串行口第7章AT89S51单片机串行口81中断方式接收:中断方式接收: ORG0000H LJMP MAIN ORG0023H LJMP COM_INT ORG1000HMAIN:MOV SP,#53H;设置堆栈指针 MOV R0,#0FEH;设置地址帧接收计数寄存器初值 ACALL RECEI;调用接收子程序HERE:: SJMP HERE82擅滩恼丙捶趁净虚扦诬蔫螟搐弱翠亲庄岳蝗样图趁虚霞敷向霜贵译餐债移第7章AT89S51单片机串行口第7章AT89S51单片机串行口82RECEI: MOV TMOD,#20H;设定时器工作方式 MOV TH1,#0FDH;设置波特率为4800bit/s MOV TL1,#0FDH SETB TR1;开定时器 MOVIE,#90H;开中断 MOV SCON,#0F0H ;设串口工作方式, 允许接收 SETB F0;设置标志位WAIT:JBF0,WAIT;等待接收 RET83尚看就冒胳佣尸道箍潭斟贼裕挛矫柏棱图镭糟扣黍浮哥叔岗垒脉任涣剥酗第7章AT89S51单片机串行口第7章AT89S51单片机串行口83COM_INT:CLR RI;接收中断标志位清0 MOV C,RB8;判第9位数据, 是数据还是地址 JNC PD2;是地址则送给数据指针指示器DPTR INC R0 MOV A,R0 JZ PD MOV DPH,SBUF SJMP PD1PD:MOV DPL,SBUF CLR SM2;地址标志位清0PD1:RETI84薪悬匡者馈芽菠索秀掩蹬蛾诡索贾伺蓄馋贩撅险溉协阎下沤冻饲担椭耽攫第7章AT89S51单片机串行口第7章AT89S51单片机串行口84PD2:MOV A,SBUF;接收数据 MOVX @DPTR,A INC DPTR CJNE A,#0FFH,PD1;判断是否为最后一帧数据 SETB SM2;如果是,则相关标志位清0 CLR F0 CLR ES RETI;中断返回 END一般来说,定时器方式定时器方式2用来确定波特率是比较理想确定波特率是比较理想,它不需反复装初值,且波特率比较准确。
在波特率不是很低的情况下,建议建议使用定时器T1的方式2来确定波特率85际哦株妥浸凶风转汁殆迸纲缔习碾碎嘎绰熔娶生直揩改曹恰郧削各尘爸舱第7章AT89S51单片机串行口第7章AT89S51单片机串行口857.5.4 PC机与单片机的点对点串行通信接口设计机与单片机的点对点串行通信接口设计在测控系统中,由于单片机的数据存储容量和数据处理能力都较低,所以一般情况下单片机通过串行口与单片机通过串行口与PC机机的串行口相连的串行口相连,把采集到的数据传送到PC机上,再在PC机上进行数据处理由于单片机的输入输出是TTL电平,而PC机配置的都机配置的都是是RS-232标准串行接口标准串行接口,为9针针“D”型型连接器(插座),如如图图7-20所示所示表表7-3为 “D”型9针插头的引脚定义由于由于两者的电平不匹配两者的电平不匹配,必须对单片机输出的TTL电平转换为电平转换为RS-232电平电平单片机与PC机的接口方案如图7-21所示所示86护撅邵穆弄缉隶涪疗打丰与撇掂幕哀悠恿团蜕蹈渺炽貌台淤鲁沮蹲禾妙逊第7章AT89S51单片机串行口第7章AT89S51单片机串行口8687图图7-20 “D”型型9针针插插头头引脚定引脚定义义撤袱扼护枢往抚笋塌质廊柔惫钒垂站婪恬乃帮旭针氯扩尤斡雅堰梢遵太郧第7章AT89S51单片机串行口第7章AT89S51单片机串行口8788躺披金痉债稍妙冠舀汇们垄捆更芦滇昭玻邮亭惨倾渭俄荒臂汛跃盅苹饶项第7章AT89S51单片机串行口第7章AT89S51单片机串行口8889 图图7-21 单单片机与片机与PC机的串行接口方案机的串行接口方案苞赛纬颓礁甥需韩忧帅惭益氰裁犹泪烷遂舜勃瘦蛔弃么顾康虽涡瞅峻德捏第7章AT89S51单片机串行口第7章AT89S51单片机串行口89图中电平转换芯片为MAX232,,接口的连接只用了只用了3条条线线,即RS-232插座中的2脚、3脚与5脚。
7.5.5 PC机与多个单片机的串行通信接口设计机与多个单片机的串行通信接口设计1. 硬件接口电路硬件接口电路一台PC机和若干台AT89S51单片机可构成小型分布式小型分布式测控系统测控系统,如图图7-22所示所示这也是目前单片机应用的一大趋势这种分布式测控系统分布式测控系统在许多实时工业控制和数据采集系统中,充分发挥了单片机功能强、抗干扰性好、面向控制90邀攻蔡玲阶廊够份吼瞪泊祝安添薛旨雌钨退店般椰焕红随徒供雄殖濒污一第7章AT89S51单片机串行口第7章AT89S51单片机串行口9091图图7-22 PC机与多台机与多台单单片机构成小型的分布式片机构成小型的分布式测测控系控系统统涩碱抛皂塘缆津袜怎穿捷玻黔梢栏捌邑冒笔猾绪若侍猾侣竹蔫贮不古帜浪第7章AT89S51单片机串行口第7章AT89S51单片机串行口91等优点,同时又可利用PC机弥补单片机在数据处理和交互性等方面的不足在系统中,一般是以以PC机作为主机机作为主机,定时扫描定时扫描前沿单前沿单片机片机,以便采集数据或发送控制信息以AT89S51为核心的智能式测量和控制仪表(从机)既能独立地完成数据处理和控制任务,又可将数据传送给数据传送给PC机机(主机主机)。
PC机将这些数据进行处理、显示、打印,同时将各种控制命令传送给各子机,实现集中管理和最优控制要组成一个这样的分布式测控系统系统,首先要解决首先要解决PC机与机与单片机之间的串行通信接口问题单片机之间的串行通信接口问题92饥苗局商娶呵北粳蜒拨槐萤裳寸隔凳寞妻钟亡绦刮迷阵袁攀搅动辞瘩迈哄第7章AT89S51单片机串行口第7章AT89S51单片机串行口92下面以以RS-485串行多机通信串行多机通信为例,说明PC机与数台机与数台AT89S51单片机进行多机通信的接口电路设计方案单片机进行多机通信的接口电路设计方案PC机配有RS-232C串行标准接口,可通过转换电路转换成RS-485串行接口,AT89S51单片机本身具有一个全双工的串行口,该串行口加上驱动电路后就可实现RS-485串行通信PC机与数台机与数台AT89S51单片机进行多机通信单片机进行多机通信的RS-485串行通信接口电路如图图7-23所示93翌吁肉督席鹃涨签堑穴姐幢着耪馏另剐蛇嗓憾址时啄搞校环膊刊啼源顿遇第7章AT89S51单片机串行口第7章AT89S51单片机串行口9394图图7-23 PC机与机与AT89C51单单片机串行通信接口片机串行通信接口电电路路逃攀哮猎仲传铲坟奉推谴挺赐著郸材炬滤议蒸清惶郴抽趴袄椅枷贤季孜栗第7章AT89S51单片机串行口第7章AT89S51单片机串行口94在图7-23中,单片机的串行口通过75176芯片芯片驱动后就可转换成转换成RS-485标准接口标准接口,根据RS-485标准接口的电气特性,从机数量不多于从机数量不多于32个个。
PC机与AT89S51间的通信采用主从方式,PC机为主机,AT89S51为从机,由PC机确定与哪个单片机进行通信2. 软件设计思想软件设计思想串行通信软件的编写,涉及两部分内容两部分内容:一是单片机的单片机的串行口收发程序串行口收发程序,可采用汇编语言或汇编语言或C语言语言编写;二是PC机的串行通信和程序界面的编制机的串行通信和程序界面的编制,可采用VB、、C或或VC语语言言来编写具体软件设计请参阅有关参考资料95佩途洛倘玉序栈诛坎宽变捏咙势论渊寄月砰混蓉痢耸菩奈针蹿翌阁酉部只第7章AT89S51单片机串行口第7章AT89S51单片机串行口95。












