求大神,解决问题。。用汇编语言编程,,延时程序!
参考下列程序,编写跑马灯控制程序,使得D1~D8的状态变化规律与题目相同,但每种状态保持的时间为0.5秒钟,(假设使用12MHz的晶体振当器)
要求按照完整的汇编语言结构书写!1
在下列程序的基础上改,使得每种状态保持的时间为0.5秒钟!求解
程序如下:
LED-INIT: MOV P 1 , #0F8H
LED-FLASH: MOV P2,#11111110B
ACALL DELAY
MOV P2,#0FDH
ACALL DELAY
MOV P2,#0FBH
ACALL DELAY
MOV P2,#0F7H
ACALL DELAY
MOV P2,#0EFH
ACALL DELAY
MOV P2,#0DFH
ACALL DELAY
MOV P2,#0BFH
ACALL DELAY
MOV P2,#7FH
ACALL DELAY
SJMP LED-FLASH
DELAY: MOV R3,#255 ; 延时等待子程序,R3 255
LOOP1: MOV R2,#255 ;R2 255
LOOP2: DJNZ R2,LOOP2 ;R2减1不为0时跳转到LOOP2处
DJNZ R3,LOOP1 ;R3减1不为0时跳转到LOOP1处
RET :子程序返回
路过。
晕倒,,,,,,,,,
没人会阿
这个是要算指令周期的 具体的可以看看汇编中指令这一部分!还有就是尽量选择多重循环而不选择循环嵌套
这段程序最终执行了250*250次,而DJNZ指令执行需要2个机器周期,一个机器周期需要1微秒的时间,所以以上延时程序就是250*250*2=0.125秒。
要么就用四个延时组合成0.5s要么采用以下方法:
KKKK0:MOV R2,#XX
KKKK1:MOV R3,#LL
KKKK2:MOV R4,#NN
KKKK3:MOV R5,#MM
DJNZ R5,$
DJNZ R4,KKKK3
DJNZ R3,KKKK2
DJNZ R2,KKKK1
RET
适当选择各循环常数
DELAY:MOV R1,#5
D3: MOV R3,#200
D2: MOV R2,#250
D1: DJNZ R2,D1
DJNZ R3,D2
DJNZ R1,D3
RET
我写了以下,这个基本实现0.5s
谢谢大神
看kan QQQ
汇编伤不起,修改起来太麻烦,不过占用空间小.
呵呵
谢谢!