当前位置:编程学习 > 汇编语言 >>

求一个开始延时三秒后灯亮的汇编程序

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的灯循环点亮呢?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,