求一个开始延时三秒后灯亮的汇编程序
ORG 0000H
CLR P1^0
A0 :MOV R5,#64H
LCALL MAIN
CPL P1^0
LJMP A0
ORG 001BH
MAIN:MOV TMOD,#10H
MOV TH1 ,#0F4H
MOV TL1 ,#8AH
SETB TR1
MOV IE ,#0D0H
DJNZ R5,MAIN
RET
END
这是我编的,灯倒可以一闪一闪,就是闪得太快
补充:要用计时器来延时,而不是用循环嵌套根据所需步数来延时
答案:试试看:
ORG 0000H
JMP MAIN
ORG 000BH
JMP T0_INT
MAIN:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #3CH
MOV TL0, #0B0H ;50ms@12MHz
SETB TR0
SETB ET0
SETB EA
MOV R7, #60
MOV P1, #55H
SJMP $
T0_INT:
MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R7, T0_END
MOV R7, #60
XRL P1, #255
T0_END:
RETI
END
其他:所谓延时程序就是设置循环,相信你自己应该会设置 兄弟时间得要用软件慢慢的调,不是一下就可以要多少就多少的。汇编我不是很好。 你真可爱,不是3秒的延时吗,当然得用定时器中断啦
ORG 0000H
AJMP MAIN
ORG 000BH (定时器0中断)
AJMP INT0
MAIN: MOV A,P1(这里的灯泡连的是P1口)
MOV R3,#03H (三个一秒是三秒)
MOV R5, #14H (我射的单次定时是50毫秒,14H是让他循环20次,14H对应的十进制数20)
SETB TR0(开定时器)
SETB TF0
SETB EA
MOV TOMD,#01H (这里的01H是定时器工作模式1,其实一个16位的定时器)
MOV TH0,#3CH
MOV TL0,#0B0H (16进制的第一位应当以十字或字母开头,故是0B0H)
JB R6,NEXT (刚才做的记号是R6=1,JB 的意思是某位为1,则跳到NEXT)
NEXT: MOV A,P1 (注意了我这里是8个灯,你要是一个灯的话,那就是你上面的值即可)
RCC A (8个灯循环每隔三秒的流水灯)
MOV P1,A (等在循环亮呢)
AJMP $
INT0: MOV TOMD,#01H (TMOD =01H 时TH0,TL0必须在响应中断时重写一遍)
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R5,HUI (未循环到20次即14H,则回(HUI)到主程序继续循环直至20次)
DJNZ R3,HUI (未循环到3次上句话是循环20次的一共一秒的,再循环三次是3秒)
MOV R6,#01H (这是在做记号)
HUI: RETI
你算来着了,我今天刚注册的号,我的习惯只回答一次问题,正好我再给国防部做飞机探测器
,你要记住在大多数时是不用循环的,因为又费CPU,又耗时间,像定时炸弹都用中断,然后用最普通的肖特基二极管来实现电打火,汇编语言不太熟了,我还得记记。
(狗凯是狗)
上一个:汇编程序
下一个:问下单片机汇编高手~这个程序为啥不能让P1.0到P1.7的灯循环点亮呢?