定时器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时器实验报告
自动化1003 徐磊 201003120325 1.实验目的
1、掌握定时器的工作原理。
2、学习单片机定时器的应用设计和调试。
2.实验原理
系统8051中有三个16 位定时器/计数器:定时器0、定时器1 和定时器2。每一个包含两个8 位寄存器,THx和TLx(这里,x=0、1 或2)。所有这些操作既可配置为定时器或事件记数器。定时器功能,TLx 寄存器每12 个时钟周期或1个周期加1,通过软件来选择。因此可认为为计数器时钟周期。每记12个时钟周期,计数速率达1/12 的晶振频率。
计数器功能,下降沿时寄存器加1,根据外部输入引脚T0、T1 或T2。在这些功能中,每个时钟周期对外部输入信号(T0 引脚和T1 引脚)进行采样,每12个时钟周期对T2 引脚采样。当采样信号出现一个高电平接着一个低电平,计数加1。当检测到跳变时新计数值出现在寄存器中。对定时器0 和定时器1 来说,需要用两个时钟周期来识别下降沿跳变,最大的计数速率为1/2 的晶振频率;对于定时器2,需要用24个时钟周期来识别下降沿跳变,最大计数速率为1/24的晶振频率。外部输入信号没有严格的周期限制,但是要确保在电平改变前至少有一次采样,对定时器0 和定时器1来说信号应该至少保持一个时钟,定时器2 需要12 个时钟周期。
对定时器0 和定时器2 来说,除了标准8051 定时器的功能之外,添加了一些新的特征。
3.实验系统的原理图如下:
4.示例程序如下:
;做实验前请将对应“Digital LED Power”位置的红色拨码开关打到ON 的位置
ORG 0000H
SJMP MAIN
ORG 0030H ;将数码管所要显示的数据保存在30H~35H之中
SJMP T0_INT
MAIN:
MOV TMOD,#01H ;T0定时方式1
MOV TH0,#0DCH ;定时10ms@11.0592MHz
MOV TL0,#00H ; TH0和TL0,即:0XDC00
SETB TR0 ;启动T0
MOV IE,#82H ;开中断
MOV DPTR,#TAB
LOOP1:; 将30H~35H地址内的值均赋为9 ;注意:只有R0、R1可以间接赋值MOV R1,#30H
LOOP2: MOV @R1,#09H
INC R1
CJNE R1,#36H,LOOP2
START: MOV R2,#00H
MOV R1,#30H
LED_123: ;控制前3个数码管的显示
MOV A,@R1
MOVC A,@A+DPTR
CALL CONTROL_164
CALL CONTROL_138
CALL DELAY
INC R2 ;间接通过R2的值控制数码管显示的次序
INC R2 ;
INC R1
CJNE R1,#33H,LED_123
LED_4: ;控制第4个数码管的显示(带小数点)
MOV A,@R1
MOVC A,@A+DPTR
ADD A,#80H
CALL CONTROL_164
CALL CONTROL_138
CALL DELAY
INC R1
LED_56: ;控制第5、6个数码管的显示
INC R2
INC R2
MOV A,@R1
MOVC A,@A+DPTR
CALL CONTROL_164
CALL CONTROL_138
CALL DELAY
INC R1
CJNE R1,#36H,LED_56
JMP START
CONTROL_164:MOV R3,#08H
LOOP_0: CLR P2.0
MOV R4,A
ANL A,#080H
CJNE A,#080H,LOOP_1
SETB P2.7
JMP LOOP_2
LOOP_1: CLR P2.7
LOOP_2: SETB P2.0
MOV A,R4
RL A
DJNZ R3,LOOP_0
RET
CONTROL_138:MOV A,#0F0H ; 0xF0=11110000(二进制)
ADD A,R2 ; 需直接通过P21、P22、P23的值控制数码管显示的次序
MOV P2,A ; 将A的值赋给P2端口,则,R2需每次加2才能使P21发生一次改变RET
T0_INT: ;定时中断0
PUSH PSW
PUSH ACC
CLR EA
MOV TH0,#0DCH ;定时10ms@11.0592MHz
MOV TL0,#00H ; TH0和TL0,即:0XDC00
将30H~35H内改值,使每进入一次定时中断,30H~35H内数字组成的6位数减1 MOV R0,#35H
T0_LOOP0: CJNE@R0,#0H,T0_END
MOV @R0,#9H
DEC R0
JMP T0_LOOP0
T0_END: DEC@R0
SETB EA ;开启全局中断
POP ACC ;取出保存寄存器数据。
POP PSW
RETI
DELAY: ;延迟程序。
MOV R6,#0EEH
DELAY_0: MOV R7,#09H
DJNZ R7,$
DJNZ R6,DELAY_0
RET
TAB: DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
END