单片机定时器应用实验程序

单片机定时器应用实验程序,第1张

我来试试吧,用汇编语言编写:

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通过单片机内部的定时计数器完成计数功能的汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9342434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存