51单片机定时器的汇编语言程序编程,

51单片机定时器的汇编语言程序编程,,第1张

这么简单的要求,不用大动干戈。

看看下面的程序,是不是最简单:

ORG 0000H

SETB TR0 启动T0

MOV R2, #250 定时计数初值

LOOP:

MOV TH0, #(8192 - 8000) / 32 定时8ms

MOV TL0, #(8192 - 8000) MOD 32

JNB TF0, $ 等待8ms

CLR TF0

DJNZ R2, LOOP 每隔8ms,R2减一次一

CPL P1.0 R2为0则LED亮灭转换

LJMP 0000H

END

本程序,已经实验成功。

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

ORG 0

JMP MAIN

MAIN:SETB P1.0

ACALL DELAY

CLR P1.0

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的测试板编译了一下,下载后可以正常运行,你直接拷贝应该就能用,嘻嘻

你的注释有的有错误,现重新更正如下

ORG 0000H

AJMP START

ORG 001BH 外中断1入口地址

AJMP INT_T1

ORG 0100H

START:

MOV SP,#60H;设置堆栈深度

MOV TMOD,#10H 置T1为方式1

MOV TL1,#00H 延时50mS的时间常数

MOV TH1,#4BH

MOV R0,#00H;表格计数器

MOV R1,#20;1s计数器即20*50ms=1000ms=1s,得到所需要定时时间1s

SETB TR1;打开定时器1

SETB ET1:允许定时器1中断

SETB EA 开总中断

SJMP $:等待

INT_T1: T1中断服务子程序

PUSH ACC 保护现场

PUSH PSW

PUSH DPL

PUSH DPH

CLR TR1 关定时器

MOV TL1,#00H 重新载入计数初值

MOV TH1,#4BH

SETB TR1 再次打开定时器

DJNZ R1,EXIT;判断是否到达20个50ms,如果没有则继续循环

MOV R1,#20 重新载入1s计数值

MOV DPTR,#DATA 置常数表首地址 MOV A,R0 置常数表偏移量

MOVC A,@A+DPTR 读常数表

MOV P1,A 这里中的A决定是什么花色,也就是显示什么

INC R0;指向下一个数

ANL 00,#07H;

EXIT:

POP DPH 恢复现场

POP DPL

POP PSW

POP ACC

RETI

LED显示常数表

DATA: DB 0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH

END

总的来说显示什么样的花色是由你提前计算好,然后将对应的值放入表格中。比方说,你的led是共阴极接法,那么你要L1和L3亮就要给p1口送00000110B,这个值放到表格中等你用的时候从表格中取出来就行了


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

原文地址:https://54852.com/yw/10966474.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存