www.pudn.com > st-asm.rar > 84led-d.asm


;ST套件8位流水灯实例程序 
;本程序的功能是,将RB的8条引脚全部设置为输出模式,依次从RB0; 
;到RB7送出高电平,然后再依次从RB7到RB0送出高电平.并且周而复始; 
;从而使接在RB口的LED循环往返发光; 
;PIC单片机学习网-----http://www.pic16.com 
;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。 
;实验时请注意套件跳线选择; 
;********************************************************* 
  LIST P=16F84A,R=DEC ;告诉使用器件为16F84A,默认为十进制; 
;--------------------------------------------------------- 
  __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC  
                                              ;没有代码保护 
                                              ;看门狗关闭 
                                              ;上电廷时器开启 
                                              ;振荡器模式为XT 
;----------------------- 
STATUS EQU 03H   ;定义各寄存器 
PORTA EQU 05H 
PORTB EQU 06H 
 
TRISA EQU 5H 
TRISB EQU 6H 
;---------------------- STATUS 
C EQU 0 
RP0 EQU 5 
;-------------------- 
FLAG EQU 23H   ;定义用户寄存器; 
;-------------------------- 
  ORG 00h  
  CLRF PORTA 
  CLRF PORTB    ;初始IO口; 
 
  bsf STATUS,RP0    ;设置数据寄存器1; 
  movlw B'00000000'  
  movwf TRISA       ;定义RA口全部为输出; 
  movlw B'00000000'  
  movwf TRISB       ;定义RB口全部为输出; 
  bcf STATUS,RP0    ;恢复数据寄存器0 
 
  movlw 01H         ;先认RB.0为1 
  movwf PORTB   
  BCF STATUS,C      ;清标志位C 
  BSF FLAG,0        ;置左右移标志位,先左移; 
LOOP 
  BTFSS STATUS,C    ;测试C,为1则修改标志位 
  GOTO LOOP1 
  COMF FLAG,1       ;取反左右移标志位 
LOOP1 
  BTFSS FLAG,0      ;FLAG.0为1左移,为0右移 
  GOTO LOOP2 
  RLF PORTB,0 
  MOVWF PORTB 
  GOTO LOOP3 
LOOP2 
  RRF PORTB,0 
  MOVWF PORTB 
LOOP3 
  CALL DELAY 
  CALL DELAY       ;调用廷时 
  GOTO LOOP        ;返回 
;----------------------- 
DELAY              ;0.2S廷时子程序 
  MOVLW 0FFH 
  MOVWF 20H 
LP0 
  MOVLW 0FFH 
  MOVWF 21H 
LP1  
 
  DECFSZ 21H,1 
  GOTO LP1 
  DECFSZ 20H,1 
  GOTO LP0 
  RETURN 
 
;--------------------- 
  END