《北方工业大学单片机.ppt》由会员分享,可在线阅读,更多相关《北方工业大学单片机.ppt(69页珍藏版)》请在三一办公上搜索。
1、单元五 MCS-51单片机内部资源,5.1 任务九 单片机计数并显示,5.2 任务十 单片机流水灯控制,5.3 任务十一 两台单片机数据互传,返回主目录,学习目标:通过任务九的学习、完成,掌握单片机硬件资源定时计数器的使用。,5.1 任务九 单片机计数并显示,任务描述:单片机对按键次数(99次)进行计数,并在发光二极管上实时显示。,5.1.1 硬件电路与工作原理,1.硬件电路,2.工作原理,用手按动按键S3,每按键一次S3引脚上出现一个负脉冲,单片机计数一次,并实时将按键次数以BCD码方式,在发光二极管上面显示。,5.1.2 控制程序,1.主程序流程,2.控制程序,ORG0000HLJMPMA
2、INORG0030HMAIN:MOVTMOD,#06H;设定T0的工作方式MOVTH0,#00H;设定计数初值MOVTL0,#00H;SETBTR0;启动计数器MOVP1,TL0;送显示END,5.1.3 源程序的编辑、编译、下载,1.打开“伟福”模拟仿真软件进行程序的编辑、编译。1、正确选择单片机类型8751或8031 2、正确选择编译器伟福编译器 3、选择模拟仿真功能 4、打开或新建文件进行编辑 5、编译2.打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的AT89S51单片机芯片,观察程序运行结果。1、编译成功后打开下载软件 2、选择好单片机89S51并测试 3、打开伟福60
3、00编译生成的.BIN或.HEX文件 4、选择自动写完成擦除、写、读、校验过程 5、观看运行结果,5.1.4 相关知识,1.单片机是如何进行计数的?,本次任务中,单片机完成了对S3键按键次数的累计,那么,单片机是如何进行计数的?在单片机的内部结构中,我们知道在MCS-51的单片机内有两个16位可编程的定时/计数器,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。,T1由TH1、TL1构成,字节地址为8DH、8BH,T0由TH0、TL0构成,字节地址为8CH、8AH,TCON则用于控制定时计数器T0和T1的启动和停止计数,同时
4、管理定时器T0和T1的溢出标志等。,特殊功能寄存器TMOD控制定时计数器的工作方式,TMOD 89H,C/T=0 定时;C/T=1 对外计数。定时:fosc/12=1/(12/fosc)=1/T,计数:脉冲不等间隔。,波形等间隔,次数已定,时间确定即对机器周期进行计数。,左图定时时间为 N*T,每个下降沿计数一次 确认一次负跳变需两个机器周期,所以,计数频率最高为fosc/24。,TCON 88H,TF0、TF1 分别是定时、计数器T0、T1的溢出标志位。,(1)定时/计数器的工作方式,M1M0 工作模式选择位(编程可决定四种工作模式)0 0 13位定时/计数器 模式00 1 16位定时/计数
5、器 模式1 0 8 位定时/计数器(自动重装初值)模式21 1 T0 8位定时/计数 模式31 1 T1 停止工作 模式3,1)工作方式0,T0的等效逻辑结构,在计数工作方式下,计数器的计数值范围是:18192(2的13方)当为定时工作方式时,定时时间的计算公式为:(8192-计数初值)晶振周期12或(8192-计数初值)机器周期其时间单位与晶振周期或机器周期相同。如果单片机的晶振选为6.000MHz,则最小定时时间为:8192(81921)1/610-612=210-6(s)=2(us)最长定时时间为:(81920)1/610-612=1638410-6(s)=16384(us)。,2)工作
6、方式1,T0的等效逻辑结构,在工作方式1下,计数器的计数值范围是:165536(2的16方)当为定时工作方式1时,定时时间的计算公式为:(65536计数初值)晶振周期12或(65536计数初值)机器周期其时间单位与晶振周期或机器周期相同。如果单片机的晶振选为6.000MHz,则最小定时时间为:65536(655361)1/610-612=210-6(s)=2(us)最长定时时间为:(655360)1/610-612=13107210-6(s)=131072(us)。,3)工作方式2,T0的等效逻辑结构,方式2与方式0、1的区别:工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而
7、循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。工作方式2就具有自动重装载功能,即自动加载计数初值,所以也有的文献称之为自动重加载工作方式。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。方式2在串口通讯时,常用作波特率发生器。,4)工作方式3,如果定时/计数器0工作于工作方式3,那么定时/计数器1的工作方式就因为自己的一些控制位已被
8、定时/计数器0借用,只能工作在方式0、方式1或方式2下,等效电路参见下图:,2.怎样编制计数程序?,从前面的任务中,我们看到了,首先必须对定时计数器进行初始化,然后再开启定时或计数。简单的总结一下,定时计数器的初始化包括以下内容。,(1)确定工作方式对TMOD赋值;如:任务中的MOVTMOD,#06H指令,设定T0为计数器工作方式。(2)预置定时计数器中计数的初值直接写入TH和TL;如:任务中的MOV TH0,#00H 两条指令,设定计数初值。MOV TL0,#00H,(3)根据需要开放定时器/计数器的中断对IE位赋值;(4)启动定时器/计数器;如:任务中的SETB TR0 指令初值的计算方法
9、X=M-计数值M是定时器的最大计数值。视工作方式不同而不同。工作方式0:13位定时/计数方式,因此,最多可以计到2的13次方,也就是8192次。工作方式1:16位定时/计数方式,因此,最多可以计到2的16次方,也就是65536次。工作方式2和工作方式3:都是8位的定时/计数方式,因此,最多可以计到2的8次方,也说是256次。,预置值计算:用最大计数量减去需要的计数次数即可。通过上面的任务,我们掌握了计数程序的编制方法,下面我们再看看定时程序怎样编制。首先我们看一下下面的程序段。MOV TMOD,#01HMOV TL0,#00H MOV TH0,#4CH SETB TR0 以上程序是任务一中的定
10、时程序段,它的初始化过程和计数方式类似。,小结:,1.定时计数器的基本结构及其四种工作方式?,2.定时计数程序的编制方法?,实验实训项目8 定时器控制流水灯课题 项目9 计数器课题要求:课外完成编程、相关硬件安装、仿真与调试,思考与练习:5.3 5.5,5.2 任务十 单片机流水灯控制,学习目标:通过任务十的学习、完成,掌握单片机硬件资源中断系统的使用。,任务描述:单片机上电,单灯按1HZ频率循环,一旦按下P3.2所接的按键,发光二极管按双灯循环,松开此键,单灯继续原来的循环。,5.2.1 硬件电路与工作原理,1.硬件电路,2.工作原理,一旦按下P3.2所接按键后,P3.2口线上会出现这样两个
11、变化,第一,口线上出现由高到低的变化,即出现下降沿。第二,P3.2按住后口线保持低电平直到松键为止。单片机就是利用口线上的这种变化,实现上述各种状态的切换。,1.程序流程图,5.2.2 控制程序,2.控制程序,ORG 0000HLJMP MAINORG0003HLJMPINT_0ORG001BHLJMPDELAYMAIN:SETBIT0MOVTMOD,#01HMOVTL0,#00HMOVTH0,#4CHSETBPT0SETBEASETBEX0SETBET0,MOVB,#20SETBTR0MOVA,#0FEHBEGIN:MOVP1,ACJNEB,#00,$MOVB,#20RLASJMPBEGIN
12、INT_0:PUSH ACCMOVA,#0FBHLOOP:MOVP1,ACJNEB,#00,$MOVB,#20RLA,JNBP3.2,LOOPPOPACCRETIDELAY:MOVTL0,#00HMOV TH0,#4CHDJNZB,LOOP1LOOP1:RETIEND,5.2.3 源程序的编辑、编译、下载,1.打开“伟福”模拟仿真软件进行程序的编辑、编译。1、正确选择单片机类型8751或8031 2、正确选择编译器伟福编译器 3、选择模拟仿真功能 4、打开或新建文件进行编辑 5、编译2.打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的AT89S51单片机芯片,观察程序运行结果。1
13、、编译成功后打开下载软件 2、选择好单片机89S51并测试 3、打开伟福6000编译生成的.BIN或.HEX文件 4、选择自动写完成擦除、写、读、校验过程 5、观看运行结果,5.2.4 相关知识,1.单片机如何中断原来的工作?,在本任务中当按键S1按下后,原来单片机正在进行的工作被打断,按键松开后单片机又恢复了原来的工作,这就是我们在前面所说的中断。或者说,CPU正在执行原程序时,突然,被意外事情打断,转去执行新程序。CPU执行新程序结束后,又回到原程序中继续执行。这样的过程就叫中断。,(1)MCS-51的中断结构,5个中断源,两个中断优先级控制。,(2)中断处理流程,CPU响应中断请求后,就
14、立即转入执行中断服务程序。不同的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程一般都如下所述。,1)现场保护和现场恢复,2)中断打开和中断关闭,3)中断服务,4)中断返回,(3)MCS-51的中断源,8051有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。,TCON 88H,IE1:外部边沿触发中断1请求标志,其功能和操作类似于TF0。IT1:外部中断1类型控制位,通过软件设置或清除,用于控制外中断的触发信号类型。I
15、T1=1,边沿触发。IT=0是电平触发。IE0:外部边沿触发中断0请求标志,其功能和操作类似于IE1。IT0:外部中断0类型控制位,通过软件设置或清除,用于控制外中断的触发信号类型。其功能和操作类似于IE1。,必须注意:在不同外部中断触发方式下,标志清除方法不一样。,SCON 98H,TI:MCS-51串行口的发送中断标志。中断响应后,必须软件清除标志。,RI:MCS-51串行口的接收中断标志。中断响应后,必须软件清除标志。,(4)中断的控制,MCS-51的对中断的开放和屏蔽是由中断允许寄存器IE(A8H)控制来实现的,IE的结构格式如下。,EA:中断总控制位,EA=1,CPU开放中断。EA=
16、0,CPU禁止所有中断。ES:串行口中断控制位,ES=1允许串行口中断,ES=0,屏蔽串行口中断。ET1:定时/计数器T1中断控制位。ET1=1,允许T1中断,ET1=0,禁止T1中断。,EX1:外中断1中断控制位,EX1=1,允许外中断1中断,EX1=0,禁止外中断1中断。ET0:定时/计数器T0中断控制位。ET1=1,允许T0中断,ET1=0,禁止T0中断。EX0:外中断0中断控制位,EX1=1,允许外中断0中断,EX1=0,禁止外中断0中断。,MCS-51的中断系统有两个不可寻址的优先级状态触发器,一个指出CPU是否在执行高优先级中断服务程序,另一个指出CPU是否正在执行低优先级的中断服
17、务程序,这两个中断触发器的1状态分别屏蔽所有中断申请和同一级别的其他中断申请。此外,MCS-51还有一个申请优先级寄存IP,IP的格式如下,字节地址是B8H。,PS:串行口中断口优先级控制位,PS=1,串行口中断声明为高优先级中断,PS=0,串行口定义为低优先级中断。PT1:定时器1优先级控制位。PT1=1,声明定时器1为高优先级中断,PT1=0定义定时器1为低优先级中断。PX1:外中断1优先级控制位。PT1=1,声明外中断1为高优先级中断,PX1=0定义外中断1为低优先级中断。PT0:定时器0优先级控制位。PT1=1,声明定时器0为高优先级中断,PT1=0定义定时器0为低优先级中断。PX0:
18、外中断0优先级控制位。PT1=1,声明外中断0为高优先级中断,PX1=0定义外中断0为低优先级中断。,(5)中断的响应,MCS-51CPU在每一个机器周期顺序检查每一个中断源,在机器周期的S6按优先级处理所有被激活的中断请求,此时,如果CPU没有正在处理更高或相同优先级的中断,或者现在的机器周期不是所执行指令的最后一个机器周期,或者CPU不是正在执行RETI指令或访问IE和IP的指令(因为按MCS-51中断系统的特性规定,在执行完这些指令之后,还要在继续执行一条指令,才会响应中断),CPU在下一个机器周期响应激活了的最高级中断请求。,中断响应的主要内容就是由硬件自动生成一条长调用LCALL a
19、ddr16指令,这里的addr16就是程序存储器中相应的中断区入口地址,这些中断源的服务程序入口地址如下:,生成LCALL指令后,CPU紧跟着便执行之.首先将PC(程序计数器)的内容压入堆栈保护断点,然后把中断入口地址赋予PC,CPU便按新的PC地址(即中断服务程序入口地址)执行程序。,2.单片机中断程序怎样编制?,从上面的任务程序中,我们来体会以下中断服务程序的编制方法。(1)首先必须对中断系统进行初始化,包括:1)开中断,即设定IE寄存器。如上面程序中的 SETBEA;开总中断控制位 SETBEX0;开外部中断0 SETBET0;开定时器中断02)设定中断优先级,即设置IP寄存器。如上面程
20、序中的 SETBPT0;设定时器0中断为高优先级3)如果是外部中断,还必须设定中断响应方式,即设定IT0、IT1位。,如上面程序中的SETBIT0;设外部中断0为边沿触发方式4)如果是计数、定时中断必须先设定定时、计数的初始值。如上面程序中的MOV TL0,#00H MOV TH0,#4CH5)初始化结束后,对于定时、计数器而言,还应该记得启动定时或计数,即设定TR0、TR1位。串口接收中断,要记得允许接收位REN应该设置。如上面程序中的SETBTR0,(2)中断初始化结束后,就可以编制中断服务程序,编制中断服务程序时注意:1)中断服务程序,第一条指令必须安排在相应的中断入口地址,并且应该是转
21、移指令,由于中断响应时,已经由硬件执行了LCALL指令,中断程序断点地址已经入栈,所以不能再用子程序调用指令。如任务程序中的 ORG0003H;外部中断0入口地址 LJMPINT_0 ORG001BH;定时器T0中断入口地;址 LJMPDELAY,2)由于中断的产生是随机的,所以对程序中的公共单元(其他程序中已经使用,中断程序中也使用了的单元),必须在中断服务程序开始处,采用堆栈进行保护,即入栈。子程序返回前再出栈。如任务程序中的 PUSH ACC POP ACC 3)中断服务程序必须以RETI结束,因为RETI指令具 有两个功能:第一,将断点地址弹回PC指针,以保证能继续原来的程序,第二,能
22、将中断优先级状态触发器清零,以保证新的中断请求能够被相应。,小结:,1.MCS-51中断系统的结构及与中断有关的寄存器是什么?,2.怎样编制中断服务程序?,思考与练习:5.4 5.16,实验实训:项目10 中断方式实现流水灯控制 项目11 外部中断课题 项目12 按键使用课题要求:课外完成编程、相关硬件安装、仿真与调试,5.3 任务十一两台单片机数据互传,学习目标:通过任务十一的学习、完成,掌握单片机硬件资源串行通讯接口的使用,任务描述:两台单片机之间,要求将对方单片机的按键值(S1=1)通过串口传送给另外一方,并在发光二极管显示。,5.3.1 硬件电路与工作原理,1.硬件电路,2.工作原理,
23、单片机扫描到S1(P3.2)键合上后,即启动串行发送,将01H这个数发送给对方单片机,对方单片机收到数据后,再从P1口送出来显示。,5.3.2 控制程序,1.程序流程图,2.控制程序,;发送程序段ORG0000HLJMPMAINORG0030HMAIN:MOVSCON,#40H;串口初始化,设置工;作方式1MOVPCON,#80H;波特率加倍MOVTMOD,#20H;定时器1工作在方式2MOVTH1,#0FDH;设置波特率为9600SETBTR1LOOP:JBP3.2,$;判键是否合上?LCALL DELAY;延时10MS去抖JBP3.2,LOOPMOVSBUF,#01H;启动串行发送JNBT
24、I,$;判断是否发送完毕?,CLRTISJMP$DELAY:MOVR3,#100DEL:MOVR4,#50DJNZR4,$DJNZR3,DEL RETEND;接收程序段ORG0000HLJMPMAINORG0030HMAIN:MOVSCON,#40H;串口初始化,设置工;作方式1,MOVPCON,#80H;波特率加倍MOVTMOD,#20H;定时器1工作在方式2MOVTH1,#0FDH;设置波特率为9600 SETBTR1SETBREN;允许接收LOOP:JBRI,$;判键是否合上?CLRRI;延时10MS去抖MOVP1,SBUFSJMP$END,5.3.3 源程序的编辑、编译、下载,1.打开
25、“伟福”模拟仿真软件进行程序的编辑、编译。1、正确选择单片机类型8751或8031 2、正确选择编译器伟福编译器 3、选择模拟仿真功能 4、打开或新建文件进行编辑 5、编译2.打开“ISP下载软件”将目标文件下载到ISP-4实验开发板上的AT89S51单片机芯片,观察程序运行结果。1、编译成功后打开下载软件 2、选择好单片机89S51并测试 3、打开伟福6000编译生成的.BIN或.HEX文件 4、选择自动写完成擦除、写、读、校验过程 5、观看运行结果,5.3.4 相关知识,1.单片机如何能收、发数据?,MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个
26、在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,它们的地址为99H。这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。,(1)基本概念,【并行通信和串行通信】,并行通信:数据的各位同时送出。串行通信:数据的各位逐位送出。,1)数据通信的传输方式,【单工方式】数据仅按一个固定方向传送。,【半双工方式】数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。,【全双工方式】允许双方同时进行数据双向传送,但一般全双工传输方式的线路和设备较复杂。,2)串行数据通信两种形式,【异步
27、通信】在这种通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的,异步通信用一帧来表示一个字符,其内容如下:一个起始位,仅接着是若干个数据位。,【同步通信】发送器和接收器由同一个时钟源控制,同步传输方式去掉了起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。,这两种方式各有何优劣?,3)串行数据通信的传输速率,串行数据传输速率有两个概念,即每秒转送的位数bps(Bit per second)和每秒符号数波特率(Band rate),在具有调制解调器的通信中,波特率与调制速率有关。,举例:设有一帧信息,1个起始位、8个数据位、1个停止位,传输速率为每秒240个字符。求波特
28、率。解:(181)240=2400 b/s=2400波特。,(2)MCS-51的串行口和控制寄存器,1)串行口数据缓冲器SBUF,在物理结构上,有一个串行口接收缓冲器SBUF、一个发缓冲器SBUF,但这两个寄存器具有同一地址(99H)。,只允许写,只允许读,2)串行通信控制寄存器,3)电源管理寄存器PCON,字节地址87H,不可位寻址。它的D7位SMOD为串行口波特率控制位,可由软件置位或清零。若SMOD=1,则使工作在方式1、2、3时的波特率加倍。,4)中断允许寄存器IE,EA、ES位控制串口中断的开启。,2.单片机怎样通过程序控制收发数据?,串口程序的编制和定时、计数器以及中断程序编制一样
29、,首先也应该初始化。(1)先设定SCON,设定好串口工作方式如:任务程序中的 MOVSCON,#40H 设定串口工作方式一。(2)如果用到中断的,还必须设定IE或IP。如:任务中的接收程序可以改成:ORG0023H LJMPP_JSORG0030H,SETBEASETBESP_JS:CLRRIRETI(3)然后设定波特率,即根据工作方式设置定时计数器T1、以及PCON寄存器。如任务中的 MOVPCON,#80H;波特率加倍 MOVTMOD,#20H;定时器1工作在方;式2 MOVTH1,#0FDH;设置波特率为9600 值得注意的是,由于串行发送、接收标志不能硬件自动清除,所以,不管是中断方式还是查询方式编程时都必须用软件方式清除TI、RI。,小结:,1.串行口的四种工作方式各有何特点?,2.怎样编制串口通讯程序?,思考与练习:5.9 5.12,实验实训项目14 串口通讯课题要求:课外完成编程、相关硬件安装、仿真与调试,