我来试试吧,用汇编语言编写:
ORG 0
JMP MAIN
MAIN:SETB P10
ACALL DELAY
CLR P10
ACALL DELAY
JMP MAIN
DELAY:MOV R1,#10 ;500ms的延时子程序
MOV TMOD,#1 ;定时器0方式1
AGAIN:MOV TL0,#LOW(65536-50000) ;装载计数初值的低位
MOV TH0,#HIGH(65536-50000) ;装载计数初值的高位
SETB TR0 ;启动
LOOP1:JBC TF0,LOOP2 ;查询并清除溢出位
JMP LOOP1
LOOP2:DJNZ R1,AGAIN
CLR TR0
RET
END
刚才我拿51的测试板编译了一下,下载后可以正常运行,你直接拷贝应该就能用,嘻嘻
计数器1,也是计数,设置初值也是为了计数,是对外部脉冲计数,而这外部脉冲是要从P35输入的。初值也是计数的需要,TL1=256-实际计数值=6,可以算出实际计数值是250。也就是需要对外部脉冲计250个才中断一次。
你在外部加脉冲,是只加一个吧,所以,屏幕上没有显示,至少要加250个以上,每加250个,cou才加一个数。
SECOND EQU 30H
COUNT EQU 31H
ORG 00H
LJMP START
ORG 0BH ;定时器0中断入口
LJMP INT_T0
START: MOV SECOND,#00H
MOV COUNT,#00H
MOV DPTR,#TABLE ;段码表首地址
MOV P0,#3FH ;数码管显示初始化
MOV P2,#3FH
MOV TMOD,#01H ;设置定时器0工作方式
MOV TH0,#(65536-50000)/256 ;定时50毫秒
MOV TL0,#(65536-50000) MOD 256
SETB TR0 ;启动定时/计数器0
MOV IE,#82H ;开中断
LJMP $ ;等待中断
INT_T0: MOV TH0,#(65536-50000)/256 ;定时50毫秒
MOV TL0,#(65536-50000) MOD 256
INC COUNT ;计数值加1
MOV A,COUNT
CJNE A,#20,I2 ;是否计够1秒
MOV COUNT,#00H
INC SECOND
MOV A,SECOND
CJNE A,#60,I1 ;是否计够60秒
MOV SECOND,#00H
I1: MOV A,SECOND
MOV B,#10
DIV AB ;分离计数值十位和个位
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A ;显示计数值
I2: RETI ;中断返回
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
以上就是关于单片机定时器应用实验程序全部的内容,包括:单片机定时器应用实验程序、51单片机定时器的计数器功能的使用、实现0到99通过单片机内部的定时计数器完成计数功能的汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)