第二讲任务6:定时器T3-中断方式
5.2定时器资料

5.2定时器指令定时器与计数器都是控制设备实现自动运行最基本的元件。
使用定时器与计数器指令可实现复杂的控制任务。
定时器指令用于计时。
S7-200系列PLC定时器有三种TON、TOF、 TONR。
5.2.1定时器基本概念1.定时器6要素(1)类型——TON、TONR、TOF三种(2)输入端——IN(3)设定值——PT(4)分辨率——1ms/10ms/100ms三种(5)当前值——Txx,如T37,运行过程中显示在定时器号的位置(6)状态位——Txx,如T37,运行过程中由触点显示其状态位的状态。
2.指令盒形式定时器指令的梯形图格式为指令盒形式,如图4.11。
1.IN—运行条件输入端,又称使能端;2.PT—为定时器的计时设定值或存放设定值的地址,数据类型为INT(整数);3.T37—为定时器的器件号(地址号),定时器编号为T0~T255;4.TON—定时器的种类。
5.实际计时的大小:定时值=设定值×分辨率(ms)。
3.定时器分辨率与最大设定值5.2.2通电延时定时器TON(On-Delay Timer)通电延时型定时器TON,通电时,延时接通。
具体工作原理如下:1.初始状态当前值=0,状态位=0。
2.输入端有效,开始计时。
当前值上升,状态位=0。
3.如果计时时间<设定值,输入端复位,则当前值上升到有效时间后归零,状态位=0。
(输入断电,状态位马上复位)。
4.计时时间>=设定值当前值连续计时,状态位=1。
(输入通电,状态位延时接通。
)5.2.3 断电延时定时器TOF(Off-Delay Timer)断电延时定时器TOF,断电时,延时断开。
具体工作原理如下:1.初始状态当前值=0,状态位=0。
2.输入端有效,当前值=0,状态位=1。
(输入有效,状态位马上有效)3.输入端断开,开始计时,当前值上升,状态位=1。
4.计时时间<设定值,输入端复位,当前值上升到有效时间后归零,状态位=1。
常用控制寄存器详解

P2IFG:D0~D4为P2_0~P2_4的中断标志位
D5为USD D+中断状态标志,当D+线有一个中断请求未决时设置该标志,用于检测USB挂起状态下的USB恢复事件。
当USB控制器没有挂起时不设
置该标志。
IEN2:中断使能2,0为中断禁止,1为中断使能
T1STAT:定时器1的状态寄存器,D4~D0为通道4~通道0的中断标志,D5为溢出标志位,当计数到最终技术值是自动置1。
T1CCTL0~T1CCTL4:定时器1通道0~通道4的工作方式设置。
D1D0为捕捉模式选择:00为不捕捉,01为上升沿捕获,10为下降沿捕获,11为上升或下降沿都捕获。
D2位为捕获或比较的选择,0为捕获模式,1为比较模式。
D5D4D3为比较模式的选择:000为发生比较式输出端置1,001为发生比较时输出端清0,010为比较时输出翻转,其他模式较少使用。
4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。
当D6为1时,系统主时钟最高可采用频率为16MHZ。
U0GCR:USART0通用控制寄存器;。
单片机定时器中断时间误差原因分析

