单片机讲稿2.docx
- 文档编号:15546357
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:37
- 大小:584.90KB
单片机讲稿2.docx
《单片机讲稿2.docx》由会员分享,可在线阅读,更多相关《单片机讲稿2.docx(37页珍藏版)》请在冰点文库上搜索。
单片机讲稿2
第2章中断系统定时/计数器与串行通信
计算机对外部事件的实时处理是利用中断,系统来实现的.51CPU片内集成了中断部件.并提供二级中断的优先级处理.
2.1中断系统结构及管理
基本的8051支持5个中断源,两个外部中断,两个定时/计数器中断,一个串行口输入/输出中断,中断发生后处理器转到将五个中断入口处之一执行中断处理.程序中断向量位于代码段的最低地址.除串行口输入输出中断共用一个中断,向量中断服务程序必须在中断入口处或通过跳转分支转移到别处.
2.1.1中断系统的结构
1.外部中断源
由P3.2端口线引入,低电平或下降沿引起。
由P3.3端口线引入,低电平或下降沿引起。
2.内部中断源
T0:
定时/计数器0中断,由T0回零溢出引起。
T1:
定时/计数器1中断,由T1回零溢出引起。
TI/RI:
串行I/O中断,完成一帧字符发送/接收引起。
中断入口地址
8051的中断系统的结构如图所示.
2.1.2中断控制
1.中断允许寄存器IE(A8H)
通过设置中断使能寄存器IE的EA位,使能所有中断每个中断源都有单独的使能位,IE在特殊功能寄存器中,字节地址A8H,位地址分别是A8H~AFH。
IE控制CPU对中断源总的开放或禁止以及每个中断源是否允许中断。
其格式如图
2.中断优先寄存器IP(B8H)
8051支持两个中断优先级有标准的中断机制。
低优先级的中断只能被高优先级的中断所中断,而高优先级的中断不能被中断。
每个中断源都可通过设置中断优先级寄存器IP来单独设置中断优先级。
如果每个中断源的相应位被置位则该中断源的优先级为高,如果相应的位被复位则该中断源的优先级为低。
IP寄存器的各位此寄存器可位寻址,IP在特殊功能寄存器中,字节地址为B8H,位地址分别是B8H~BFH,IP用来锁存各中断源优先级的控制位。
如IP=00010011时,优先顺序为:
外部中断0,定时中断0,串口中断,外部中断1,定时中断1。
判定原则:
先区分优先级的高低,同级中断是的响应顺序为:
外部中断0,定时中断0,外部中断1,定时中断1,串口中断
2.1.3中断响应过程
单片机在每个机器周期的S5P2期间,顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为1,将在再下一个机器周期S1期间按优先级进行中断处理。
中断得到响应后自动清除中断标志,由硬件将程序计数器PC内容压入堆栈保护,然后将对应的中断矢量装入程序计数器PC,使程序转向中断矢量地址单元中去执行相应的中断服务程序。
下列任何一种情况存在中断申请将被封锁:
(1)CPU正在执行一个同级或高一级的中断服务程序。
(2)当前正在执行的那条指令还未执行完。
(3)当前正在执行的指令是RETI或对IE,IP寄存器进行读/写指令,执行这些指令后至少再执行一条指令才会响应中断。
中断延迟
2.1.4外部中断
8051支持两个外部中断信号,外部器件能请求中断,得到相应的服务。
外部中断由外部中断引脚外部中断0为P3.2外部(中断1为P3.3)电平为低或电平由高到低跳变引起。
电平触发还是跳变触发取决于寄存器TCON的ITX位。
电平触发时,当CPU检测到中断引脚电平为低时将产生中断低电平应至少保持一个指令周期或12个时钟周期,因为处理器每个指令周期检测一次引脚。
跳变触发时当在连续的两个周期中检测到由高到低的电平跳变时将产生中断而电平的0状态应至少保持一个周期。
1、外部中断寄存器TCON
IE1:
外部中断1(INT1,P3.3)请求源标志,IE1=1请求中断。
当IE1=1时,外部中断1向CPU请求中断,CPU相应中断后,由硬件清0IE1。
IE0:
外部中断0(INT0,P3.2)请求源标志,
IT1:
外部中断源1触发方式控制位。
IT1=0时为电平触发方式,当P3.3脚输出为低电平时,IE1=1,当P3.3脚输出为高电平时,IE1=0。
IT1=1时为边沿触发方式,只有两个采样周期监测到负跳变时IE1=1。
IT0:
外部中断源0触发方式控制位。
同上
2、程序设计
例:
当外部按键每按1下,P1.0的小灯亮一秒。
方法1:
ORG0000H
LOP:
JNBP3.2,LOP
LOP1:
JBP3.2,LOP1
SETBP1.0
LCALLDELAY1S
CLRP1.0
SJMPLOP
方法2:
ORG0000H
SETBIT0
LOP:
JNBTF0,LOP
CLRTF0
SETBP1.0
LCALLDELAY1S
CLRP1.0
SJMPLOP
方法3
ORG0000H
LJMPMAIN
ORG0003H
SETBP1.0;
LCALLDELAY1S
CLRP1.0
RETI
MAIN:
SETBEA
SETBEX0
SETBIT0
SJMP$
方法3为标准的外部中断程序。
提问:
程序流程?
为何?
外部中断程序结构框架
ORG0000H
LJMPMAIN;转主程序
ORG0003H;入口地址
SETBP1.0;具体中断操作
LCALLDELAY1S
CLRP1.0
RETI;返回
MAIN:
SETBEA;外部中断的3个设定
SETBEX0
SETBIT0
。
。
。
。
;主程序设置
SJMP$;简化循环
例:
当外部按键每按1下,P1的小灯左移亮。
ORG0000H
LJMPMAIN
ORG0003H
RLA
MOVP1,A
RETI
MAIN:
SETBEA
SETBEX0
SETBIT0
MOVA,#0FEH
MOVP1,A
SJMP$
注意中断的保护,堆栈指针的设置
例:
当外部有意外操作下,30H的内容+1。
ORG0000H
LJMPMAIN
ORG0003H
PUSHACC
INC30H
POPACC
RETI
MAIN:
SETBEA
SETBEX0
SETBIT0
SJMP$
例:
当外部(P3.3)按键每按1下,P1.0的小灯闪3次。
作业:
1、当外部按键每按1下,把A的内容+1,并送P1口显示。
(硬件+软件)
2、中断报警器
3、多个外部中断申请的设计
其中DV0为最高中断,DV1,DV2,DV3,DV3为查询式中断。
ORG0000H
LJMPMAIN
ORG0003H
INC30H
RETI
ORG0013H
JNBP1.0,LOP1
JNBP1.1,LOP2
JNBP1.2,LOP3
JNBP1.3,LOP4
RETI
MAIN:
SETBEA
SETBEX0
SETBIT0
SETBEX1
SETBIT1
SJMP$
2.2定时/计数器结构特点及控制
2.2.1定时/计数器结构
定时/计数器简称定时器,8031单片机有2个16位的定时/计数器:
定时器0(T0)和定时器1(T1)。
它们都有定时器或事件计数的功能。
T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。
作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。
计数的最高频率一般为振荡频率的1/24。
当计数器计满时,产生中断标志,通知CPU处理。
2.2.2定时/计数器寄存器
定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON两个8位寄存器,设置各个定时器的操作模式和控制功能。
1.工作模式控制寄存器TMOD(89H)
2.定时器控制寄存器—TCON(88H)
TCON特殊功能寄存器用来控制定时器的工作起停和溢出标志位,通过改变定时器运行位TR0和TR1来启动和停止定时器的工作。
TCON中还包括了定时器T0和T1的溢出中断标志位,当定时器溢出时相应的标志位被置位,当程序检测到标志位从0到1的跳变时,如果中断是使能的将产生一个中断。
注意中断标志位可在任何时候置位和清除,因此可通过软件产生和阻止定时器中断。
2.2.3定时/计数器工作方式
每个定时/计数器还有4种工作模式,也就是每个定时器可构成4种电路结构模式。
在模式0、1和2,T0和T1的工作模式相同,在模式3,两个定时器的模式不同。
1定时器工作方式0
定时器通过软件控制为十三位定时/计数器方式定时器溢出时置位TF0或TF1并产生中断,参与计数的是TL的低5位TH的高8位。
计数位数8+5=13
计数范围0~8K
计时时间0~8MS(FSOC=12MHZ)
计数初值计算A=(8K-计数值)=1E06H
例:
在P1.0输出1MS的方波
ORG0000H
LJMPMAIN
ORG000BH
CPLP1.0
MOVTH0,#78H
MOVTL0,#06H
RETI
MAIN:
SETBEA
SETBET0
MOVTMOD,#00H
MOVTH0,#78H
MOVTL0,#06H
SETBTR0
SJMP$
2定时器工作1
定时器通过软件控制为十六位定时/计数器方式,定时器溢出时置位TF0或TF1并产生中断
计数位数8+8=16
计数范围0~64K
计时时间0~64MS(FSOC=12MHZ)
计数初值计算A=(64K-计数值)
例:
在P1.0输出1MS的方波
ORG0000H
LJMPMAIN
ORG000BH
CPLPI.0
MOVTL0,#
MOVTH0,#
RETI
MAIN:
MOVTMOD,#01H
MOVTL0,#
MOVTH0,#
SETBEA
SETBET0
SETBTR0
SJMP$
3定时器工作方式2
方式2为8位自动重装工作方式定时器的低8位TL0或TL1用来计数高8位TH0或TH1用来存放重装数值当定时器溢出时TH中的数值被装入TL中定时器0和定时器1在方式2时是同样的定时器1常用此方式来产生波特率
计数位数8
计数范围0~256
计时时间0~250US(FSOC=12MHZ)
计数初值计算A=(256-计数值)
例:
在P1.0输出250uS的方波
ORG0000H
LJMPMAIN
ORG000BH
CPLP1.0
RETI
MAIN:
SETBEA
SETBET0
MOVTMOD,#02H
MOVTH0,#06H
MOVTL0,#06H
SETBTR0
SJMP$
4定时器工作方式3
方式3时,定时器0成为两个8位定时/计数器TH0和TL0,TH0对应于TMOD中定时器0的控制位,而TL0占据了TMOD中,定时器1的控制位,这样定时器1将不能产生溢出中断了,但可用于其它不需产生中断的场合,如作为波特率发生器或作为定时计数器,被软件查询。
当系统需要用定时器1来产生波特率,又同时需要两个定时/计数器时,这种工作方式十分有用。
当定时器1设置为工作方式3时将停止工作。
2.2.4定时/计数器常数的计算
1.计数器初值的计算
把计数器计满为零所需要的计数值设定为C,计数初值设定为TC,由此可得到公式:
TC=M-C
式中,M为计数器模值,该值和计数器工作方式有关。
在方式0时M为213;在方式1时M为216;在方式2和方式3时M为28。
2.定时器初值的计算
在定时器模式下,计数器由单片机主脉冲经12分频后计数。
因此,定时器定时时间T的公式:
T=(M-TC)T计数
上式也可写成:
TC=M-T/T计数
式中,M为模值,和定时器的工作方式有关;T计数是单片机振荡周期TCLK的12倍;TC为定时器的定时初值。
2.2.5定时/计数器及中断系统综合应用
【例】设MCS-51单片机系统时钟频率ФCLK为6MHZ,请编出利用定时/计数器T0在P1.0引脚上产生周期为2秒,占空比为50%的方波信号的程序
主程序
任务:
1)T0工作方式的设定:
选择方式1(16位方式)(最大定时131ms)
2)定时常数的设定:
TC=216-100ms/2μs=15536=3CB0H
即:
TH0应装3CH,TL0应装B0H。
3)中断管理:
允许T0中断,开放总中断
即:
IE应装10000010B。
4)启动定时器T0:
SETBTR0
5)设置软件计数器初值:
(如使用R7)
即R7应装0AH
6)动态停机:
SJMP$
主程序如下:
MAIN:
MOVTMOD,#01H;设定T0为方式1
MOVTH0,#3CH;装入定时常数高8位
MOVTL0,#0B0H;装入定时常数低8位
MOVIE,#82H;开放T0中断
SETBTR0;启动T0
MOVR7,#0AH;设置软件计数器
SJMP$
(2)中断服务程序
任务:
1)恢复T0常数;
2)软件计数器减1;
3)判断软件计数器是否为0。
为0时,改变P1.0状态,并恢复软件计数器初值;不为0时中断返回。
程序如下:
TOINT:
MOVTL0,#0B0H;恢复定时常数
MOVTH0,#3CH;
DJNZR7,NEXT
CPLP1.0
MOVR7,#0AH
NEXT:
RETI
完整程序如下:
ORG0000H
AJMPMAIN
ORG000BH
AJMPTOINT
ORG0030H
MAIN:
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVIE,#82H
SETBTR0
MOVR7,#0AH
SJMP$
TOINT:
MOVTL0,#0B0H
MOVTH0,#3CH
DJNZR7,NEXT
CPLP1.0
MOVR7,#0AH
NEXT:
RETIEND
其他应用:
⏹门控位使用:
计算某一高电平的持续时间
⏹定时1秒中断程序。
⏹(30h,秒),(31h分),(32h时),计算机1秒后对时钟处理。
⏹综合应用定时和计数的程序,计数应用
例:
音乐的应用
1、音频产生的原理
如:
1F=523
T=1/523=1923US;
T/2=956US(956)
2、音长产生的原理
设:
1拍=0.4秒;1/4拍=0.1秒,1/8拍=0.05秒,最小时间单位,
通过延时达到节拍
3、表格编码
音频计数表
音乐编码表(音符+节拍)
4、设计过程
查音乐编码表,确定延时时间及音频,修改计数器,发音.
延时时间结束,查下一组编码,继续操作.直到下结束.
例:
电子钟设计
30H,31H,32H存放秒、时、分
78H-7FH存放显示区。
主程序
MAIN:
MOVTMOD,#01H;设定T0为方式1
MOVTH0,#3CH;装入定时常数高8位
MOVTL0,#0B0H;装入定时常数低8位
MOVIE,#82H;开放T0中断
SETBTR0;启动T0
MOVR7,#0AH;设置软件计数器
MOV30H,#00H;50
MOV31H,#00H;59
MOV32H,#00H;23
;SJMP$
SS:
LCALLDIR
;键盘处理
SJMPSS
定时一秒中断程序
TOINT:
PUSHA
MOVTL0,#0B0H;恢复定时常数
MOVTH0,#3CH;
DJNZR7,NEXT
INC30H
MOVR7,#0AH;对秒调整
MOVA,30H
CJNEA,#60,NEXT
INC31H
MOV30H,#00H;对分调整
MOVA,31H
CJNEA,#60,NEXT
INC32H
MOV31H,#00H;对时调整
MOVA,32H
CJNEA,#24,NEXT
MOV31H,#00H
MOV32H,#00H;对24时调整
NEXT:
LCALLBCD
POPA
RETI
BCD码转化程序
BCD:
MOVR0,#30H
MOVR1,#78H
MOVR2,#03H
LOP:
Mova,@R0
Movb,0ah
DivAB
MOV@R1,B
INCR1
MOV@R1,A
INCR1
INCR0
DJNZR2,LOP
RET
把显存的内容送LED显示.(78h,79h—7dh).
DIR:
MOVR0,#78H
MOVR6,#06H
MOVR5,#0FEH
LOP:
MOVA,@R0
ADDA,#
MOVCA,A+PC
MOVP0,A
MOVA,R5
MOVP2,A
RLA
MOVR5,A
LCALLD1MS
INCR0
DJNZR6,LOP
RET
DB3FH,06H,
2.3串行通信及其接口
2.3.1概述
串行通信是将数据的各位一位一位地依次传送。
适合于计算机之间、计算机与外部设备之间的远距离通信。
2.3.2MCS-51的串行口
2.3.2.1串行口的结构
8051有一个可通过软件控制的内置全双工串行通讯接口由寄存器SCON来进行设置可选择通讯模式允许接收检查状态位。
1.串行口控制寄存器SCON
该寄存器的字节地址为98H,可位寻址。
SCON格式如图所示。
SM0串行模式选择
SM1串行模式选择
SM2多机通讯允许位当模式0时此位应该为0模式1时当接收到停止位时
该位将置位模式2或模式3时当接收的第9位数据为1时将置位
REN串行接收允许位
TB8在模式2和模式3中将被发送数据的第9位
RB8在模式0中该位不起作用在模式1中该位为接收数据的停止位在模
式2和模式3中为接收数据的第9位
TI串行中断标志位由软件清零
RI接收中断标志位有软件清零
UART有一个接收数据缓冲区,当上一个字节还没被处理,下一个数据仍然可以缓冲区接收进来,但如果接收完这个字节,如果上个字节还没被处理,上个字节将被覆盖。
因此软件必须在此之前处理数据,当连续发送字节时也是如此。
8051支持10位和11位数据模式,11数据模式用来进行多机通讯并支持高速8位移位寄存器模式模式1和模式3中波特率可变。
2.特殊功能寄存器PCON
字节地址为87H,没有位寻址功能。
PCON的格式如图所示,其中与串行接口有关的只有D7位。
SMOD=1时,波特率加倍。
3SBUF串行口收/发寄存器
SBUF是串行口收/发寄存器,有两个同名寄存器,一个输入,一个输出。
当CPU执行MOVSBUF,A;数据发送
MOVA,SBUF;数据接受
2.3.2.2串行口的工作方式
1.方式0
模式0时UART作为一个8位的移位寄存器,使用波特率为fosc/12,数据由RXD从低位开始收发,TXD用来发送同步移位脉冲,因此方式0不支持全双工这种方式,当向SBUF写入字节时开始发送数据,数据发送完毕时TI位将置位置位REN时,将开始接收数据接收完8位数据时RI位将置位.
例:
74LS164输出为全1的值。
MOVSCON,#00H
MOVSBUF,#0FFH
LOP:
JNBTI,LOP
CLRTI
SJMP$
2.方式1
模式1时传输的是10位1个起始位8个数据位1个停止位方式,可和包括PC机在内的很多器件进行通讯.这种方式中波特率是可调的而用来产生波特率的定时器的中断应该被禁止.PCON的SMOD位为1时可使波特率翻倍,TI和RI在发送和接收停止位的中间时刻,被置位这使软件可以响应中断并装入新的数据,数据处理时间取决于波特率和晶振频率
如果用定时器1来产生波特率,应通过下式来计算TH1的装入值.
TH1=256-K*OscFreq/384*BaudRate
K=1ifSMOD=0
K=2ifSMOD=1
8位异步通信接口。
波特率由T1控制可变。
1位起始位+8位数据位+1位停止位
数据由双向RXD输入、TXD输出
例:
由A机向B机A发送30H的内容,波特率为1200。
例:
由A机向B机A发送30H-39H的内容,波特率为1200,用累加和校验。
A机发送:
MOVSCON,#0D0H
MOVPCON,#00H
MOVTCON,#20H
MOVTL1,#0FAH
MOVTH1,#0FAH
SETBTR1
MOVR0,#30H
MOVR2,.#0AH
LOP1:
MOVSBUF,@R0
LOP:
JNBTI,LOP
CLRTI
INCR0
DJNZR2,LOP1
SJMP$
B机接收:
MOVSCON,#50H
MOVPCON,#00H
MOVTCON,#20H
MOVTL1,#0E6H
MOVTH1,#0E6H
SETBTR1
LOP:
JNBRI,LOP
CLRRI
MOV30H,SBUF
SJMP$
3.方式2
模式2的数据以11位方式发送,1位起始位,8位数据位,第九位,1位停止位.发送数据时,第九位为SCON中的TB8,接收数据的第九位保存在RB8中第九位,一般用来多机通信.仅在第九位为1时单片机才接收数据,多机通信用SCON的SM2来控制,当SM2置位时,仅当数据的第九位为1时才引发通讯中断,当SM2为0时只要接收完11位就产生一次中断,第九位可在多机通讯中避免不必要的中断,在传送地址和命令时第九位置位串行总线上的所有处理器都产生一个中断处理器.将决定是否继续接收下面的数据,如果继续接收,数据就清零SM2,否则SM2置位,以后的数据流将不会使他产生中断,SMOD=O时模式2的波特率为1/64OscSMOD=1时波特率为1/32Osc.因此使用模式2,当晶振频率为11.059M时将有高达345K的波特率,
9位异步通信接口。
波特率由1/64,1/32
1位起始位+9位数据位+1位停止位
数据由双向RXD输入、TXD输出
第9位由TB8接收,RB8发送
例:
由A机向B机发送30H的内容,波特率为1/64。
A机发送:
MOVSCON,#90H
MOVPCON,#00H
MOVA,30H
MOVC,P
MOVTB8,C
CPLTB8
MOVSBUF,30H
LOP:
JNBTI,LOP
CLRTI
SJMP$
B机接收:
MOVSCON,#90H
MOVPCON,#00H
LOP:
JNBRI,LOP
CLRRI
MOV30H,SBUF
MOVC,RB8
SJMP$
4.方式3
当SM0SM1=11时,串行口工作在方式3。
方式3为波特率可变的9位异步通信方式,除了波特率外,方式3和方式2相同。
方式3波特率=(2SMOD/32)×定时器T1的溢出率
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 讲稿