《定时器实验实验报告.pdf》由会员分享,可在线阅读,更多相关《定时器实验实验报告.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、定时器实验报告定时器实验报告一、实验目的一、实验目的1、掌握定时器的工作原理。2、学习单片机定时器的应用设计和调试。二、实验设备二、实验设备统一电子开发平台。三、实验要求三、实验要求连接电路并编写程序,使单片机定时器在一定工作模式下,完成9999.99s 倒计时。四、实验原理四、实验原理系统8051中有三个16 位定时器/计数器:定时器0、定时器1 和定时器2。每一个包含两个8 位寄存器,THx和TLx(这里,x=0、1 或2)。所有这些操作既可配置为定时器或事件记数器。定时器功能,TLx 寄存器每12 个时钟周期或1 个周期加1,通过软件来选择。因此可认为为计数器时钟周期。每记12 个时钟周
2、期,计数速率达1/12 的晶振频率。计数器功能,下降沿时寄存器加1,根据外部输入引脚T0、T1 或T2。在这些功能中,每个时钟周期对外部输入信号(T0 引脚和T1 引脚)进行采样,每12 个时钟周期对T2 引脚采样。当采样信号出现一个高电平接着一个低电平,计数加1。当检测到跳变时新计数值出现在寄存器中。对定时器0 和定时器1 来说,需要用两个时钟周期来识别下降沿跳变,最大的计数速率为1/2 的晶振频率;对于定时器2,需要用24 个时钟周期来识别下降沿跳变,最大计数速率为1/24的晶振频率。外部输入信号没有严格的周期限制,但是要确保在电平改变前至少有一次采样,对定时器0 和定时器1来说信号应该至
3、少保持一个时钟,定时器2 需要12 个时钟周期。对定时器0 和定时器2 来说,除了标准8051 定时器的功能之外,添加了一些新的特征。下面的子章节将详细描述这些定时器/计数器。1 1 定时器定时器0 0 和定时器和定时器1 1定时器或计数器功能通过专用寄存器TMOD 的控制位C/T 来选择,如下所示。这两个定时器/计数器有四种工作模式,通过TMOD 的位对(M1,M0)来选择。这两个定时器/计数器的模式0、1 和模式2 是相同的,模式3 是不同的。除了TMOD 之外,其它专用寄存器TCON 和AUXR2 包含几个控制位和状态位与这两个定时也相关,也如下所示。TMOD(地址=89H,定时器/计数
4、器模式控制位,复位值=0000,0000B)GATE:当门控位置位时,只有在/INT0 或/INT1 引脚是高电平且TR0 或TR1 控制位置位时,定时器/计数器0 或1 使能。当门控制位清零时,只要TR0 或TR1 置1 定时器0 或1 使能。C/T:定时器或计数器选择器。清零为定时器功能(从内部系统时钟输入)。置位为计数器功能(从T0 或T1 引脚输入)。M0 M1 工作模式0 0 8 位定时器/计数器。THx 与TLx 作为5 位预分频器0 1 16 位定时器/计数器。THx 与TLx 串联;没有分步频器1 0 8 位自动重载定时器/计数器。THx 保持一个值,并在每次溢出时加载到TLx
5、1 1(定时器0)TL0 是一个8 位定时器/计数器并通过标准定时器0 的控制位控制。TH0仅仅是一个8 位定时器通过定时器1 的控制位控制1 1(定时器1)定时器/计数器停止TCON(地址=88H,定时器/计数器控制位,复位值=0000,0000B)TF1:定时器1 溢出标志位。定时器/计数器溢出时由硬件置位。处理器进入中断向量程序由硬件清零。TR1:定时器1 运行控制位。通过软件置位/清零开启或关闭定时器/计数器1。TF0:定时器0 溢出标志位。定时器/计数器溢出时由硬件置位。处理器进入中断向量程序由硬件清零。TR0:定时器0 运行控制位。通过软件置位/清零开启或关闭定时器/计数器0。AU
6、XR2(地址=A6H,辅助寄存器2,复位值=0000,0000B)T0X12:当C/T=0 时,定时器0 的时钟源选择。置位选择Fosc 作为系统时钟源,清零选择Fosc/12 作为时钟源。T1X12:当C/T=0 时,定时器1 的时钟源选择。置位选择Fosc 作为系统时钟源,清零选择Fosc/12 作为时钟源。T0CKOE:置位/清零来使能/禁止从P3.4 输出定时器0 时钟。四种工作模式在以下的文本中描述。2 2定时器定时器2 2定时器 2 是一个16 位定时器/计数器,既可作为一个定时器也可以作为一个事件计数器,通过专用寄存器T2CON的C/T2 位来选择。定时器2 有四种工作模式:捕获
7、、自动加载(向上或向下计数)、波特率发生器和可编程时钟输出,通过专用寄存器T2CON 和T2MOD 来选择,如下所示。T2CON(地址=C8H,定时器/计数器2控制寄存器,复位值=0000,0000B)TF2:定时器2 溢出标志位,定时器2 溢出置位且必须通过软件清零。当RCLK=1或TCLK=1 时,TF2 不会被置位。EXF2:定时器2 外部标志位,在EXEN2=1 时,且在T2EX 上有负跳变时加载或捕获将引起置位。当定时器2 中断使能时,EXF2=1 时将引起CPU 进入定时器2中断向量程序。EXF2 必须通过软件清零。EXF2 在向上/向下计数器模式不会产生中断。RCLK:接收时钟控
8、制位。置位时,串行口使用定时器2 溢出脉冲来接收,在模式1 和模式3 时。RCLK=0 使用定时器1 溢出脉冲来产生接收时钟。TCLK:传送时钟控制位。置位时,串行口使用定时器2 溢出脉冲来发送,在模式1 和模式3 时。TCLK=0 使用定时器1 溢出脉冲来产生发送时钟。EXEN2:定时器2 外部使能位。置位时,如果定时器2 没有用作串行口时钟,在T2EX 的负跳变时捕获或加载并作为结果TR2:定时器2 的启始和停止位。逻辑1 时启动定时器。C/T2:定时器或计数器选择。清零时,选择内部定时器。置位时,选择外部事件计数器(下降沿触发)。CP/RL2:捕获/加载控制位。置位时,如果EXEN2=1
9、,在T2EX 的负跳变时将产生捕获。清零时,如果EXEN2=1,定时器2 溢出或T2EX 上有负跳变时将产生自动加载。当RCLK=1 或TCLK=1 时,这一位被忽略并强制加载在定时器2溢出时。T2MOD(地址=C9H,定时器/计数器2 控制寄存器,复位值=xxxx,xx00B)T2OE:定时器2 时钟输出使能位,置位使能清零禁止。DCEN:定时器2 向下计数使能位,置位使能清零禁止。表 1.定时器2 运行模式3.3.波特率发生器模式波特率发生器模式T2CON 寄存器的RCLK 和或RCLK 位允许串行口发送和接收波特率既可源自定时器1 或定时器2。当TCLK=0时,定时器1 作为串行口传送波
10、特率发生器。当TCLK=1,定时器2 作为串行口传送波特率发生器。RCLK 对串行口接收波特率有相同的功能。有了这两位,串行口可能有不同的接收和发送波特率,一个通过定时器1 来产生,另一个通过定时器2 来产生。图 9 示定时器2 在波特率发生器模式。波特率发生器模式像自动加载模式,翻转时将把寄存器RCAP2H 和RCAP2L 的值加载到定时器2 的寄存RCAP2H 和RCAP2L 的值由软件预置。模式 1 和3 的波特率由定时器2 的溢出速率决定定时器既可配置为“定时器”或“计数器”工作方式。在许多应用场合,配置成“定时器”工作方式(C/T2=0)。当定时器2 作为波特率发生器时定时器操作是不
11、同的。通常,作为一个定时器将在1/12 的系统时钟频率加1。作为一个波特率发生器,系统时钟频率的1/2 加1。波特率计算公式如下:定时器 2 作为一个波特率发生器模式如图9 所示,只有在T2CON 寄存器的位RCLK 和/或TCLK=1 为1 时有效。注意TH2 翻转不会置位TF2,也不会产生中断。因而,当定进器2 在波特率发生器模式时定时器中断不需要禁止。如果EXEN2(T2 外部中断使能位)置位,T2EX(定时器/计数器2 触发输入)的负跳变将置位EXF2(T2 外部标志位),但是不会引起从(RCAP2H,RCAP2L)到(TH2,TL2的)重载。因此,当定时器2 作为波特率发生器时,如果
12、需要的话,T2EX也可以作为传统的外部中断。当定时器2 在波特率发生器模式时,不能试着去读TH2 和TL2。作为一个波特率发生器,定时器2 在1/2 的系统时钟频率或从T2 引脚的异步时增1;在这些条件下,读写操作将会不正确。寄存器RCAP2 可以读,但是不可以写,因为写和重载重叠并引起写和/或加载错误。在进入定时器2 或RCAP2 寄存器时定时器不可以关闭(清零TR2)。4.4.实验系统的原理图如下实验系统的原理图如下图 1单片机原理图五、程序流程图五、程序流程图程序流程图如下所示:开始将30H-35H地址对应的数值与数码管接口对应30H-35H地址对应数值均设为9R1指向30H当前R1地址
13、对应数值-1当前R对应数值=0?YR1当前数值重置为9同时R1=R1+1NR1=30HYR1=R1+1R1=33H?NR1当前数值-1并加80HY减80H是否为0?YR1当前数值重置为9,并R1=R1+1R1当前数值减1NR1=30H?NR1=R1-1Y对应数为0?Y重置为初始数值,并R1=R1+1NYR1=30H?NR1=R1-1R1=30H?YN图 2程序流程图六、实验思考题六、实验思考题1、对8051 单片机的可编程计数器/定时器的工作原理进行说明。答:每个时钟周期对外部输入信号(T0 引脚和T1 引脚)进行采样,每12 个时钟周期对T2 引脚采样。当采样信号出现一个高电平接着一个低电平
14、,计数加1。当检测到跳变时新计数值出现在寄存器中。对定时器0 和定时器1 来说,需要用两个时钟周期来识别下降沿跳变,最大的计数速率为1/2 的晶振频率;对于定时器2,需要用24 个时钟周期来识别下降沿跳变,最大计数速率为1/24的晶振频率。外部输入信号没有严格的周期限制,但是要确保在电平改变前至少有一次采样,对定时器0 和定时器1来说信号应该至少保持一个时钟,定时器2 需要12个时钟周期。2、请说明在本实验中T0 计数器是怎样工作的?答:将30H35H 内改值,使每进入一次定时中断,30H35H 内数字组成的6 位数减1附:实验源代码:附:实验源代码:1.1.倒计时程序:倒计时程序:;*ASM
15、汇编实验*;工程:;晶振:11.0592M;*/#include REG_MPC82G516.INC/*如果用到MPC82G516的特殊寄存器请包含这个头文件*/ORG 0000HSJMP MAINORG 0030H;将数码管所要显示的数据保存在30H35H 之中SJMP T0_INTMAIN:;以下编写程序完成注释要求的步骤:MOV TMOD,#01H;T0 定时方式1MOV TH0,#0DCH;定时*MOV TL0,#00H;TL0 赋值SETB TR0;启动T0MOV IE,#82H;开中断MOV DPTR,#TABLOOP1:;将30H35H 地址内的值均赋为9;注意:只有R0、R1
16、可以间接赋值MOV R1,#30HLOOP2:MOV R1,#09HINC R1CJNE R1,#36H,LOOP2START:MOV R2,#00HMOV R1,#30HLED_123:;控制前3 个数码管的显示MOV A,R1MOVC A,A+DPTRCALL CONTROL_164CALL CONTROL_138CALL DELAYINC R2;间接通过R2 的值控制数码管显示的次序INC R2;INC R1CJNE R1,#33H,LED_123LED_4:;控制第4 个数码管的显示(带小数点)MOV A,R1MOVC A,A+DPTRADD A,#80HCALL CONTROL_16
17、4CALL CONTROL_138CALL DELAYINC R1LED_56:;控制第5、6 个数码管的显示INC R2INC R2MOV A,R1MOVC A,A+DPTRCALL CONTROL_164CALL CONTROL_138CALL DELAYINC R1CJNE R1,#36H,LED_56JMP STARTCONTROL_164:MOV R3,#08HLOOP_0:CLR P2.0MOV R4,AANL A,#080HCJNE A,#080H,LOOP_1SETB P2.7JMP LOOP_2LOOP_1:CLR P2.7LOOP_2:SETB P2.0MOV A,R4RL
18、 ADJNZ R3,LOOP_0RETCONTROL_138:MOV A,#0F0H;0XF0=11110000(二进制)ADD A,R2;需直接通过P21、P22、P23 的值控制数码管显示的次序MOV P2,A;将A 的值赋给P2 端口,则,R2 需每次加2 才能使P21 发生一次改变RETT0_INT:;定时中断;以下请仿照中断 INT0 编写程序完成如下步骤:PUSH PSW;1、保存 PSW、ACC 寄存器;PUSH ACCCLR EAMOV TH0,#0DCHMOV TL0,#00H;3、对 TH0,TL0 赋值,定时*;将30H35H 内改值,使每进入一次定时中断,30H35H
19、内数字组成的6 位数减1MOV R0,#35HT0_LOOP0:CJNE R0,#0H,T0_ENDMOV R0,#9HDEC R0JMP T0_LOOP0T0_END:DEC R0SETB EA;开启全局中断;以下编写程序完成注释要求的步骤:POP ACCPOP PSW;恢复保存寄存器数据。RETIDELAY:;延迟程序。MOV R6,#0EEHDELAY_0:MOV R7,#09HDJNZ R7,$DJNZ R6,DELAY_0RETTAB:DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh;0,1,2,3,4,5,6,7,8,9END正计时程序:正计时程
20、序:;*ASM汇编实验*;工程:;晶振:11.0592M;*/#include REG_MPC82G516.INC/*如果用到MPC82G516的特殊寄存器请包含这个头文件*/ORG 0000HSJMP MAINORG 0030H;将数码管所要显示的数据保存在30H35H 之中SJMP T0_INTMAIN:;以下编写程序完成注释要求的步骤:MOV TMOD,#01H;T0 定时方式1MOV TH0,#0DCH;定时MOV TL0,#00H;TL0 赋值SETB TR0;启动T0MOV IE,#82H;开中断MOV DPTR,#TABLOOP1:;将30H35H 地址内的值均赋为9;注意:只有
21、R0、R1 可以间接赋值MOV R1,#30HLOOP2:MOV R1,#00HINC R1CJNE R1,#36H,LOOP2START:MOV R2,#00HMOV R1,#30HLED_123:;控制前3 个数码管的显示MOV A,R1MOVC A,A+DPTRCALL CONTROL_164CALL CONTROL_138CALL DELAYINC R2;间接通过R2 的值控制数码管显示的次序INC R2;INC R1CJNE R1,#33H,LED_123LED_4:;控制第4 个数码管的显示(带小数点)MOV A,R1MOVC A,A+DPTRADD A,#80HCALL CONT
22、ROL_164CALL CONTROL_138CALL DELAYINC R1LED_56:;控制第5、6 个数码管的显示INC R2INC R2MOV A,R1MOVC A,A+DPTRCALL CONTROL_164CALL CONTROL_138CALL DELAYINC R1CJNE R1,#36H,LED_56JMP STARTCONTROL_164:MOV R3,#08HLOOP_0:CLR P2.0MOV R4,AANL A,#080HCJNE A,#080H,LOOP_1SETB P2.7JMP LOOP_2LOOP_1:CLR P2.7LOOP_2:SETB P2.0MOV
23、A,R4RL ADJNZ R3,LOOP_0RETCONTROL_138:MOV A,#0F0H;0XF0=11110000(二进制)ADD A,R2;需直接通过P21、P22、P23 的值控制数码管显示的次序MOV P2,A;将A 的值赋给P2 端口,则,R2 需每次加2 才能使P21 发生一次改变RETT0_INT:;定时中断;以下请仿照中断 INT0 编写程序完成如下步骤:PUSH PSW;1、保存 PSW、ACC 寄存器;PUSH ACCCLR EAMOV TH0,#0DCHMOV TL0,#00H;3、对 TH0,TL0 赋值,定时;将30H35H 内改值,使每进入一次定时中断,30H35H 内数字组成的6 位数减1MOV R0,#35HT0_LOOP0:CJNE R0,#9H,T0_ENDMOV R0,#0HDEC R0JMP T0_LOOP0T0_END:INC R0SETB EA;开启全局中断;以下编写程序完成注释要求的步骤:POP ACCPOP PSW;恢复保存寄存器数据。RETIDELAY:;延迟程序。MOV R6,#0EEHDELAY_0:MOV R7,#09HDJNZ R7,$DJNZ R6,DELAY_0RETTAB:DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh;0,1,2,3,4,5,6,7,8,9END
限制150内