单片机定时器中断时间误差原因分析在单片机定时器的应用过程中,在中断时间设置方面出现误差是工程师们最不愿见到的错误之一。
那么,都是哪些原因导致了单片机定时器的中断时间设置出现了误差呢?这些误差的的严重程度又是怎样的呢?在今天的文章中,我们将会针对这一问题展开总结和分析。
在单片机定时器的实际应用过程中,产生单片机定时器溢出中断与CPU响应中断的时间误差,通常来说有两个原因。
一个是定时器溢出中断信号时,CPU正在执行某指令。
而另一个原因就是定时器溢出中断信号时,CPU正在执行某中断服务程序。
下面我们将会就这两种造成误差的原因展开分别分析。
CPU正在执行某指令时的误差在单片机定时器的使用过程中,由于CPU正在执行某指令时所造成的误差,是导致中断时间设置出现误差的重要原因。
由于CPU正在执行某指令,因此它不能及时响应单片机定时器的溢出中断。
当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的最大值为执行该指令所需的时间。
由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。
如定时器溢出中断时,CPU正在执行指令MOVA,Rn,其最大误差为1个机器周期。
而执行指令MOVRn、direct时,其最大误差为2个机器周期。
当CPU正在执行乘法或除法指令时,最大时间误差可达4个机器周期。
在8051单片机指令系统中,多数指令的指令周期为1-2个机器周期,因此最大时间误差一般为1-2个机器周期。
若振荡器振荡频率为fosc。
而当CPU正在执行指令的机器周期数为Ci,则最大时间误差为Δtmax1=12/fosc乘以Ci(us)。
例如fosc=12MHZ,CPU正在执行乘法指令(Ci=4),此时的最大时间误差可通过公式计算为:。
单片机定时器中断时间误差的分析及补偿(精)

单片机定时器中断时间误差的分析及补偿作者冰晓日期 2009-1-8 8:09:00推荐摘要:本文分析了单片机定时器溢出中断与CPU响应中断的时间误差,并给出了补偿误差的方法和实例。
关键词:单片机; 定时器; 中断; 误差1前言单片机内部一般有若干个定时器。
如8051单片机内部有定时器0和定时器1。
在定时器计数溢出时,便向CPU发出中断请求。
当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。
这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。
为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。
2误差原因、大小及特点产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。
一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。
2.1.CPU正在执行某指令时的误差及大小由于CPU正在执行某指令,因此它不能及时响应定时器的溢出中断。
当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的最大值为执行该指令所需的时间。
由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。
如定时器溢出中断时,CPU正在执行指令MOVA,Rn,其最大误差为1个机器周期。
而执行指令MOVRn, direct时,其最大误差为2个机器周期。
当CPU正在执行乘法或除法指令时,最大时间误差可达4个机器周期。
在8051单片机指令系统中,多数指令的指令周期为1~2个机器周期,因此最大时间误差一般为1~2个机器周期。
若振荡器振荡频率为fosc,CPU正在执行指令的机器周期数为Ci,则最大时间误差为Δtmax1=12/fosc×Ci(us)。
例如fosc=12MHZ,CPU正在执行乘法指令(Ci=4),此时的最大时间误差为:Δtmax1=12/fosc×Ci=12/(12×106)×4=4×10-6(s)=4(μs)2.2CPU正在执行某中断服务的程序时的误差及大小定时器溢出中断信号时,若CPU正在执行同级或高优先级中断服务程序,则它仍需继续执行这些程序,不能及时响应定时器的溢出中断请求,其延迟时间由中断转移指令周期T1、中断服务程序执行时间T2、中断返回指令的指令周期T3及中断返回原断点后执行下一条指令周期T4(如乘法指令)组成。
微型计算机习题解答

