中断定时与串口.ppt

上传人:小飞机 文档编号:5170586 上传时间:2023-06-10 格式:PPT 页数:96 大小:1.86MB
返回 下载 相关 举报
中断定时与串口.ppt_第1页
第1页 / 共96页
中断定时与串口.ppt_第2页
第2页 / 共96页
中断定时与串口.ppt_第3页
第3页 / 共96页
中断定时与串口.ppt_第4页
第4页 / 共96页
中断定时与串口.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《中断定时与串口.ppt》由会员分享,可在线阅读,更多相关《中断定时与串口.ppt(96页珍藏版)》请在三一办公上搜索。

1、,第四章:中断,定时与串口,本讲重点:中断概念,响应条件,处理原则,中断服务;定时器/计数器工作方式1,2的用法;串行通讯的波特率,4种工作方式.,单片机的中断系统,数据的输入/输出传送方式,查询传送方式(LOOK UP):传送前一方先查询另一方的状态,若已经准备好就传送,否则就继续查询/等待,中断传送方式(IRQ):一方通过申请中断的方式与另一方进行数据传送,无条件传送方式:一方对另一方来说总是准备好的,直接存储器存取方式(DMA):双方直接通过总线传送数据,不经CPU中转,数据传送的双方平时各自做自己的工作,一旦甲方要求与乙方进行数据传送,就主动发出信号提出申请,乙方接到申请后若同意传送,

2、安排好当前的工作,再响应与甲方发生数据传送。完事后,回去继续做打断前的工作。,中断功能强弱是计算机性能优劣的重要标志提高CPU效率 解决速度矛盾 实现并行工作 应付突发事件,中断传送方式特点,中断源 中断申请开放中断保护现场中断服务恢复现场中断返回,中断涉及的几个环节,(前面提到的甲方)(甲方发出信号提出申请)(乙方同意传送)(安排好当前的工作)(响应乙方的要求)(完事后,回去)(继续做打断前的工作),单片机的中断源及TCON,CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。,51子系列允许5个(52子系列6个)中断源:2个外部中断请求:

3、INT0,INT1 2个片内定时器/计数器T0和T1中断请求:TF0,TF1,(TF252子系列有T2)1个串行口中断请求:TI/RI,CPU识别中断申请的依据:,单片机的中断源及TCON,CPU 在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。,CPU识别中断申请的依据:,Tc,Ts,Tm,Tm,Tc=1/fosc Ts=2Tc Tm=12Tc=6Ts,S5,S6,S4,S3,S2,S5,S6,S4,S3,S2,S1,定时器控制寄存器TCON(88H),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TCON,TF0/TF1:

4、定时器溢出中断申请标志位:=0:定时器未溢出;=1:定时器溢出申请中断,进中断后自动清零。,TR0/TR1:定时器运行启停控制位:=0:定时器停止运行;=1:定时器启动运行。,TCON:Timer控制寄存器,是管理定时器工作的SFR(其中低4位管外部中断),定时器控制寄存器TCON(88H),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TCON,IE0/IE1:外部中断申请标志位:=0:没有外部中断申请;=1:有外部中断申请。,IT0/IT1:外部中断请求的触发方式选择位:=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/INT1端申请中断的信号负跳变

5、有效.,TCON:Timer控制寄存器,低4位管理外部中断,在CPU已经开放了外部中断允许的前提下:在INT0/INT1引脚输入一个负脉冲或低电平,TCON寄存器中的IE0/IE1标志位自动变“1”,CPU检测到IE0/IE1变“1”后,将自动跳转到 0003H(/0013H)执行中断服务程序,并将IE0/IE1标志位自动清“0”,以备下次申请。,外部中断(INT0,INT1)申请过程,单片机的中断矢量与优先级,中断矢量:MCS-51单片机的 5 个中断源分别对应有各自的中断服务程序入口地址中断矢量,最高优先级最低优先级,PT2 PS PT1 PX1 PT0 PX0,IP,PX0/PX1:IN

6、T0/1优先级控制位:=0 时属低优先级;=1 时属高优先级。PT0/PT1/PT2:T0/1/2中断优先级控制位:=0 时属低优先级;=1 时属高优先级。PS:串行口中断优先级控制位:=0 时属低优先级;=1 时属高优先级。,中断优先级控制寄存器IP(0B8H),对同时发生多个中断申请时:不同优先级的中断同时申请(很难遇到)先高后低相同优先级的中断同时申请(很难遇到)按序执行正处理低优先级中断又接到高级别中断 高打断低正处理高优先级中断又接到低级别中断 高不理低,中断优先级处理原则,没有同级的中断或更高级别的中断正在处理;,在中断源提出了中断申请且CPU此前已经允许中断的前提下,还须满足以下

