MCS单片机张淑清PPT课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1 定时器/计数器的结构
图4-1 定时器/计数器结构图
第1页/共26页
4.1.1 定时器/计数器方式控制寄存器 TMOD
TMOD用于控制定时器/汁数器的工作模式及工作方式,其字 节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用 于决定T1的工作方式。
第2页/共26页
1、M1和M0工作方式控制位 M0和M1为工作方式控制位,确定4种 工作方式,如表4-1所示。
;1
第23页/共26页
4.4.6 运行中读定时器/计数器的 值
• 在读取运行中的定时器/计数器时, 需要特别加以注意,否则读取的汁数值有 可能出错。
• 原因:不可能在同一时刻同时读取TLx 和THx的内容。比如,先读 TLx后读THx, 由于定时器在不断运行,读THx前,若恰 好产生TLx向THx进位的情形,则读得的 TLx值就完全不对了。同样,先读THx再读 TLx也可能出错。
25HZ的方波周期为40ms,可用定时器产生20ms的定 时,每隔20ms改变一次P1.0的电平,即可得25HZ的方波。
1. 确定计数初值 由于时钟频率为12MHZ,所以,机器周期为:12/fosc=1µs t=(216-T0初值) 机器周期
当t=20ms时,(216-T0初值) 110-6=20 10-3 解得:T0初值=45536=0B1E0H
TLx计数满产生溢出时,一方面置1溢出标志TFx;另一方面自动将THx中的 内容送至TLx ,使8位定时器/计数器从所装初值开始更新开始计数。
图4-4 定时器/计数器方式2结构框图
第10页/共26页
4.2.4 工作方式3 (M1 M0:11) 对定时器T0有效。将16位的计数器分为两个独立的8位计数器TH0和TL0。
第25页/共26页
谢谢您的观看!
第26页/共26页
0FCH赋给TH1, 18H同时赋给TL1。
第22页/共26页
• CLR EA
• CLR TR1
;1
• MOV A,#21H ; 1
• ADD A, TL1 ; 1
• MOV TLl, A ; 1
• MOV A, #0FCH; 1
• ADDC A, TH1 ; 1
• MOV TH1, A ; 1
• SETB EA
• GATE=1时,只有在INT0(或INT1)引脚为 高电平的情况下,且由软件使TR0(或TR1) 置1时,才能启动定时器T0(或T1)工作
第4页/共26页
4.1.2 定时器/计数器的控制寄存器TCON
• 控制寄存器TCON的位地址是88H,可以对它 进行位寻址。
• (1)启动:设定好了定时器/计数器的工作方式 后,通过设置控制寄存器TCON中的相应位来 启动。
4.2.2 工作方式1 (M1 M0:01) 定时器/计数器工作在方式0时,16位计数器,即THx作为高8位,TLx作为
低8位。
图4-3 定时器/计数器方式1结构框图
第9页/共26页
4.2.3 工作方式2 (M1 M0:10) 自动重装初值8位计数器。TLx作为8位计数器, THx用作常数寄存器。
LOOP: MOV TH0 , #0F0H;给定时器T0送初值 MOV TL0 , #0CH
LOOP1: JNB TF0 , $;$为当前指令指针地址 CLR TF0
CPL P1.0 SJMP LOOP
第16页/共26页
4.4.2 方式1的应用
【例4-2】 用定时器T0产生25HZ的方波。由P1.0输出此方波(设时钟频率为 12MHZ)。
第13页/共26页
4.4 定时器/计数器的编程和应用
使用定时器/计数器时必须计算计数初值。假 设T为定时时间,计数器位数为n,系统时钟 频率为fosc,计数初值为x,则它们满足下 列关系式:
第14页/共26页
4.4.1 方式0的应用
【例4-1】利用定时器T0产生1ms定时。由 P1.0输出占空比为1:1的周期为2ms的方波 信1号. 确。定(计设数时初钟值频率为6MHZ)。
当t= 500us时,(28-T1初值) 210-6=500 10-6
解得:T1初值=06H 06H赋给TL1, 06H同时赋给TH1。
第19页/共26页
2.设计程序
MOV TMOD , #20H;设定T1的工 作方式2
MOV TH1 , #06H;给定时器T1 送初值
MOV TL1 , #06H SETB TR1;启动T1工作 LOOP: JNB TF1 , $;$为当前指令指针地 址 CLR TF1 CPL P1.0 SJMP LOOP
定时器T1只能工作在方式0~2,并工作在不需中断的场合。
图4-5 定时器/计数器方式2结构框图
第11页/共26页
4.3 定时器/计数器对输入信号的要求
定时: 对机器周期(即12/ fosc )计数。精度取决于输入脉冲的周期,因此 当需要高分辨率的定时时,应尽量选用频率较高的晶振(MCS-51最高为 12MHz)。
由于时钟频率为6MHZ,所以,机器周期 为:12/fosc=2µs
t=(213-T0初值) 机器周期 当t=1ms时 , ( 213-T0 初值 ) 210-6=1
10-3 解得:T0初值=7692=1111000001100B
第15页/共26页
2. 设计程序 MOV TMOD , #00H;设定T0的工作方式 SETB TR0;启动T0工作
如:fosc=12MHz时,机器周期1微秒,计数脉冲周期间隔为1微秒,误差 为1微秒。
fosc=6MHz时,机器周期2微秒,计数脉冲周期间隔为2微秒,误差为 2微秒。
第12页/共26页
计数:由于确认一次下跳变要花两个机器周期的时间,因此外 部输入的计数脉冲的最高频率为振荡器频率的1/24。且高低电平至 少保持一个机器周期。 Tcy:一个机器周期
2. TF1:定时器T1溢出标志位。当定时器T1溢 出时,由硬件自动使TF1置1,并向CPU申 请中断。CPU响应中断后,自动对TF1清零。 TF1也可以用软件查询和清零。
3. TF0:定时器T0溢出标志位。功能与TF1相同。 4. TR0:定时器T0运行控制位。功能与TR1相同。
IE1:外部中断1请求标志位。 IT1:外部中断1触发方式控制位。 IE0:外部中断0请求标志位。 IT0:外部中断0触发方式控制位。
第20页/共26页
4.4.5 定时器/计数器溢出同步问题
定时器溢应和查询都是有延迟的,这种延迟 并非固定不变,而是取决于(1)其它它中断服 务是否在进行,或(2)取决于执行的指令占用 的时间等。 1.采用中断方式时,若定时器/数器溢出中断 是唯一的中断源,则延迟时间取决于后一个 因素,可能在3-8个机器周期内变化,相邻 两次溢出中断响应的间隔的变化不大,在大 多数场合可以忽略。 2. 采用查询方式,延迟时间取决于执行指令占 用的时间,变化不大,在大多数场合可以忽 略。
• (2)停止:要使定时器/计数器停止运行,也通 过设置TCON中的相应位来实现。
• (3)标志:当定时器/计数器计满溢出,或有外 部中断请求时,TCON能标明溢出和中断情况。
第5页/共26页
1. TR1:定时器T1运行控制位。可由软件置1 (或清零)来启动(或关闭)定时器T1, 使定时器T1开始计数。用指令SETB TR1 (或CLR TR1)使TR1置1(或清零)。
第21页/共26页
3. 但在一些对定时精度要求十分苛刻的场合,则应对此误差进行补偿。下
面介绍的补偿方法,可使相邻两次间隔误差不超过1个机器周期。 假设定时时间为1ms,fosc=12MHZ,方式1 则: t=(216-T1初值) 机器周期
(216-T1初值) 110-6=1 10-3 解得:T1初值=0FC18H
第6页/共26页
4.2 定时器/计数器的工作方式
4.2.1 工作方式0(M1 M0:00) 定时器/计数器工作在方式0时,16位计数
器只用了13位,即THx的高8位和TLx的低5 位,组成一个13位定时器/计数器。(x=0或 1)
第7页/共26页
图4-2 定时器/计数器方式0结构框图
C//T=0:定时器工作模式.对内部脉冲(fosc/12) 进行计。 fosc/12:机器周期。如: fosc=12MHz时,为1MHz C//T=1:计数器第工8页作/共2模6页式,对来自 Tx引脚的外部
第18页/共26页
4.4.3 方式2的应用
【例4-3】 用定时器T1产生500us的定时。由P1.0输出周期为
1ms的方波(设时钟频率为6MHZ)。
1ms的方波,可用定时器产生500us的定时,每隔500us改
变一次P1.0的电平。 1. 确定计数初值
由于时钟频率为6MHZ,所以,机器周期为:12/fosc=2µs t=(28-T1初值) 机器周期
第3页/共26页
2、C/T定时器/计数器方式选择位
• C/T=0,定时方式,对机器周期进行计数; C/T=1,计数方式,对外部信号进行计数,
外部信号接至T0(P3.4)或T1(P3.5)引脚。
3 、 G AT E 门 控 位
• GATE=0时,只要用软件使TR0(或TR1) 置1就能启动定时器T0(或T1);
第24页/共26页
解决方法: 先读THx再读TLx,再读THx,若两次读得的THx相同.则可确定读得
的内容是正确的。 下面是有关的子程序,读得的TH0和TL0分
别放置在R1和R0内。 RDTIME: MOV A, TH0 MOV R0, TL0 CJNE A, TH0, RDTIME MOV R1, A RET
高8位0B1H赋给TH0, 低8位0E0H赋给TL0。
第17页/共26页
2.设计程序 MOV TMOD , #01H;设定T0的工作方式1 SETB TR0;启动T0工作
LOOP: MOV TH0 , #0B1H;给定时器T0送初值 MOV TL0 , #0E0H
LOOP1: JNB TF0 , $;$为当前指令指针地址 CLR TF0 CPL P1.0 SJMP LOOP
图4-1 定时器/计数器结构图
第1页/共26页
4.1.1 定时器/计数器方式控制寄存器 TMOD
TMOD用于控制定时器/汁数器的工作模式及工作方式,其字 节地址为80H,格式如下。其中,低4位用于决定T0的工作方式,高4位用 于决定T1的工作方式。
第2页/共26页
1、M1和M0工作方式控制位 M0和M1为工作方式控制位,确定4种 工作方式,如表4-1所示。
;1
第23页/共26页
4.4.6 运行中读定时器/计数器的 值
• 在读取运行中的定时器/计数器时, 需要特别加以注意,否则读取的汁数值有 可能出错。
• 原因:不可能在同一时刻同时读取TLx 和THx的内容。比如,先读 TLx后读THx, 由于定时器在不断运行,读THx前,若恰 好产生TLx向THx进位的情形,则读得的 TLx值就完全不对了。同样,先读THx再读 TLx也可能出错。
25HZ的方波周期为40ms,可用定时器产生20ms的定 时,每隔20ms改变一次P1.0的电平,即可得25HZ的方波。
1. 确定计数初值 由于时钟频率为12MHZ,所以,机器周期为:12/fosc=1µs t=(216-T0初值) 机器周期
当t=20ms时,(216-T0初值) 110-6=20 10-3 解得:T0初值=45536=0B1E0H
TLx计数满产生溢出时,一方面置1溢出标志TFx;另一方面自动将THx中的 内容送至TLx ,使8位定时器/计数器从所装初值开始更新开始计数。
图4-4 定时器/计数器方式2结构框图
第10页/共26页
4.2.4 工作方式3 (M1 M0:11) 对定时器T0有效。将16位的计数器分为两个独立的8位计数器TH0和TL0。
第25页/共26页
谢谢您的观看!
第26页/共26页
0FCH赋给TH1, 18H同时赋给TL1。
第22页/共26页
• CLR EA
• CLR TR1
;1
• MOV A,#21H ; 1
• ADD A, TL1 ; 1
• MOV TLl, A ; 1
• MOV A, #0FCH; 1
• ADDC A, TH1 ; 1
• MOV TH1, A ; 1
• SETB EA
• GATE=1时,只有在INT0(或INT1)引脚为 高电平的情况下,且由软件使TR0(或TR1) 置1时,才能启动定时器T0(或T1)工作
第4页/共26页
4.1.2 定时器/计数器的控制寄存器TCON
• 控制寄存器TCON的位地址是88H,可以对它 进行位寻址。
• (1)启动:设定好了定时器/计数器的工作方式 后,通过设置控制寄存器TCON中的相应位来 启动。
4.2.2 工作方式1 (M1 M0:01) 定时器/计数器工作在方式0时,16位计数器,即THx作为高8位,TLx作为
低8位。
图4-3 定时器/计数器方式1结构框图
第9页/共26页
4.2.3 工作方式2 (M1 M0:10) 自动重装初值8位计数器。TLx作为8位计数器, THx用作常数寄存器。
LOOP: MOV TH0 , #0F0H;给定时器T0送初值 MOV TL0 , #0CH
LOOP1: JNB TF0 , $;$为当前指令指针地址 CLR TF0
CPL P1.0 SJMP LOOP
第16页/共26页
4.4.2 方式1的应用
【例4-2】 用定时器T0产生25HZ的方波。由P1.0输出此方波(设时钟频率为 12MHZ)。
第13页/共26页
4.4 定时器/计数器的编程和应用
使用定时器/计数器时必须计算计数初值。假 设T为定时时间,计数器位数为n,系统时钟 频率为fosc,计数初值为x,则它们满足下 列关系式:
第14页/共26页
4.4.1 方式0的应用
【例4-1】利用定时器T0产生1ms定时。由 P1.0输出占空比为1:1的周期为2ms的方波 信1号. 确。定(计设数时初钟值频率为6MHZ)。
当t= 500us时,(28-T1初值) 210-6=500 10-6
解得:T1初值=06H 06H赋给TL1, 06H同时赋给TH1。
第19页/共26页
2.设计程序
MOV TMOD , #20H;设定T1的工 作方式2
MOV TH1 , #06H;给定时器T1 送初值
MOV TL1 , #06H SETB TR1;启动T1工作 LOOP: JNB TF1 , $;$为当前指令指针地 址 CLR TF1 CPL P1.0 SJMP LOOP
定时器T1只能工作在方式0~2,并工作在不需中断的场合。
图4-5 定时器/计数器方式2结构框图
第11页/共26页
4.3 定时器/计数器对输入信号的要求
定时: 对机器周期(即12/ fosc )计数。精度取决于输入脉冲的周期,因此 当需要高分辨率的定时时,应尽量选用频率较高的晶振(MCS-51最高为 12MHz)。
由于时钟频率为6MHZ,所以,机器周期 为:12/fosc=2µs
t=(213-T0初值) 机器周期 当t=1ms时 , ( 213-T0 初值 ) 210-6=1
10-3 解得:T0初值=7692=1111000001100B
第15页/共26页
2. 设计程序 MOV TMOD , #00H;设定T0的工作方式 SETB TR0;启动T0工作
如:fosc=12MHz时,机器周期1微秒,计数脉冲周期间隔为1微秒,误差 为1微秒。
fosc=6MHz时,机器周期2微秒,计数脉冲周期间隔为2微秒,误差为 2微秒。
第12页/共26页
计数:由于确认一次下跳变要花两个机器周期的时间,因此外 部输入的计数脉冲的最高频率为振荡器频率的1/24。且高低电平至 少保持一个机器周期。 Tcy:一个机器周期
2. TF1:定时器T1溢出标志位。当定时器T1溢 出时,由硬件自动使TF1置1,并向CPU申 请中断。CPU响应中断后,自动对TF1清零。 TF1也可以用软件查询和清零。
3. TF0:定时器T0溢出标志位。功能与TF1相同。 4. TR0:定时器T0运行控制位。功能与TR1相同。
IE1:外部中断1请求标志位。 IT1:外部中断1触发方式控制位。 IE0:外部中断0请求标志位。 IT0:外部中断0触发方式控制位。
第20页/共26页
4.4.5 定时器/计数器溢出同步问题
定时器溢应和查询都是有延迟的,这种延迟 并非固定不变,而是取决于(1)其它它中断服 务是否在进行,或(2)取决于执行的指令占用 的时间等。 1.采用中断方式时,若定时器/数器溢出中断 是唯一的中断源,则延迟时间取决于后一个 因素,可能在3-8个机器周期内变化,相邻 两次溢出中断响应的间隔的变化不大,在大 多数场合可以忽略。 2. 采用查询方式,延迟时间取决于执行指令占 用的时间,变化不大,在大多数场合可以忽 略。
• (2)停止:要使定时器/计数器停止运行,也通 过设置TCON中的相应位来实现。
• (3)标志:当定时器/计数器计满溢出,或有外 部中断请求时,TCON能标明溢出和中断情况。
第5页/共26页
1. TR1:定时器T1运行控制位。可由软件置1 (或清零)来启动(或关闭)定时器T1, 使定时器T1开始计数。用指令SETB TR1 (或CLR TR1)使TR1置1(或清零)。
第21页/共26页
3. 但在一些对定时精度要求十分苛刻的场合,则应对此误差进行补偿。下
面介绍的补偿方法,可使相邻两次间隔误差不超过1个机器周期。 假设定时时间为1ms,fosc=12MHZ,方式1 则: t=(216-T1初值) 机器周期
(216-T1初值) 110-6=1 10-3 解得:T1初值=0FC18H
第6页/共26页
4.2 定时器/计数器的工作方式
4.2.1 工作方式0(M1 M0:00) 定时器/计数器工作在方式0时,16位计数
器只用了13位,即THx的高8位和TLx的低5 位,组成一个13位定时器/计数器。(x=0或 1)
第7页/共26页
图4-2 定时器/计数器方式0结构框图
C//T=0:定时器工作模式.对内部脉冲(fosc/12) 进行计。 fosc/12:机器周期。如: fosc=12MHz时,为1MHz C//T=1:计数器第工8页作/共2模6页式,对来自 Tx引脚的外部
第18页/共26页
4.4.3 方式2的应用
【例4-3】 用定时器T1产生500us的定时。由P1.0输出周期为
1ms的方波(设时钟频率为6MHZ)。
1ms的方波,可用定时器产生500us的定时,每隔500us改
变一次P1.0的电平。 1. 确定计数初值
由于时钟频率为6MHZ,所以,机器周期为:12/fosc=2µs t=(28-T1初值) 机器周期
第3页/共26页
2、C/T定时器/计数器方式选择位
• C/T=0,定时方式,对机器周期进行计数; C/T=1,计数方式,对外部信号进行计数,
外部信号接至T0(P3.4)或T1(P3.5)引脚。
3 、 G AT E 门 控 位
• GATE=0时,只要用软件使TR0(或TR1) 置1就能启动定时器T0(或T1);
第24页/共26页
解决方法: 先读THx再读TLx,再读THx,若两次读得的THx相同.则可确定读得
的内容是正确的。 下面是有关的子程序,读得的TH0和TL0分
别放置在R1和R0内。 RDTIME: MOV A, TH0 MOV R0, TL0 CJNE A, TH0, RDTIME MOV R1, A RET
高8位0B1H赋给TH0, 低8位0E0H赋给TL0。
第17页/共26页
2.设计程序 MOV TMOD , #01H;设定T0的工作方式1 SETB TR0;启动T0工作
LOOP: MOV TH0 , #0B1H;给定时器T0送初值 MOV TL0 , #0E0H
LOOP1: JNB TF0 , $;$为当前指令指针地址 CLR TF0 CPL P1.0 SJMP LOOP