第1章(略)第2章(略)第4章4. 1。
用下列芯片构成存储系统,各需要多少个RAM芯片?需要多少位地址作为片外地址译码?设系统为20位地址线,采用全译码方式.(1)512×4位RAM构成16KB的存储系统;(2)1024×1位RAM构成128KB的存储系统;(3)2K×4位RAM构成64KB的存储系统;(4)64K×1位RAM构成256KB的存储系统;解:1) 需要16KB/512×4=64片片外地址译码需11位地址线。
2) 需要128KB/1K×1=1024片片外地址译码需10位地址线。
3)需要64KB/2K×4=64片片外地址译码需9位地址线。
4) 需要256KB/64K×1位=32片片外地址译码需4位地址线。
4. 2. 现有一种存储芯片容量为512×4位,若要用它组成4KB的存储容量,需多少这样的存储芯片?每块芯片需多少寻址线?而4KB存储系统最少需多少寻址线?解:4KB/ 512×4b= 16,需要16片每片芯片需9条寻址线4KB存储系统最少需12条寻址线4. 3。
有-2732EPROM芯片的译码电路如图所示,请计算该芯片的地址范围及存储容量。
图习4-1解:2732的地址范围为11111111000000000000~11111111111111111111=FF000H~FFFFFH,存储容量为4KB。
4。
4。
某一存储器系统如图习4-2所示,回答它们的存储容量各是多少?RAM 和EPROM存储器地址分配范围各是多少?解:EPROM的地址范围为FD000H~FDFFFH,存储容量为4KB;RAM的地址范围为F9000H~F97FFH或F9800H~F9FFFH,存储容量为2KB.由于A11未参加译码,因而有地址重叠,一个内存单元有2个地址对应。
4. 5. 使用6116、2732和74LS138译码器构成一个存储容量为12KB ROM (00000H~02FFFH)、8KB RAM(03000H~04FFFH)的存储系统。
单片机原理及应用课后习题答案