7、三个条件:,正在执行的指令必须执行完最后 1个机器周期;,若正在执行RETI,或正在访问IE或IP寄存器,须执行完上述指令和下一条指令以后方能响应中断。,EA ET2 ES ET1 EX1 ET0 EX0,IE,中断允许寄存器IE(0A8H),EX0/EX1/ET1/ET0/ES 位:分别是INT0/1,Timer0/1,串行口的中断允 许控制位:=0 时禁止中断;=1 时允许中断。ET2:T2中断允许控制位(仅52子系列有)=0 时禁止中断;=1 时允许中断。EA:总的中断允许控制位(总开关):=0 时禁止全部中断;=1 时允许中断。,中断系统硬件结构,注:各中断允许控制位=0,开关断开;=

8、1,开关接通,IE0,EX0,TF0,IE1,TF1,TI,ES,ET1,EX1,ET0,外部中断 请求0,外部中断 请求1,内部 定时器0,内部 定时器1,内部 串行口,T,R,RI,IE寄存器,EA位,IP寄存器,各单路开关,总开关,中断源标志位查询机构,高中断级中断请求,低中断级中断请求,中断入口,中断源标志位,INT0,INT1,中断入口,中断源标志位,中断应用前后要做的几项工作,中断前 开中断允许:必须 选择优先级:根据需要选择,可有/可无 设置控制位:INTx触发方式(ITx)TxTCON,TMOD,TRx,初值 RI/TISCON,REN,RB8,TB8,中断后进入中断服务后:保

9、护现场,关中断,退出中断服务前:恢复现场,开中断,设Tx的初 值,清TI/RI,中断服务程序的最后一条指令必是 RETI,编写中断服务程序时应注意的几点:,1)各中断源的入口矢量地址之间,只相隔8个单元,一般中断服务程序是容纳不下的,因而最常用的方法是将中断服务程序放置在程序存储器的其它空间,而在中断入口矢量地址单元处存放一条无条件转移指令,转至该服务程序。2)若要在执行当前中断程序时禁止更高优先级中断,应采用软件来关闭CPU中断,或屏蔽更高级中断源的中断,在中断返回前再开放这些中断。,3)现场通常用到PSW、工作寄存器和专用寄存器等。如果在中断服务程序中要用这些寄存器,则在中断服务前应将它们

10、的内容保护起来称保护现场,同时在RETI指令前应恢复现场。4)在保护现场和恢复现场时,为了不使现场信息受到破坏或造成混乱,一般情况下,应关CPU中断,使CPU暂不响应新的中断请求。因此在编写中断服务程序时,保护现场之前要关中断,在保护现场之后若允许高优先级中断源中断它,则应开中断。同样在恢复现场之前也应关中断,恢复之后再开中断。,编写中断服务程序时应注意的几点:,五、中断系统的应用举例,从软件角度看,使用中断时需要做两个方面的任务:(1)按人们的意志对中断源进行管理和控制。中断源管理和控制(初始化程序)程序一般都包含在主程序中,根据需要通过几条指令来完成。在编写中断管理与控制程序时应考虑以下项

11、目:1)CPU开中断与关中断;2)某个中断源中断请求的允许或屏蔽;3)各中断源优先级别的设定;4)外部中断请求的触发方式。(2)编制中断服务程序。中断服务程序是一种具有特定功能的独立程序段,根据中断源的具体要求进行服务的。,中断应用程序举例:,例:通过外部中断1,在中断服务中将B寄存器里的内容左环移一位。已知:(B)=01h,要求采用边沿触发,低优先级。,此例的实际意义:在INT1引脚接一个按钮开关到地,每按一下按钮就申请一次中断,中断服务则是:依次点亮八盏灯中的一盏。,中断应用程序举例:,例:通过外部中断1,在中断服务中将B寄存器里的内容左环移一位。已知:(B)=01h,要求采用边沿触发,低

12、优先级。,此例的实际意义:在INT1引脚接一个按钮开关到地,每按一下按钮就申请一次中断,中断服务则是:依次点亮八盏灯中的一盏。,ORG 0000H LJMP MAIN ORG 0013H;中断矢量 LJMP INTMAIN:SETB EA;开总中断允许“开关”SETB EX1;开分中断允许“开关”CLR PX1;0 优先级(也可不要此句)SETB IT1;边沿触发 MOV B,#01H;给 B 寄存器赋初值 MOV P1,BHERE:SJMP HERE;原地等待中断申请,INT:MOV A,B;自B寄存器中取数 RL A;左环移一次 MOV B,A;存回B,备下次取用 MOV P1,A;输出到

