收藏 分销(赏)

2022年单片机第十四讲.ppt

上传人:二*** 文档编号:12638101 上传时间:2025-11-18 格式:PPT 页数:46 大小:413.04KB 下载积分:5 金币
下载 相关 举报
2022年单片机第十四讲.ppt_第1页
第1页 / 共46页
本文档共46页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机原理及应用,(第十四讲),第八章 串行通信口,8.1串行通信的基础,并行通信,计算机,与外部信息交换的方式有两种 串行通信,并行通信,-,数据的所有位同时传送;特点是:速度 快,效率高,用在计算机内部的数据交换;,串行通信,-,数据的各位按顺序传输;特点是:成本低,速度慢,效率低,常常用在计算机与外部数 据的交换。(同步通信和异步通信),同步通信,-,特点是接受和发送的时钟严格保持同步,发送 和接收的数据位宽之间不存在误差积累的问题,从而能保证每一个数据位的区分和正确接受;,异步通信,-,特点是接受和发送的时钟是相互独立的,没有 严格保持同步的频率,最多要求具有相同的标称 频率值。,字符帧,-也叫数据帧,由起始位、数据位、奇偶校验位、和停 止位等4部分组成。,起始位,-位于字符帧的开头,只占一位,始、终为逻辑0;,数据位,-紧跟在起始位置后,有5、6、7、8位,低位在前,高位在后,;,奇偶校验位-,位于数据位后,只占一位,用于表征在数据通信中采用奇 校验还是偶校验;,停止位-,位于字符帧的末尾,为逻辑“1”高电平,常常取 1位、1.5位 或2位;,波特率,-,每秒钟传送二进制数码的位数,单位:bps;,常有:600、1200、2400、4800、9600、19200等。,同步通信是一种连续串行传输数据的方式,一次通信只传送一帧信息;它包括若干个数据字符。要求时钟严格保持同步。,1.半双工,只有一个通信回路;只有1条信息线和1条接地线;,有两个独立的通信回路,可以同时发送和接受数据,两条信息线和一条地线。,半双工方式串行通信,数据线,TXD,甲机,RXD,GND,RXD,乙机,TXD,GND,全双工方式串行通信,数据线,数据线,TXD,甲机,RXD,GND,RXD,乙机,TXD,GND,8.3 串行口控制寄存器,1.串行口控制寄存器SCON,SCON,用于串行通信的控制,字节地址为98H,位地址为9FH98H,基本格式为:位 序 D7 D6 D5 D4 D3 D2 D1 D0 位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 位符号 SM0 SM1,SM2,REN,TB8 RB8 TI RI,其中:,SM0和SM1,串行口工作方式选择位。串行口的工作方式 SM0 SM1 工作方式 功能简述 波特率 0 0 0 8位同步移位寄存器 fosc/12 0 1 1 10位UART 可变 1 0 2 11位UART fosc/32或fosc/64 1 1 3 11位UART 可变,SM2-,多机通信控制位。多机通信是在方式2和方式3下进行,因此SM2位主要用在 方式2和方式3。,SM2=1,,则只有接收到第9位数据(RB8)为1时,才将接收到的 前8位数据送到SBUF,并置位RI产生中断请求;若接收 到第9位数据(RB8)为0,则将接收到的前8位数据丢 弃,RI仍为0,不启动中断。,SM2=0,,则不论接收到的第9位(RB8)是0还是1,都将接收到 的前8位数据装入SUBF,并置位RI,产生中断请求。在串行通信工作方式0时,,SM2必须为“0”。,TB8-,在方式2和方式3中,是被发送的第9位数据,可根据需要由 软件置1或清0。该位也可作为数据的奇偶校验位。在方式1中,TB8为停止位;在方式0中,不用。,RB8-,在方式2和方始3中,是被接收的第9位数据,来自发送方的 TB8位;在方式1中,RB8收到的是停止位;,在方式0中,不用。,REN-,允许/禁止串行口接收控制位。由软件将该位置1时允许串行接受,启动RXD,开始接收数据;该位被软件清0,,禁止接收。,TI-发送终端标志位。,在方式0中,串行发送到第8位数据后由内部硬件置1。在其他方式下,则在一帧传送的停止位开始发送时,由内部硬件置1。,TI必须由软件清0。,RI-接收中断标志位。,在方式0中,串行接收到第8位数据后由内部硬件置1。在方式1中,串行口接收到停止位的中间时刻由内部硬件置1;在方式2和方式3的置位情况和SM2一样。,RI必须由软件清0。,当发送完一帧串行数据时,TI被置1,发生串行口中断;当接收完一帧串行数据时,RI被置1,同样发生串行口中断。这两种中断服务程序的入口地址都是,0023H,。CPU 并不知道是TI还是RI 申请的中断,必须由软件查询TI和RI的状态,方可进行相应的处理程序。,TI,和,RI,在中断服务程序中由软件清0,否则一次中断申请会被多次相应。,注意!,2.电源控制寄存器 PCON,PCON,主要是位HCMOS单片机电源控制而设置的专用寄存器。字节地址为87H,不可位寻址。其中:SMOD -GF1 GF0 PD IDL SMOD-波特率倍增位。SMOD=1,加倍;SMOD=0,不加。GF1-用户通用标志1位;GF0-用户通用标志0位;PD-掉电方式控制位;IDL-空闲方式控制位。,3.中断允许控制寄存器IE,ES=0,,禁止串行口中断;,ES=1,,允许串行口中断。,PS=0,,串行口中断为低优先级;,PS=1,,串行口中断为高优先级。串行口设置 方式 SCON SM2变化 0 10H 1 50H 单个处理器 2 90H (SM2=0)3 D0H 0 NA 1 70H 多处理器 2 B0H (SM2=1)3 F0H,8.2串行通信的工作方式,1.串行通信工作方式0,当SM1SM0=00时,串行口选择方式0。这种工作方式实际上是一个同步移位寄存器,其波特率固定,为 fosc/12。方式0的 数据由芯片 RXD/P3.0进行发送和接受,移位同步脉冲由TXD/P3.1端口输出。发送/接收是8位数据,,低位在先,高位在后,,顺序接收/发送。帧格式如下:-D0 D1 D2 D3 D4 D5 D6 D7 -在方式0中,SCON 寄存器中的SM2,RB8,TB8都不起作用,设置为0。,发送过程:,启 动 执行任何一条写SBUF指令就开始发送 (MOV SBUF,A);发 送 在移位脉冲的作用下,RXD端输出数据;结 束 一帧数据发送完后,TI=1,申请中断。,接收过程:,启 动 用软件使REN=1和RI=0,就会启动接收过程;接 收 采样RXD端口,将其数据移入输入移位寄存器;结 束 一帧数据接收完后,RI=1,申请中断。,2.串行通信工作方式1,当SM1 SM0=0 1时,串行口选择方式1。数据传送的波特率取决于定时器1的溢出率,且可改变。方式1的 数据由芯片 TXD/P3.1进行发送数据,由RXD/P3.0端口接收数据。发送/接收一帧信息是10位数据,1位起始位为(0),8位数据位,低位在先,1位停止位(1)顺序接收/发送。帧格式如下:起始 D0 D1 D2 D3 D4 D5 D6 D7 停止,3.串行通信工作方式2和3,当SM1 SM0=1 0时,串行口选择方式2;当SM1 SM0=1 1时,串行口选择方式3。由芯片 TXD/P3.1进行发送数据,由RXD/P3.0端口接收数据,以全双工方式进行发送/接收。发送/接收一帧信息是11位数据,1位起始位为(0),9位数据位,低位在先,1位停止位(1)顺序接收/发送。帧格式如下:起始 D0 D1 D2 D3 D4 D5 D6 D7 D8 停止,8.3 波特率的设置,串行口波特率的设置随工作方式选择的不同而异。它与振荡频率fosc、电源控制寄存器PCON、定时器1设置有关。,方式0,波特率固定不变,仅与振荡频率有关,其大小为fosc/12。,方式2,有两种:,SMOD=1,时,SMOD=0时,方式1和3,通过,对定时器1 的设置,可选择不同的波特率。,SMOD,的设置可用下面的指令完成。,MOV PCON,#00H MOV PCON#80H,2.定时器1溢出率的计算,溢出率,定义为每秒的溢出次数,溢出率与定时器的工作方式有关。串行通信一般都使定时器1工作在方式2。定时器1的方式2为8位自动重装定时器。每经过一个机器周期,TL1加1,当TL1增至FFH时,再加1便产生溢出。溢出后,自动将TH1的计数初值N送入TL1中,使TL1从初值开始计数。这样,溢出率不仅与fosc有关,还与初值N有关,N值越大,溢出率就越高。极限情况是:若N=FFH,那么每隔一个机器周期计数器就溢出一次。,溢出一次所需要的时间为,定时器1 每秒的溢出系数,实际上往往先给出波特率,而后定出常数初值N,例如:若时钟频率为6MHz,当SMOD=1,波特率为2400时,初值为,常用的波特率值,波特率,Fosc/MHz,SMOD,定时器1,C/T,方式,重装值,19.2K,11.059,0,0,2,FDH,9.6K,11.059,0,0,2,FDH,4.8K,11.059,0,0,2,FAH,2.4K,11.059,0,0,2,F4H,1.2K,11.059,0,0,2,E8H,137.5,11.986,0,0,2,1DH,110,6,0,0,2,72H,110,12,0,0,1,FEEBH,不同振荡频率时的波特率,晶振频率,7.3728,8,11.0592,12.000,14.751,16.00,TH1,E0,600,651,900,976,1200,1302,F0,1200,1302,1800,1953,2400,2604,F8,2400,2604,3600,3906,4800,5208,F9,2743,2976,8229,4464,5486,5952,FA,3200,3472,9600,5208,6400,6944,FF,19200,20833,57600,62500,41666,波特率及误差,波特率,晶振频率,SMOD,TH1重装值,实际波特率,误差,9600,12.000,1,-7(F9H),8923,7%,2400,12.000,0,-13(F3H),2404,0.16%,1200,12.000,0,-26(E6H),1202,0.16%,19200,11.059,1,-3(FDH),19200,0,9600,11.059,0,-3(FDH),9600,0,2400,11.059,0,-12(F4H),2400,0,1200,11.059,0,-24(E8H),1200,0,举例,:试编一个串口自发自收通信的程序,检查单片机是否完好。晶振频率为12MHz,波特率为600,取SMOD=0。(P1.0接指示灯、RXD与TXD接在一起),解:,T1初值 N=204=CCH START:MOV TMOD,#20H ;T1工作在方式2 MOV TH1,#0CCH ;设置T1初值 MOV TL1,#0CCH SETB TR1 ;启动T1 MOV SCON,#50H ;串行口工作方式1,允许接收 ABC:CLR TI ;清0 MOV P1,#0FEH ;P1.0为低电平,灯不亮 ACALL DAY ;延时 MOV A,#0FFH ;MOV SBUF,A ;发送数据FFH,接前页:,JNB RI,$;RI,1 等待,CLR RI ;清0 MOV A,SUBF ;接收数据FFH MOV P1,A ;P1口高电平,灯亮 ACALL DAY ;延时 SJMP ABC ;跳转ABC DAY:MOV R6,#0FFH ;延时子程序 DAL:MOV R7,#0FFH DJNZ R7,$DJNZ R6,DAL RET若单片机串口没问题,可观察到P1.0发光二极管闪亮。,由于TXD、RXD运行在工作方式0,TXD发出移位脉冲,RXD发出数据,P1.0用于显示器的输入控制,通过74HC164接8个数码管。,ORG 0100H,SETB P1.0 ;允许移位寄存器工作,MOV SCON,#00H ;选串行接口方式0,MOV R7,#06H ;显示的数据送R7,MOV R0,#35H ;R0指向缓冲区末地址,MOV DPTR,#TAB ;DPTR指向字符表首地址,LOOP:MOV A,R0 ;取待显示数据,MOVC A,A+DPTR ;查字形表 MOV SUBF,A ;送出显示值,JNB TI,$;一帧输出完?,CLR TI ;已完,清中断标志,DEC R0 ;修改显示缓冲区地址,DJNZ R7,LOOP ;数据全部发完?没,继续,CLR P1.0 ;发完,关发送,显示不动,SJMP$;,ORG 0100H SETB P1.0 ;允许移位寄存器工作 MOV SCON,#00H ;选串行口方式0 MOV R7,#06H ;显示数据个数送R7 MOV R0,#35H ;R0指向缓冲区末地址 MOV DPTR,#TBA ;DPTR 指向字形表首址 LOOP:MOV A,R0 ;取待显示数据 MOVC A,A+DPTR ;查字形表 MOV SUBF,A ;送出显示 JNB TI,$;一帧输出完 CLR TI ;已完,清中断 DEC R0 ;修改显示缓冲地址 DJNZ R7,LOOP ;数据全部发送完?未完,继续 CLR P1.0 ;发送完,关发送脉冲,数 ;码显示在数码管上 SJMP$TAB:DB 3FH,06H,5BH,4FH,66H,6DH ;共阳极7段码LED显示字形编码表 DB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,79H,00H,40H END,举例,:设计A(发)、B(接)单片机点对点通信程序。数据块首地址为50H,数据块长度为32字节。设晶振频率为6MHz,波特率为1200。,解:,通信协议如下:数据块传送之前,现有A机向B机发一个“请求接受”的信号,(用数据AAH表示),当B机接收到“AAH”后,再向A机反馈一个“同意接收”的回答信号(BBH);当A机收到 B机的“BBH”后,才开始正式传送数据,若有错,则在各自的LED上显示EEH,并停止程序运行。数据传送之中,采用串口方式1,另配“部分累加和”的校验方式来核对所传数据块是否正确。方法是:A、B机双方每发送或接收一字节数据后,都将该数据与前面的数据进行累加(但只保留和的低8位),待数据传送完毕后,A机再传送“部分累加和”(仅一字节数据)给B机,由B机进行对比,若相等,正确;向A机反馈“相等”信息(00H);若不等,反馈“不相等”信息(FFH)。A机收到反馈信号00H则结束;若收到是 FFH则重传全部数据。R0-数据块地址指针;R1-数据块长度寄存器;R2-部分累加和寄存器。,;=显示A中数据子程序=将 A中的十六进制数据拆分后送P1和P2 连接的两个七段显示器显示。LED1:PUSH ACC ;保护现场 PUSH ACC ;再存,拆分用 MOV DPTR,#SEGPT ;数据块地址 ANL A,#0F0H ;将A拆分,以便显示 SWAP A ;半字节交换 MOVC A,A+DPTR ;取高字节显示数据 MOV P1,A ;将A 中的高4位送显示 POP ACC ANL A,#0FH MOVC A,A+DPTR MOV P2,A ;将A中的低4位送显示 POP ACC ;恢复现场 RET SEGPT:DB 40H,79H,24H,30H,19H,12H,2,78H,0,18H,8,3,46H,21H,DB 6,0EH,;=A机发送主程序如下=MOV SCON,#50H ;,串行口工作方式1,允许接收,MOV PCON,#00H ;,SMOD=0,MOV TMOD,#20H ;,定时器1,方式2,MOV TH1,#0F3H ;,波特率1200,6MHz初值F3H,MOV TL1,#0F3H SETB TR1 ;,启动T1,LOOP1:MOV A,#0AAH ;,联络信号AA送A,MOV SUBF,A ;,发送联络信号AA,ACALL LED1 ;,调显示子程序,JNB TI,$;,等待发送完,CLR TI ;,完了,清TI,JNB RI,LOOP1 ;,等待B机应答,CLR RI ;,B机应答后,清RI,MOV A,SUBF ;,接收B机应答信号,CJNE A,#0BBH,ERROR ;,应答正确否?不正确转ERROR,ACALL LED1 ;,应答正确,显示,发送数据,MOV R0,#50H ;,发送数据区的首地址,MOV R1,#20H ;,数据字节长度,MOV R2,#00H ;,累加和寄存器清0,LOOP2:MOV A,R0 ;,取一字节数据,LOOP2:MOV A,R0 ACALL SENT ;,发送一字节数据,INC R0 ;,修改数据区的指针,DJNZ R1,LOOP2 ;,数据块未发完,继续发,MOV SBUF,R2 ;,完了,送校验和,JNB TI,$;,等待发送完,CLR TI ;,发完,清TI,JNB RI,$;,等待B机回传校验信号,CLR RI ;,B机回传,清RI,MOV A,SUBF ;,读入回传数据,JZ LOOP3 ;,B机校验正确,转LOOP3,显示结束,MOV A,#0FFH ;,校验出错,显示FF结束,SJMP LOOP3 ERROR:MOV A,#OEEH -LOOP3:ACALL LED1 SJMP$SEDT:-RET LED1:-RET,;=B机接收主程序如下=START:MOV SCON,#50H ;,串行口工作方式1,允许接收,MOV PCON,#00H ;,SMOD=0,MOV TMOD,#20H ;,定时器1工作方式2,MOV TH1,#0F3H ;,波特率1200,6MHz,初值,MOV TL1,#0F3H SETB TR1 ;,启动T1,JNB RI,$;,等待接收A机联络信号,MOV A,SBUF ;,读入联络信号,CJNE A,#0AAH,ERROR1;,是AA吗?不是,转,MOV A,#0BBH ;,是AA,应答信号BB送A,MOV SUBF,A ;,发送应答信号BB,JNB TI,$;,等待发送完,CLR TI ;,发送完,清TI,ACALL LED1 ;,显示应答信号BB,CLR RI ;,此动作一定要滞后(清RI)!,MOV R0,#50H ;,设定接收数据区的首地址,MOV R1,#20H ;,数据字节长度,MOV R2,#00H ;,累加和寄存器清0,LOOP4:ACALL RE ;,接收一字节数据,LOOP4:ACALL RE ;接收一字节数据 INC R0 ;修改数据指针 DJNZ R1,LOOP4 ;未接收完,转LOOP4 JNB RI,$;接收完,等待发校验和 CLR RI ;收到,清RI MOV A,SUBF ;读入接收到的校验和 CJNE A,R2,ERROR2 ;相等吗?不等转ERROR2 MOV A,#00H ;相等,00送A SJMP LOOP5 ;转LOOP5 ERROR1:MOV A,#0EEH ;联络出错,EE送A CLR RI ;清RI ACALL LED1 ;显示EE,结束 SJMP$ERROR2:MOV A,#0FFH ;校验出错,FF送A LOOP5:MOV SUBF,A ;发送、显示校验出错标志FF,结束 ACALL LED1 JNB TI,$CLR TI SJMP$RE:-RET LED1:-RET,第八章 89C51与键盘、显示器、打印机的接口设计,键盘接口应解决的问题有:,键盘的输入特点、按键的确认、消除按键的抖动。,键盘接口的工作原理,独立式键盘接口,行列式键盘接口,键盘/显示器专用芯片(HD7279),键盘的工作方式,编程查询扫描方式,定时扫描方式,中断扫描方式,键按下 松开键,前沿抖动 键盘稳定 后沿抖动,双稳态去抖电路,+5V,1 Q,a,2,b,&,&,1.2键盘的编码,用键盘连接的I/O线的二进制组合表示键码。例如:4行、4列-16个键 88H 84H 82H 81H 48H 44H 42H 41H 28H 24H 22H 21H 18H 14H 12H 11H特点:简单直观 离散性大,不便安排散转程序的入口地址,顺序排列编码 首先确定按键的行号m,再确定按键的列号n,则 键码=行号m,4+列号,n,F E D C,D7,B A 9 8,D6,7 6 5 4,D5,3 2 1 0,D4,D3 D2 D1 D0,I/O,接口,AT89C51,查询方式,基本思路:,将所有列线置成低电平,P1.4P1.7;,把行线电平状态读入累加器A中,若有键按下,总会有一根行线的电,平被拉到低电平;,确认有键按下后,读入列代码,通过带进位的左移确认列号。,先确认行好,再确认列号,键码=行号,4+列号,编写子程序如下:,ORG 0100H KEY:MOV P1,#0F0H ;,行,线置低电平,,列,线置输入,KEY0:MOV A,P1 ;,读,列,线数据,CPL A ;,数据去反,“1”有效,ANL A,#0F0H ;,屏蔽,行,线,保留,列,线数据,MOV R1,A ;,存,列,线数据到 R1(高4位),JZ GRET ;,A判零,全0,无健按,返回,KEY1:MOV P1,#0FH ;,行,线置输入端,,列,线置低电平,MOV A,P1 ;,读,行,线数据,CPL A ;,数据取反,“1”有效,ANL A,#0FH ;,屏蔽列线,保留,行,线数据,MOV R2,A ;,存行线数据到 R2(低4位),JZ GRET ;,A判零,全0,无健按,返回,JBC F0,WAIT ;,已有抖动标志,转WAIT,SETB F0 ;,无抖动标志,置消抖标志,LCALL DELAY10 ;调10ms延时子程序 SJMP KEY ;重读,行,线、,列,线数据 MOV P1,#0FH,RI-接收中断标志位。,LOOP2:MOV A,R0 ACALL SENT ;,发送应答信号BB JNB TI,$;,GF1-用户通用标志1位;,依次右移入C中 JC KEY6 ;,MOV SBUF,A ;,=B机接收主程序如下=START:MOV SCON,#50H ;,修改数据指针 DJNZ R1,LOOP4 ;,SMOD=0时,0 ;,相等吗?不等转ERROR2 MOV A,#00H ;,SMOD=0 MOV TMOD,#20H ;,顺序排列编码 首先确定按键的行号m,再确定按键的列号n,则 键码=行号m4+列号n F E D C D7 B A 9 8 D6 7 6 5 4 D5 3 2 1 0 D4 D3 D2 D1 D0,按键编号4(LCAAL+RET共4个字节)MOV DPTR,#TABC ;,WAIT:MOV A,P1 ;,等待按键释放,CPL A ANL A,#0FH JNZ WAIT ;,按键未释放,继续等,KEY2:MOV A,R1 ;,取列线数据(高4位),MOV R1,#03H ;,取列线编号初值,MOV R3,#03H ;,置循环次数,CLR C ;,清零,KEY3:RLC A ;,依次左移到C中,JC KEY4 ;,C=1,该列有键按下,(列的编号存R1),DEC R1 ;,C=0,无按键按下,修正列编号,DJNZ R3,KEY3 ;,判循环结束?,KEY4:MOV A,R2 ;,取行线数据,(低4位),MOV R2,#00H ;,置行线编号初值,MOV R3,#03H ;,置循环次数,CLR CKEY5:RRC A ;,依次右移入C中,JC KEY6 ;,C=1,该行有键按下,(行线的编号存R2),INC R2 ;,C=0,无按键按下,修正行线的编号,DJNZ R3,KEY5 ;,判循环结束?,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服