文档详情

秦晓飞系列-单片机原理及应用-第7章89C51、S51串行口及串行通信技术讲述.ppt

发布:2017-04-01约2.77万字共93页下载文档
文本预览下载声明
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 7.3 89C51/S51与89C51/S51点对点异步通信 7.3.2 波特率设置 除非波特率很低,一般都采用T1模式2。因为当T1溢出后,参数自动装入,可避免不必要的中断请求。 表7-2给出了晶振fOSC=6MHz或12MHz时,常用波特率和定时器的初装值。但要注意,表中的初装值和波特率之间是有一定误差的。 比如:晶振fOSC= 11.059MHz,设置波特率为9600 b/s,则定时器T1的初装值为0FDH。设定时器操作于模式2,SMOD=0。 若要求比较准确的波特率,可以通过调整单片机的时钟频率fosc来得到,或通过修改SMOD值减少误差。 7.3 89C51/S51与89C51/S51点对点异步通信 7.3.3 通信程序举例 例7-7 设甲机发送,乙机接收。串行接口工作于方式3(每帧数据为11位,第9位用于奇偶校验),两机均选用6MHz的振荡频率,波特率为2400b/s。通信的功能为: 甲机:将片外数据存储器4000H~407FH单元的内容向乙机发送,每发送一帧信息,乙机对接收的信息进行奇偶校验。此例对发送的数据作偶校验,将P位放在TB8中。若校验正确,则乙机向甲机回发“数据发送正确”的信号(例中以00H作为应答信号)。甲机收到乙机“正确”的应答信号后,再发送下一个字节。若奇偶校验有错,则乙机发出“数据发送不正确”的信号(例中以FFH作为应答信号)。甲机接收到“不正确”应答信号后,重新发送原数据,直至发送正确。甲机将该数据块发送完毕后停止发送。 乙机: 接收甲机发送的数据,并写入以4000H为首址的片外数据存储器中。每接收一帧数据,乙机对所接收的数据进行奇、偶校验,并发出相应的应答信号,直至接收完所有数据。 解:(1)计算定时器处置X 将已知数据fosc=6×106Hz,波特率=2 400 b/s代入,得 取SMOD=0时,X=249.49。因取整数误差过大,故设SMOD=1,则X=242.98≈243=F3H。因此,实际波特率=2403.85 b/s。 7.3 89C51/S51与89C51/S51点对点异步通信 7.3.3 通信程序举例 解:(2)流程图 图7-18 甲机发送流程图 7.3 89C51/S51与89C51/S51点对点异步通信 7.3.3 通信程序举例 解:(2)流程图 图7-19 乙机接收流程图 7.3 89C51/S51与89C51/S51点对点异步通信 7.3.3 通信程序举例 解:(3)源程序 SETB ES;允许串行口中断 ETB EA;CPU开中断 MOVX A,@DPTR;取第一个数据发送 MOV C,P MOV TB8,C;奇偶标志送TB8 MOV SBUF,A;发送数据 SJMP $;等待中断 中断服务程序: SERVE1: JBC RI,LOOP ;是接收中断,清除RI,转入接收乙机的应答信息 CLR TI;是发送中断,清除中断标志 SJMP ENDT LOOP: MOV A,SBUF;取乙机的应答信息 CLR C SUBB A,#01H ;判断应答信号是#00H吗? JC LOOP1 ;是#00H,发送正确(#00H-#01H),C=1,转LOOP1 MOVX A,@DPTR;否则甲机重发 MOV C,P MOV TB8,C MOV SBUF,A;甲机重发原数据 SJMP ENDT ;转下一页 ①甲机 主程序: ORG 0000H LJMP MAIN;上电转向主程序 ORG 0023H ;串行口的中断入口地址 LJMP SERVE1 ;转向甲机中断服务程序 ORG 2000H;主程序 MAIN: MOV TMOD,#20H ;设T1工作于模式2 MOV TH1,#0F3H ;赋计数初值 MOV TL1,#0F3H;赋计数值 SETB TR1;启动定时器T1 MOV PCON,#80H;设SMOD=1 MOV SCON,#0D0H ;置串行口方式3,允许接收 MOV DPTR,#4000H ;置数据块首址 MOV R0,#80H ;置发送字节数初值 7.3 89C51/S51与89C51/S51点对点异步通信 7.3.3 通信程序举例 解:(3)源程序 MAI
显示全部
相似文档