13、P1口 RETI;中断返回,中断服 务程序,利用做一个计数器。当有脉冲时,A的内容加1。并且当A的内容大于或等于100时将P1.0置位.,ORG 0000h Ljmp MIN0 ORG 0003h Ljmp INTB0 ORG 000bh reti ORG 0013h reti ORG 001bh reti ORG 0023h reti ORG 0030hMin0:mov sp,#30h Setb IT0,Setb EX0 CLR PX0 SETB EA Mov a,#00Min1:NOP ljmp Min1 Org 0100hINTB0:Push psw Add A,#01 Cjne a,#

14、100,INTB1 Ljmp INTB2INTB1:jc INTB3INTB2:setb P1.0INTB3:POP PSWRETI,单片机的定时/计数器,2个16位定时器/计数器(52系列有3个16位Timer)定时器:对片内机器周期进行计数计数器:对Tx引脚输入的负脉冲进行计数,与Timer工作有关的特殊功能寄存器:TCON 和 TMOD,Timer的2个特殊功能寄存器(TCON,TMOD),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,定时器控制寄存器TCON(88H)P.137,TFx:Timer0/1计数溢出标志位。=1 计数溢出;=0 计数未满 TFx标志位可用于

15、申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在 查询方式时必须软件清零。,TRx:Timer0/1运行控制位。=1 启动计数;=0 停止计数,TR0/TR1:Timer0/1运行控制位:TR0/TR1=0 时,Timer0/1停止计数 TR0/TR1=1 时,Timer0/1启动计数,定时器T0/T1 中断申请过程,在已经开放T0/T1中断允许且已被启动的前提下:T0/T1加满溢出时 TF0/TF1标志位自动置“1”检测到TCON中TF0/TF1变“1”后,将转到 000BH/001BH 执行中断服务程序,TF0/TF1标志位会自动清“0”,以备下次中断申请。,定时/计数器可按片

16、内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数,TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TCON(88H),GATE C/T M1 M0 GATE C/T M1 M0,定时器方式寄存器TMOD(89H)P.137,T1,T0,M1,M0:工作方式定义位(定义4 种方式):,C/T:计数器/定时器选择位=1 外部事件计数器。对Tx引脚的负脉冲计数;=0 片内时钟定时器。对机器周期脉冲计数定时,0 0:13位 Timer用它无益,不要记它!0 1:16位 Timer经常用到1 0:可自动重装的 8位 Timer经常用到1 1:T0 分为2个8位 Timer

17、;T1 此时不工作 因为没有带来甚麽好处,几乎无用,GATE C/T M1 M0 GATE C/T M1 M0,T1,T0,GATE门控位:Timer可由软件与硬件两者控制 GATE=0 普通用法 Timer的启/停由软件对TRx位写“1”/“0”控制,定时器方式寄存器TMOD(续),(89H),GATE=1 门控用法 Timer的启/停由软件对TRx位写“1”/“0”和在INTx引脚上出现的信号的高/低共同控制,定时器结构与工作方式,工作方式1:16位的定时/计数器,振荡器,12,TLx THx(8位)(8位),TFx,申请中断,Tx端,TRx位,GATE位,INTx端,1,&,C/T=0,

18、C/T=1,控制=1开关接通,或门,与门,THx/TLx赋初值:THx赋高8位,TLx赋低8位,工作方式1 的编程要点:,TMOD选方式:写“M1,M0”=01 b 选方式1,若不用门控位,直接用软件写TRx控制启/停 若使用门控位,先置位TRx,然后由INTx端 的高/低电平来控制其启/停,若要允许中断,还须先置位ETx、EA等中断 允许控制位,并编写中断服务程序 若不用中断,可查询“计数溢出标志TFx”的方式工作,但溢出标志TFx须软件清0,定时器(方式1)应用程序举例:,分析:已知fosc=6MHz 则:(振荡周期)1Tc=1/6MHz(机器周期)1Tm=12Tc=12/6MHz=2S

