汇编 这个程序哪里出了问题 这是个简单的流水灯程序 延时为一秒

汇编 这个程序哪里出了问题 这是个简单的流水灯程序 延时为一秒,第1张

1RL P1 错误语法 

2DJNZ R2,D1 ;这条意思是移位未8 次,转D1吧,应该是转到D1的下一条

 AJMP D1 ;这是移位8次后转D1重新开始流水

ORG 0000H

MOV R2 ,#8

D1:

MOV A,#7FH

D10:

RL A

MOV P1,A

ACALL DELAY

DJNZ R2,D10

AJMP D1

DELAY:

MOV R3,#14H

MOV TMOD,#10H

MOV TH1,#3CH

MOV TL1,#0B0H

SETB TR1

LOOP1:

JBC TF1,LOOP2

SJMP LOOP1

LOOP2:

MOV TH1,#3CH

MOV TL1,#0B0H

DJNZ R3,LOOP1

RET

END

delay1000ms:(HT46R65的单片机)(注意不要开启计时中断允许位)

mov a,10000111b (设置频率和记数方式)(上升记数还是下降记数)

mov tmr0c,a (tmr0c 计数器的控制寄存器

mov a,low(65536-31250) (设置的频率就是1S上升31250)因此是DELAY1S

mov TMR0L,a (计数器的赋予初始值的低位寄存器)

mov a,high(65536-31250)

mov TMR0h,a(计数器的赋予初始值的高位寄存器)

set tmr0c4 (打开记数)

snz intc06 (是否有中断请求标志)(有就跳过)

jmp $-1 (退回一步)

clr tmr0c4 (关闭记数)

clr intc06 (清除中断标志)

ret

延时方法很多,用定时/计数比较方便也比较精确。如果用软件延时,则可以用循环(多重、嵌套都行)。根据时间长短确定循环次数,力求精确。时间计算以机器的晶振频率为基准,算出各指令的运行时间(每条指令运行时间乘所循环的次数就是该指令的全部运行时间),所有指令运行时间的和就是延时的时间。

比如:设晶振频率为12MHz 则每机器周期为1us

513us延时程序

DL513: MOV R7,#0FFH ;1us

DJNZ R7,$;2us 255=510us

RET ;2us

延时时间为1+510+2=513us

延时时间较长则可以用多重循环(以四重循环为例),如:

KKKK0:MOV R2,#XX ;1us

KKKK1:MOV R3,#LL ;1usXX

KKKK2:MOV R4,#NN ;1usXXLL

KKKK3:MOV R5,#MM ;1usXXLLNN

DJNZ R5,$ ;2us XXLLNNMM

DJNZ R4,KKKK3 ;2us XXLLNN

DJNZ R3,KKKK2 ;2us XXLL

DJNZ R2,KKKK1 ;2us XX

RET ;2us

延时时间为1us+1usXX+1usXXLL+1usXXLLNN+2us XXLLNNMM+2us XXLLNN+2us XXLL+2us XX+2us

适当确定四个循环次数XX、LL、NN、MM就能得到准确的延时时间。

在Keil里仿真的话,在配置里把晶振调成12MHz,然后在调用delay函数的地方设置一个断点,开始调试程序,运行到断点处,注意程序左边有一个记录当前寄存器和一些状态的窗口,其中,里面有一个是专门记录当前运行了多少时间的变量,记下当前时间T1,然后按F10(不进入子函数)调试,再记录当前时间T2,则延时=T2-T1。多试几个A,差不多调到1s就够了。我一般都这么调。

你要想明白其中原理,想自己算的话,你就看看delay的汇编代码段自己算吧。

DELAY:MOV R7,#250 第一层循环250次

DEL1:MOV R6,#100 第二层循环100次

DEL2:MOV R5,#10 第三层循环10次

DJNZ:R5,$ 如果R5不等于0,则跳转到本行,也就是空转10次

DJNZ:R6,DL2 如果R6不等于0,则跳到DL2行,给R5赋值

DJNZ R7,DL1 如果R7不等于0,则跳到DL1行,给R6赋值

所以总的空转循环次数是25010010=250000次,通过调节R5,R6,R7值来控制延时时间

以上就是关于汇编 这个程序哪里出了问题 这是个简单的流水灯程序 延时为一秒全部的内容,包括:汇编 这个程序哪里出了问题 这是个简单的流水灯程序 延时为一秒、单片机。用汇编语言编程。 设计一软件延时1s的子程序。设晶振频率为12MHz。、汇编语言延时程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存