立即注册 登录
返回首页

uid:59980的个人空间

日志

跑马灯程序003利用Timer延时法

已有 1093 次阅读2014-3-25 00:25 |个人分类:发光LED类| 跑马灯, 程序3

ORG         00H
          MOV         TMOD,  #01H             ;  设定Timer 0 工作在模式1下

START:
         CLR          C                       ;  清进位CY
         MOV          A,     #0FFH            ;  ACC=FFH, 左移初始值
         MOV          R2,    #8               ;  左移8次
LOOP:    
         RLC          A                       ;  左移1位
         MOV          P0,    A                ;  输出到P0口,低电平
         MOV          R3,    #20              ;  延时0.2秒
         CALL         DELAY        
         DJNZ         R2,    LOOP             ;  是否左移了8次?不是则循环
         MOV          R2,    #7               ;  右移7次

LOOP_1:
         RRC          A                       ;  右移1位
         MOV          P0,    A                ;  输出到P0口,低电平
         MOV          R3,    #20
         CALL         DELAY  
         DJNZ         R2,    LOOP_1
         JMP          START                   ;  循环

;;;;;;;;;;;;;;;;;以下是利用计时器延时的子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DELAY:
         SETB         TR0                               ;  启动Timer 0 开始计时

RECOUNT: MOV          TH0,   #(65536-2000)MOD  256      ;  计数初值2000
         MOV          TH0,   #(65536-2000) /  256

LOOP_2:  
        JBC           TF0,   LOOP_3                     ;  TF0是否为1,是则跳到LOOP_3
        JMP           LOOP_2                            ;  不是表明计时还没有完成,循环等待

LOOP_3:
        DJNZ          R3,    RECOUNT                    ;  R3为重复计时的次数
        CLR           TR0                               ;  停止计时
        RET
        END

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部