19、粗略地说:Tmin 2S 16位定时器最大数值为:216=65536=0FFFFH+1 故选择方式 1 工作可以得到:Tmax=655362=131072S131.072mS,例:若晶振频率为6MHz,计算单片机的最小与最大定时时间:,分析:已知fosc=6MHz 则:(机器周期)1Tm=12Tc=12/6MHz=2S 100mS2 S=50000 16位定时器最大数值为:216=65536(=0FFFFH+1)故选择方式1工作可以满足要求。计算初值:6553650000=15536=3CB0H,例:要求对T0产生100mS定时进行初始化。(晶振=6MHz),定时器(方式1)应用程序举例:,G

20、ATE C/T M1 M0 GATE C/T M1 M0,定时器方式寄存器TMOD,由分析得知:T0选择方式1,初值=3CB0H,X X X X 0 0 0 1,初始化:MOV TMOD,#01H;选 T0 方式 1 MOV TH0,#3CH;赋初值高8位 MOV TL0,#0B0H;赋初值低8位 SETB TR0;启动 T0定时若需要定时器0产生中断还应当写如下语句:SETB ET0;开T0中断允许 SETB EA;开总中断允许以及相应的中断服务程序。,工作方式2:8 位自动重装的定时/计数器,振荡器,12,TLx(8位),TFx,申请中断,Tx端,TRx位,GATE位,INTx端,1,&,

21、C/T=0,C/T=1,控制=1开关接通,或门,与门,THx(8位),溢出位,门开,THx/TLx赋相同初值 在TLx计数达到0FFH 再加“1”时,TL0 将溢出,进位位直接进入“TFx”去申请 中断,同时打开三态门,使THx中的值 自动重装(Copy)进TLx,工作方式 2 的编程:,TMOD寄存器选方式:写“M1,M0”=10 b 选中方式2,其他用法与各种方式1完全相同,分析:fosc=6MHz 1机器周期=2 S 1KHz方波周期=1 mS 半个方波周期=500S 500uS2 uS=250 若选择方式2 工作,8位定时器最大数值为:28=256=0FFH+1 可以满足要求。计算初值

22、:256250=6,例:从P1.0 脚输出频率=1KHz方波。设:晶振=6MHz。利用T1定时中断。,Th:半周期,T:周期,定时器(方式2)应用程序举例:,ORG 0000H AJMP MAIN ORG 001BH;T1的中断矢量 CPL P1.0;中断服务:P1.0取非 RETI;中断返回MAIN:MOV TMOD,#20H MOV TH1,#6 MOV TL1,#6 SETB ET1 SETB EA SETB TR1 HERE:AJMP HERE;原地等待中断 END,初始化,;选T1方式2;赋重装值;赋初值;开T1中断;开总中断;启动T1,T0:组织成TL0和TH0两个8位定时/计数器

23、,Timer工作方式 3 几乎无用,T1:不再是定时/计数器了 T1 的TR1和TF1出借给TH0当控制位使用,剩下的TH1/TL1寄存器只能当作普通寄存 器用。,振荡器,12,TL0(8位),TF0,申请中断,T0端,TR0位,GATE位,INT0端,1,&,C/T=0,C/T=1,控制=1开关接通,或门,与门,TH0(8位),TF1,申请中断,TR1位,控制=1,Timer工作方式 3 结构:,T0成为双 8位Timer T1不再有Timer功能 TF1,TR1出借给TH0,定时器小结:(2个16位加法计数器),运行/停止由TRx位控制,(当GATE=1时:由TRx位和INTx引脚上的信号

24、共同控制),工作方式由TMOD决定;计数/定时由C/T位决定 工作方式0(13位)永远不用 工作方式3(T0拆为双8位)几乎无用 工作方式1(16位)经常用到 工作方式2(8位自动重装)经常用到,从初值按机器周期或外部脉冲递加,溢出位 TFx申请中断;中断允许由ETx位和EA位控制,,定时计数器的初始化,(一)初始化的步骤:1)确定定时器/计数器的工作方式、操作模式、启动控制方式,并利用传送指令将其写入TMOD寄存器。2)设置定时器/计数器的初值。直接将初值写入TH0、TL0或TH1、TL1中。3)根据要求考虑是否采用中断方式,直接对IE位赋值。开放中断时,对应位置1;采用程序查询方式时,IE

25、中对应位应清0进行中断屏蔽。4)启动定时器/计数器工作。使用SETB TRi指令。若第一步设置为软启动,即GATE设置为0时,以上指令执行后,定时器/计数器即可开始工作。若GATE设置为l时,还必须由外部中断引脚共同控制,只有当引脚电平为高时,以上指令执行后定时器/计数器方可启动工作。定时器/计数器一旦启动就按规定的方式定时或计数。,2计数初值的计算,当T0或T1工作于定时器或计数器方式时,不同的工作方式、不同的操作模式其计数初值均不相同。若设最大计数值(溢出值)为M(模),各操作模式下的M值为:模式0:M=213=8192 模式1:M=216=65536 模式2:M=28=256 模式3:M

