×
单片机 > 单片机程序设计 > 详情

用延时实现PIC单片机LED流水灯

发布时间:2020-05-29 发布时间:
|

用延时实现PIC 单片机 LED流水灯

;****************************************************
  __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;****************************************************
status    equ   3h         ;定义状态寄存器地址

portc     equ   7h         ;定义端口C的数据寄存器地址
trisc     equ   87h        ;定义端口C的方向控制寄存器地址
flag      equ   25h        ;定义一个控制左移/右移的标志寄存器
;***********************************************************
       org     000h        ;定义程序存放区域的起始地址
       nop                 ;放置一条ICD必须的空操用指令
       bsf     status,5    ;设置文件寄存器的体1
       MOV lw   00h         ;对端口C的方向控制码00H先送W
       MOV wf   trisc       ;再由W转移到方向控制寄存器
       bcf     status,5    ;恢复到文件寄存器体0
       MOV lw   01h         ;将00000001B先送W
       MOV wf   portc       ;再由W转移到数据寄存器
       bsf     flag,0      ;将左右移标志位置1,首先进行左移LED
       bcf     status,0    ;将标志位C先清0
loop  btfss    status,0    ;测试进位/借位位,是1则修改标志
       goto    loop1       ;是0则不修改标志
       comf    flag,1      ;FLAG的BIT0作为标志位,把它取反
loop1  btfss   flag,0      ;判断标志位,是1则跳到循环左移
       goto    loop2       ;是0则跳到循环右移
       rlf     portc,0     ;循环左移端口C数据寄存器,结果送W
       MOV wf   portc       ;将结果再送回端口C的数据寄存器
       goto    loop3       ;跳过下面两条指令
loop2  rrf     portc,0     ;循环右移端口C数据寄存器,结果送回W
       MOV wf   portc       ;将结果再送回端口C的数据寄存器   ;
loop3  call    delay       ;调用廷时子程序
       call    delay       ;调用廷时子程序
       goto    loop        ;返回
;-------------------------廷时子程序----------------------------
delay                       ;子程序名,也是子程序入口地址
       MOV lw   0ffh         ;将外层循环参数值FFH经过W
       MOV wf   20h          ;送入用作外循环变量的20H单元
lp0    MOV lw   0ffh         ;将内层循环参数值FFH经过W
       MOV wf   21h          ;送入用作内循环变量的21H单元
lp1    decfsz  21h,1        ;变量21H内容递减,若为0跳跃
       goto    lp1          ;跳转到LP1处
       decfsz  20h,1        ;变量20H内容递减,若为0跳跃
       goto    lp0          ;跳跃到LP0处
       return               ;返回主程序
       end                  ;源程序结




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法