CJNE R1,#20,MAIN这里是不对的,没有这条语句,可以改成:
MOV A,R1
CJNE A,#29,MAIN
其他地方也有问题,修改如下
MOV TMOD,#01H
MOV R1,#00H
MAIN:
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
JNB TF0,$
CLR TF0
INC R1
MOV A,R1
CJNE R1,#20,MAIN
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
DELAY1S: MOV R0,#10H
LOOP0:LCALL DELAY
DJNZ R0,LOOP0
RET
DELAY:MOV R6,#0C8H; 外循环 200 次
LOOP1:MOV R7,#0F8H; 内循环 248 次
NOP
LOOP2:DJNZ R7,LOOP2; 延时2 μs×248=496 μs
DJNZ R6,LOOP1; 延时 500 μs×200=100 ms
RET
将上面函数调用两次就可以啦
以上就是关于单片机延时1秒 用 定时器汇编语言全部的内容,包括:单片机延时1秒 用 定时器汇编语言、汇编 这个程序哪里出了问题 这是个简单的流水灯程序 延时为一秒、单片机。用汇编语言编程。 设计一软件延时1s的子程序。设晶振频率为12MHz。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)