26、=28=256定时器T0分成2个独立的8位计数器,所以TH0、TL0的M均为256。MCS-51的两个定时器均为加1计数器,当加到溢出值时产生溢出,将TF位置l,可发出溢出中断,因此,计数器初值X的计算式为:X=M-计数值(通式)T0或T1工作于定时器与计数器方式时,x的确定方法有别。,1)计数器方式,当T0或T1工作于计数器方式时,计数脉冲由外部引入,它是对外部脉冲进行计数。因此计数值应根据实际要求来确定。计数初值可采用通式计算,即:X=M-计数值【举例】:在方式1时,每接收100个外部事件,要求产生一个中断,确定计数初值。X=M-计数值=65536-100=65436=FF9CH,THi=

27、FFHTLi=9CH,定时器初值计算公式:,当T0或T1工作于定时器方式时,由于是对机器周期进行计数,故计数值应为定时时间对应的机器周期个数。为此,应首先将定时时间转换为所需要记录的机器周期个数(计数值)。其转换公式为:机器周期个数(计数值)=Tc/Tp式中 Tc定时时间;Tp机器周期,Tp=12/fosc;fosc为机器时钟(震荡器)的振荡频率。故计数初值的计算公式为:X=M-计数值=M-Tc/Tp=M-(TCfosc)12。,【举例】:请计算定时50ms所需要的定时初值。fosc=12MHz1,确定模式:选择模式1;2,计算定时初值。X=65536-50ms/1=65536-50000=1

28、5536=3CB0H 即 THi=3CH;TLi=B0H,定时器方式1应用举例(例4-2),例1:用T1产生一个50Hz的对称方波,由P1.l输出,采用用程序查询方式,fosc=12MHz。【解】:首先确定工作方式、工作模式和定时初值。1,选定时方式(C/T=0);2,模式1(M2 M1=01),3,方波周期T=l/50=O.02s=20ms,用T1定时10ms,计数初值为:X1=216-1010-31210612=65536-10000=55536=D8F0H;既TH1=D8H,TL1=F0H。,TMOD 0001 0000,源程序如下:,ORG 0000h LJMP T1BUS ORG 0

29、030h T1BUS:MOV TMOD,#10H;T1模式1,定时 SETB TRl;启动T1 LOOP:MOV TH1,#0D8H;T1计数初值 MOV TL1,#0F0H LOOP1:JNB TF1,LOOP1;T1没有溢出等待 CLR TF1;产生溢出清标志位 CPL P1.1;P1.l取反输出 SJMP LOOP;循环,利用中断方式编程,ORG 0000h LJMP T1MIN ORG 001Bh LJMP LOOP ORG 0030h T1MIN:MOV TMOD,#10H;T1模式1,定时 MOV TH1,#0D8H;T1计数初值 MOV TL1,#0F0H SETB EA;CPU

30、、T1开中断 SETB ET1 SETB TRl;启动T1 T1MIN2:NOP LJMP T1MIN2 ORG 0100h LOOP:MOV TH1,#0D8H;T1计数初值 MOV TL1,#0F0H CPL P1.1;P1.l取反输出 RETI,定时器门控位GATE的应用(例4-3),在通常,在TMOD中GATE=0时,只要TR=1便启动定时器开始计数。如果GATE=1时,TR=1电路是否计数取决于/INT0:/INT0=1 时开始计数;/INT0=0,电路不计数。利用这一特点,可以实现测量外部脉冲的宽度。,利用T0门控位测引脚上出现的正脉冲宽度,将所测得的高8位值存入片内7lH,低8位

31、值存入片内70H单元中。已知fosc=12MHz。,解题步骤:将外部脉冲接到P3.2(/INT0)上,使用T0且C/T=0;计数器TH0、TL0原始初值为00H,且设为模式1(16位),GATE设为1;在/INT0=0时启动T0计数器(TR0=1);当/INT0=1时,定时器T0开始计数;当/INT0=0时计数停止,此时TH0、TL0中的计数值就是与脉冲宽度相对应得数据。,测试程序如下(仍用查询方式),ORG 0000H ljmp T0MIN ORG 0030h T0MIN:MOV TMOD,#09H;T0定时,模式1,GATE=l MOV TL0,#00H;T0从0000H开始计数 MOV

