单片机定时器问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机定时器问题相关的知识,希望对你有一定的参考价值。

AT89C51用定时器1的方式1定时1S,并将计数结果通过P1 和P0口外接的共阳数码管显示出00—99秒的循环计数程序。(晶振频率为12M,用汇编指令 )

程序如下:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INTER
MAIN:
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB TR0
SETB EA
SETB ET0 ;定时器初始化结束,下面循环显示即可.
;
MOV R7, #20 ;50ms计数.
MOV R1, #00H ;0~99计数.
AA1:
MOV A, R1
MOV B, #10
DIV AB ;除以10,分离十位个位.
MOV DPTR, #TAB
MOVC A, @A+DPTR ;查出段码.
MOV P0, A ;显示十位数.
MOV A, B
MOV DPTR, #TAB
MOVC A, @A+DPTR ;查出段码.
MOV P1, A ;显示个位数.
LCALL DELAY ;延时.
AJMP AA1 ;无穷的显示.

TAB:
DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H, 90H
;-----------------------------------------------------------
DELAY: ;延时子程序.
MOV R2, #10
AA3: MOV R3, #10
AA4: MOV R4, #10
DJNZ R4, $
DJNZ R3, AA4
DJNZ R2, AA3
RET
;-----------------------------------------------------------
INTER: ;50ms中断执行一次.
MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R7, RETURN ;中断20次.
MOV R7, #20
INC R1 ;每秒加一.
CJNE R1, #100, RETURN ;不到100s就退出.
MOV R1, #00H ;从0开始.
RETURN:
RETI
;-----------------------------------------------------------
END
参考技术A ORG 0000H
LJMP START
ORG 001BH
LJMP Timer1Interrupt

START:
MOV SP,#60H
LCALL InitTimer1
LOOP:
;==========================================
;根据Show_No的值,在P1,P0口上输出相应数字
;==========================================
LJMP LOOP

InitTimer1:
MOV TMOD,#10H
MOV TH1,#0FCH
MOV TL1,#18H
SETB EA
SETB ET1
SETB TR1
RET

Timer1Interrupt:
PUSH DPH
PUSH DPL
PUSH ACC
MOV TH1,#0FCH
MOV TL1,#18H
;==========================================
;Show_No++,如果=100,则Show_Number=0
;==========================================
POP ACC
POP DPL
POP DPH
RETI

END

我帮你搭了个框架,希望你能把剩下的工作完成,凡是要动脑子,切不可养成坐等现成的习惯

ps:做而论道 的程序有N处错误,希望你能找出,并消化掉
参考技术B 你是要提问题还是要程序啊? 参考技术C 给你个简单的:

org 00h
sjmp main
org 0bh
sjmp t_0
org 30h
main:
mov sp,#60h
mov tmod,#10h
mov th1,#0b1h
mov tl1,#0e0h
mov ie,#10001000b
mov r7,#50
mov r6,#10
mov r5,#9
mov r0,#00h
mov r1,#01h
mov dptr,#100h
setb tr1
sjmp $
t_0:
mov th1,#0b1h
mov tl1,#0e0h
djnz r7,exit
mov a,r0
movc a,@a+dptr
mov p0,a
inc r0
djnz r6,exit
mov r0,#00h
mov a,r1
movc a,@a+dptr
mov p1,a
inc r1
djnz r5,exit
mov r1,#01h
mov r5,#9
exit:reti
org 100h
db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h

end

以上是关于单片机定时器问题的主要内容,如果未能解决你的问题,请参考以下文章

单片机定时器中断的问题

关于STM32单片机PWM输出实验定时器的问题

51单片机定时器2的最短定时时间怎么有限制?

单片机c语言编程问题,功能是用定时器T0使发光管间隔200ms闪烁,定时器T1使数码管循环显示0-59.

51单片机的定时器

关于使用STM32单片机完成脉冲计数功能的问题