单片机原理及应用课后习题答案课后思考题级习题答案思考题与习题1一、填空1.单片机按照用途通常分为 通用型 和 专用型 。
2.单片机也称为 微控制器 和 单片微型计算机 。
二、简答1.什么是单片机?答:单片机也称微控制器,它是将中央处理器、程序处理器、数据处理器、输入/输出接口、定时/计数器串行口、系统总线等集成在一个半导体芯片上的微计算机,因此又称为单片微型计算机,简称为单片机。
2.简述单片机的特点和应用领域。
答:(1)单片机体积小,应用系统结构简单,能满足很多应用领域对硬件功能的要求。
(2)单片机的可靠性高。
(3)单片机的指令系统简单,易学易用。
(4)单片机的发展迅速,特别是最近几年,单片机的内部结构越来越完善。
3.写出AT89S51与AT89S52芯片的主要区别。
内部程序存储区容量不同,52的程序存储空间为8K ,内部数据存储空间为256B ,中断源8个,定时器/计数器有3个,而51的程序存储空间为4K ,内部数据存储空间为128B ,中断源5个,定时器/计数器有2个。
思考题与习题2一、填空题1.如果(PSW )=10H, 则内部RAM 工作寄存器区的当前寄存器是第二 组寄存器,8个寄存器的单元地址为 10H ~ 17H 。
2.为寻址程序状态字F0位,可使用的地址和符号有 PSW.5 、 0D0H.5 、 F0 和 0D5H 。
3.单片机复位后,(SP )= 07H ,P0~P3= FFH ,PC= 0000H ,PSW= 00H A= 00H 。
4.AT89S51单片机的程序存储器的寻址范围是由 PC 决定的,由于AT89S51单片机的PC 是 16 位的,所以最大寻址范围为 64KB 。
5.写出位地址为20H 所在的位,字节地址 24H.0 。
6.写出字节地址为20H 的单元最高位的位地址为 07H ,最低位的位地址为 00H 。
7.如果晶振频率MHz 6OSC f ,则一个时钟周期为1.66667E-7,一个机器周期为2us 。
单片机应用技术(C语言版)习题参考答案
⑴将 m 中的数据从 P1 口输出。
⑵将 mybit 中的数据从 P1.2 口线输出。
⑶将 P1.5 口线置 1。
⑷将 P1.0 口线清 0。
⑸读 P1 口的输入状态,并保存至 m 中。
⑹读 P1.7 口线输入状态,并保存到 mybit 中。
【解】
⑴ sfr P1=0x90;
unsigned char m;
3.用 C51 设计单片机程序时,应尽量使用 无符号字符 型和 位 型数据,以便提高程 序的运行速度。
4.写出下列常量和变量的定义式: ⑴值为 20 的符号常量 KTIM。 ⑵无符号字符型变量 i、j。 ⑶带符号整型变量 k。 ⑷浮点型变量 f。 ⑸有符号的长整型变量 sl。 ⑹位变量 mybit。 ⑺定义无符号字符型变量 i、j,并给 i 赋值 3、j 赋值 4。 【解】 ⑴ #define KTIN 20 ⑵ unsigned char i,j; ⑶ int k; 或者 signed int k; ⑷ float f; ⑸ long sl; 或者 signed long sl; ⑹ bit mybit; ⑺ unsigned char i=3,j=4; 5.语句“i=(j=3)+(k=4);”的含义是 求求两个赋值表达式“j=3”与“k=4”的和,并 将和值赋给变量 i ,语句执行后 i= 7 ,j= 3 ,k= 4 。 6.若有下列定义:
int i=0x1234; unsigned char j; 语句“j=i;”执行后,i= 0x1234 ,j= 0x34 。 7.若有下列定义: int i; unsigned char j=0x82; 语句“i=j;”执行后,i= 0x0082 。 8.若有下列定义: unsigned int i; char j=0x82; 语句“i=j;”执行后,i= 0xff82 ,j= 0x82 。 9.定义下列特殊功能寄存器和特殊位: ⑴特殊功能寄存器 P0、P1、P2、P3。 ⑵16 位特殊功能寄存器 RCAP2,RCAP2 的低字节地址为 0xca,高字节地址为 0xcb。
单片机课后答案
第二章1、MCS-51系列单片机内部有哪些主要的逻辑部件?P10答:MCS-51系列单片机内部的逻辑部件主要有:算术/逻辑部件ALU、累加器A、只读存储器ROM、随机存储器RAM、指令寄存器IR、程序计数器PC、定时器/计数器、I/O接口电路、程序状态寄存器PSW、寄存器组。
3、MCS-51内部RAM区功能如何分配?如何选用4组工作寄存器中的一组作为当前的工作寄存器组?位寻址区域的字节地址范围是多少?P13-P15答:MCS-51内部RAM的地址空间为00H-7FH,128B,按功能分为3个区域。
00H-1FH 的32B单元是4个工作寄存器组,单片机执行程序时,具体使用哪一组是通过对PSW的RS1、RS0两位的设置来实现;20H-2FH的16B共128位,是可以按位寻址的内部RAM区;30H-7FH的80B单元是只能按字节寻址的内部RAM区。
5、8031设有4个8位并行端口,若实际应用8位I/O口,应使用P0-P3中的哪个端口传送?16位地址如何形成?P19-P21答:•P1口是专门供用户使用的I/O口,是准双向接口,故可以使用P1口传送;•P0口既可作地址/数据总线使用,又可作通用I/O使用。
一方面用来输出外部存储器或I/O的低8位地址,另一方面作为8位数据输入/输出口,故由P0口输出16位地址的低8位;•P2口可作通用I/O口使用,与P1口相同。
当外接存储器或I/O时,P2口给出地址的高8位,故P2口输出16位地址的高8位。
8、MCS-51的时钟周期、机器周期、指令周期是如何分配的?当振荡频率为10MHz 时,一个机器周期为多少微妙?P25答:CPU执行一条指令的时间称为指令周期,它是以机器周期为单位的。
MCS-51典型的指令周期为一个机器周期,每个机器周期由6个状态周期组成,每个状态周期由2个时钟周期(振荡周期)组成。
当振荡频率为10MHz时,一个机器周期为12/10M Hz=1.2us。
单片机原理及应用——基于Proteus和Keil_C林立版课后习题答案
1.计算机体系结构:哈佛结构、冯诺依曼结构的区别?哈佛结构RAM和ROM分别编址,冯诺依曼结构RAM和ROM统一编址2.MSC-51单片机外部引脚的名称是什么?各有什么功能?答:(1) 电源及晶振引脚VCC(40脚):+5V电源引脚VSS(20脚):接地引脚XTAL1(19脚);外接晶振引脚(内置放大器输入端)XTAL2(18脚):外接晶振引脚(内置放大器输出端)(2) 控制引脚RST/V PD(9)为复位/ 备用电源引脚ALE/PROG(30)为地址锁存使能输出/ 编程脉冲输入PSEN(29):输出访问片外程序存储器读选通信号EA/ VPP (31):外部ROM允许访问/ 编程电源输入(3) 并行I/O口引脚P0.0~P0.7(39~32脚)——P0口;P1.0~P1.7(1~8脚)——P1口;P2.0~P2.7(21~28脚)——P2口;P3.0~P3.7(10~17脚)——P3口。
3. AT89C51单片机的片内资源有哪些?其存储器结构如何?片内RAM可分成哪个三个区?各区的地址范围如何?其内部功能部件有:控制器:是对取自程序存储器中的指令进行译码,在规定的时刻发出各种操作所需的控制信号,完成指令所规定的功能;运算器:根据控制器发来的信号,执行算术逻辑运算操作;存储器:包括程序存储和数据存储器;定时器计数器:2个16位定时器/计数器,可对机器周期计数,也可对外部输入脉冲计数;中断系统:可响应三个内部中断源和两个外部中断源的中断请求;输入输出接口:4个8位并行口和一个全双工串行口;其存储器结构属于哈佛结构,MCS-51可寻址空间是两个64KB,即64KB的程序存储空间和64KB的数据存储空间。
片内RAM可分成划分为三个部分:①作寄存器区(00H-1FH),四组②可位寻址区(20H-2FH)③用户RAM区(30H-7FH),80B7.程序状态字寄存器PSW各位的定义是什么?答:程序状态字寄存器PSW各位的定义如下:PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0PSW.7:进/借位标志CY,加法有进位时置1,减法有借位时置1;PSW.6:辅助进位标志AC,加法运算低四位向高上四位有进位时置1;PSW.5、PSW.1:用户标志位F0和用户标志位F1,保存用户的位数据;PSW.4、PSW.3:工作寄存器选择控制位RS1和RS0,00至11分别选择四组工作之一作为当前工作寄存器PSW.2 :溢出标志位OV,有符号数加、减运算结果有溢出或乘除上结果异常(乘法运算结果大于255即乘积在BA中,或除法运算除数为0)时置1PSW.0:奇偶标志位P,累加器A中1的个数为奇数时置1。
第六章定时器及应用
定时时间为: t=计数值×机器周期 =(216-T0初值)×振荡周期×12
(二)模式 1 工作特点
当C/ T =1时,T0对外部输入计数。计数长度为: L=(216-T0初值)(个外部脉冲)
T 1初 值 2 16
T 1初 值 2
16
20ms
t
振 荡 周 期 12
10m s 1 12 6 6 10
T 1初值 60536 EC78H
∴(TH1)=ECH,(TL1)=78H
解:2)确定工作模式寄存器TMOD的值 ∵ 定时器T1工作于模式1的定时器工作方式, ∴ 高四位: GATE=0,C/T=0,M1M0=01 ,低四位:取0。 ∴ (TMOD)=0001 0000 B = 10H
因此:(TL0)=0B0H
(TH0)=3CH
源程序清单(使发光二极管闪烁,每1S闪烁1次) #include<at89x51.h> unsigned char temp=5; main() void timer_0( )interrupt 1 { { TMOD=0x01; TH0=0X3C; TL0=0XB0; TH0=0X3C; temp--; TL0=0XB0; if(temp==0) ET0=1; { EA=1; temp=5; TR0=1; P1_0=~P1_0; P1_0=1; } while(1); } }
3)编程(定时器溢出中断方式) #include <at89x51.h> 思考:设定时器T0用于定 void main() { 时10ms,晶振为6MHz。 TMOD=0x10; 编程实现:P1.0输出周期 TH1=0xec; TL1=0x78; 为40ms,高电平宽为10ms, ET1=1; EA=1; TR1=1; 低电平宽为30ms的矩形波。 P1_1=1; 如何编程? while(1); } void timer_1() interrupt 3 { TH1=0xec; TL1=0x78; P1_1=~P1_1; }