32、TH0,#00H MOV R0,#70H LOOP:JB P3.2,LOOP;等待P3.2变低 CLR EA CLR ET1 SETB TR0;P3.2变低,准备启动T0 LOOP1:JNB P3.2,LOOP1;等待P3.2变高,启动计数 LOOP2:JB P3.2,LOOP2;等待P3.2再次变低 CLR TR0;停止计数 MOV R0,TL0;存入计数值 INC R0 MOV R0,TH0:,这种方案的最大被测脉冲宽度为65535s(fosc=12MHz),由于靠软件启动和停止计数器,测量的数值有一定的误差,其最大误差与采用的指令有关。上述程序被测的脉冲宽度t的计算式为:t=12Nfos

33、c=N s 式中 N为定时器中的计数值,等于7lH 70H单元中的数值。,试编写由Pl.0输出一个周期为2分钟的方波信号的程序。已知fosc=12MHz。,解:此例要求P1.0输出的方波信号的周期较长,用一个定时器无法实现。解决的办法可采用定时器加软件计数的方法方法:将T1设置为定时器方式,定时时间为10ms(即10ms中断一次由CPU自动调用一次中断服务程序),工作于模式1;再利用T1的中断服务程序作为软件计数器;共同实现一分钟的定时。整个程序由两部分组成,即由主程序和T1的中断服务程序。其中主程序包括初始化程序和Pl.0输出操作程序,中断服务程序包括毫秒(ms)、秒(s)、分(min)的定

34、时等。编写T1的中断服务程序时,应首先将T1初始化,并安排好中断服务程序中所用到的内部RAM中地址单元。T1计数初值:X=216-1210100012=55536=D8FOH。中断服务程序所用到的地址单元安排如下:40H单元作ms的单元,计数值为1s10ms=100次;4lH单元作s的计数单元,计数值为1min1s=60次;29H单元的D7位(位地址为4FH)作1分计时到的标志位,即标志用4FH,具体程序如下,主程序:ORG 0000H AJMP 0030H ORG 001BH AJMP 1100H ORG 0030H MOV TMOD,#10H;T1定时,模式1 MOV TH1,#0D8H;

35、T1计数初值 MOV TL1,#0F0H SETB EA;CPU、T1开中断 SETB ET1 SETB TR1;启动T1 MOV 40H,#100;毫秒计数初值 MOV 41H,#60;秒计数初值 CLR 4FH TT:JNB 4FH,TT;等待1分钟到 CLR 4FH;清分标志值 CPL Pl.0;输出变反 AJMP TT;反复循环,T1中断服务程序:(由001BH转来),ORG 1100H PUSH PSW MOV TH1,#0D8H;TI重赋初值 MOV TL1,#0F0H DJNZ 40H,TT1;1秒到否?MOV 40H,#100;1秒到,重赋秒的计数值 DJNZ 41H,TT1;

36、1分到否?MOV 4lH,#60;1分到了,重赋1分钟的计数值 SETB 4FH;置1分到标志位,告诉主程序。TTl:POP PSW RETI;中断返回,串行口与串行通信,串行通讯应用示意图,TXDRXD,RXDTXD,TXDRXD,RXDTXD,RS-232或485,RS-232或485,TXDRXD,RS-232,PC机COM1,COM2,单片机甲、乙之间近距离通讯,单片机甲乙两地之间远距离通讯,单片机与PC机之间的数据通讯,串行通信的基本特征是数据逐位顺序进行传送串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平等)不同,形成了多种串行通信的协议与接口标准。常见的有:通用

37、异步收发器(UART)本课程介绍的串口通用串行总线(USB)I2C总线CAN总线SPI总线RS-485,RS-232C,RS422A标准等等,串行通信,全双工串行接口(UART),数据通信的几个术语:并行:数据各位同时进行传送 串行:数据逐位顺序进行传送,全双工:(串行通信)收/发可同时进行 半双工:(串行通信)收/发不可同时进行,异步串行通信:以字符为单位进行传送 同步串行通信:以数据块为单位进行传送 波特率(bps.):单位时间传送的位数,51单片机的串行接口,SBUF(发),SBUF(收),发送控制器 TI,接收控制器 RI,移位寄存器,波特率发生器T1,1,A累加器,(门),RxD,T

38、xD,去申请中断,引脚,引脚,CPU内部,串行口的结构,两个同名的接收/发送缓冲寄存器SBUF 指令 MOV SBUF,A 启动一次数据发送,可向SBUF 再发送下一个数 指令 MOV A,SBUF 完成一次数据接收,SBUF可再 接收下一个数,接收/发送数据,无论是否采用中断方式 工作,每接收/发送一个数据都必须用指 令对 RI/TI 清0,以备下一次收/发。,串行口相关的SFR(SCON,PCON),SM0 SM1 SM2 REN TB8 RB8 TI R1,SCON,SM0,SM1:串行口4种工作方式的选择位。0 0 方式0:8位移位寄存器I/O,波特率固定为 fosc/12 0 1 方

39、式1:8位UART(1+8+1位),波特率可变,按公式计算 1 0 方式2:9位UART(1+8+1+1位),波特率固定=fosc x1/32或1/64 1 1 方式3:9位UART(1+8+1+1位),波特率可变,按公式计算,SM2:串行口多机通信控制位(作为方式2、方式3的附加控制位),串行口控制寄存器SCON(98H),RI,TI:串行口收/发数据申请中断标志位 1 申请中断;0 不申请中断,TB8:方式2、3中,是要发送的第9位数据。多机通信中,TB8=0 表示发送的是数据;TB8=1 表示发送的是地址。(奇偶校验),RB8:在方式2、3中,是收到的第9位数据。在多机通信中,用作区别地

40、址帧/数据帧的 标志。(奇偶校验),SM0 SM1 SM2 REN TB8 RB8 TI RI,REN:串行口接收允许控制位=1 表示允许接收;=0 禁止接收。,SCON,SMOD GF1 GF0 PD 1DL,电源控制寄存器 PCON(97H)P.123特殊功能寄存器PCON不能按位寻址,SMOD:在串行口工作方式 1、2、3 中,是波特率加倍位=1 时,波特率加倍=0 时,波特率不加倍。(在PCON中只有这一个位与串口有关),GF1,GF0:用户可自行定义使用的通用标志位,PCON,PD:掉电方式控制位=0:常规工作方式。=1:进入掉电方式:振荡器停振 片内RAM和SRF的值保持不变 P0

41、P3口维持原状。程序停止 只有复位能使之退出掉电方式。,SMOD GF1 GF0 PD IDL,PCON,IDL:待机方式(空闲方式)控制位=0:常规工作方式。=1:进入待机方式:振荡器继续振荡 中断、定时器、串口功能继续有效 片内RAM和SRF保持不变 CPU状态保持、P0P3口维持原状 程序停顿。中断和复位能退出待机,继续后面的程序。,SMOD GF1 GF0 PD 1DL,PCON,PD:掉电控制位=0:常规方式。=1:掉电方式:振荡器停振片内RAM和SRF不变P0P3口维持原状程序停止只有复位能退出掉电,IDL:待机控制位=0:常规方式。=1:待机方式:振荡器继续振荡中断,定时器,串口

42、有效片内RAM和SRF不变CPU状态,P0P3维持原状程序停顿。中断和复位能退出待机,继续后面的程序。,SMOD GF1 GF0 PD 1DL,PCON,串行口工作方式 0,工作方式0:8位移位寄存器I/O方式,发送:SBUF中的串行数据由RxD逐位移出;TxD输出移位时钟,频率=fosc1/12;每送出8位数据 TI就自动置1;需要用软件清零 TI。,接收:串行数据由RxD逐位移入SBUF中;TxD输出移位时钟,频率=fosc1/12;每接收 8位数据RI就自动置1;需要用软件清零 RI。,经常配合“串入并出”“并入串出”移位 寄存器一起使用扩展接口(第五章)。,方式0工作时,多用查询方式编

43、程:发送:MOV SBUF,A 接收:JNB RI,$JNB TI,$CLR RI CLR TI MOV A,SBUF,工作方式0:8位移位寄存器I/O方式(续),复位时,SCON 已经被清零,缺省值:方式0。,接收前,务必先置位 REN=1 允许接收数据。,串行口方式0的扩展应用经常用到,串行口常用工作方式0扩展出并行I/O口,工作方式1、2、3则常用于串行通信,AB,CLK,h g f e d c b a,CLR,AB,CLK,CLR,AB,CLK,CLR,+5V,74LS164,74LS164,74LS164,74LS164是串入并出芯片;74LS165是并入串出芯片,h g f e d

44、 c b a,h g f e d c b a,+5V,共阳LED 数码管,VCC,TxD,RxD,51单片机,共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,共阳LED数码管公共端(字位)接高电平,笔划(字段)置为低电平就被点亮了,h g f e d c b a,累加器 A,1 1 0 0 0 0 0 0,0C0H=“0”,比如要显示“0”须令a b c d e f 为“0”电平,g h为“1”电平。,再比如要显示“3”须令a b c d g 为“0”电平,e f h为“1”电平。,1 0 1 1 0 0 0 0,0B0H=“3”,例:利用串行口工作方式0扩展出8位并行

45、I/O口,驱动共阳LED数码管显示09。,AB,CLK,h g f e d c b a,CLR,+5V,VCC,TxD,RxD,51单片机,74LS164,共阳LED数码管,根据上图编写的通过串行口和74LS164 驱动共阳LED数码管(查表)显示0-9数字的子程序:DSPLY:MOV DPTR,#TABLE MOVC A,A+DPTR MOV SBUF,A JNB TI,$CLR TI RETTABLE:DB 0C0H,0F9H,0A4H DB 0B0H,99H,92H DB 82H,0F8H,80H,90H,h g f e d c b a,累加器 A,1 1 0 0 0 0 0 0,0C0

46、H=“0”,1 0 1 1 0 0 0 0,0B0H=“3”,共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,常用于串行通讯。除发/收8位数据外,还 在D0位前有一个起始位“0”;在D7位后有一个停止位“1”。,方式1工作时:发送端自动添加一个起始位和一个停止位;接收端自动去掉一个起始位和一个停止位。,工作方式1:8位UART(1+8+1位)波特率可变,波特率可变 用定时器T1作波特率发生器:公式:波特率=(2SMOD/32)T1的溢出率,波特率=(2SMOD/32)T1的溢出率,溢出率:T1溢出的频繁程度 即:T1溢出一次所需时间的倒数。,初值 X=2n-,2SMOD

47、 fosc32 波特率 12,波特率=,2SMOD fosc32 12(2n-X),其中:X 是定时器初值,初值 X=2n-,2SMOD fosc32 波特率 12,例 题目要求用T1工作于方式2来产生波特率1200,已知晶振频率=6MHz。要求出T1的初值:,初值 X=28-,20 610632 1200 12,=256-=256-13.02,6106460800,243=0F3H 结果后面要用到,表格有多种,晶振也不止一种,常用波特率和T1初值查表,RxD引脚为接收端,TxD引脚为发送端,由波特率 发生器T1控制发送速度,不同于方式0:收/发都 需要由TxD送出移位时钟。,T1作波特率发生

48、器时初始化包括:选定时器工作方式2(TMOD选8位自动重装);将计算(或查表)出的初值X赋给TH1,TL1;启动T1(SETB TR1);对T1不要开中断!,工作方式1的接收/发送,串行口的初始化包括:对SCON选工作方式 对PCON设波特率加倍位“SMOD”(缺省值=0)如果是接收数据,仍要先置“1”REN位,SM0 SM1 SM2 REN TB8 RB8 TI RI,SCON,SM0,SM1:串行口工作方式选择位。0 1:方式1,8位UART(1+8+1位),REN:串行口接收允许位。REN=1 允许接收,串行口控制寄存器SCON,0 1 0 1 0 0 0 0,TB8,RB8,TI,RI

49、等位由运行中间的情况 决定,可先写成“0”,SM2:串行口多机通信控制位,作为方式2、3 的附加控制位,此处不用,可写成“0”,MAIN:ORG 0023H MOV TMOD,#20H SBR1:JNB RI,SEND MOV TL1,#0F3H LCALL SIN MOV TH1,#0F3H SJMP NEXT SETB TR1 SEND:LCALL SOUT MOV SCON,#50H NEXT:RETI SETB EA SIN:SETB ES RET LCALL SOUT SOUT:SJMP$RET,例:串行通信方式1应用 用T1工作于方式2,产生波特率1200bps,发送子程序 接收子

50、程序SOUT:SIN:MOV A,R0 MOV A,SBUF MOV C,P MOV C,P CPL C JNC ERR MOV ACC.7,C ANL A,#7FH INC R0 MOV R1,A MOV SBUF,A INC R1 CLR TI CLR RI RET RET,例(续),删除,删除,由于波特率固定,常用于单片机间通讯。数据由8+1位组成,通常附加的一位(TB8/RB8)用于“奇偶校验”。,工作方式2:9位UART(1+8+1+1位)两种波特率,方式2的波特率=fosc 2SMOD/64 即:fosc 1/32 或 fosc 1/64 两种,奇偶校验是检验串行通信双方传输的数据

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号