kingman 发表于 2009-4-18 20:02:50

8位流水灯编程程序

;本程序的功能是,将RB的8条引脚全部设置为输出模式,依次从RB0;;到RB7送出高电平,然后再依次从RB7到RB0送出高电平.并且周而复始;;从而使接在RB口的LED循环往返发光;
;*********************************************************
LIST P=16F84A,R=DEC ;告诉使用器件为16F84A,默认为十进制;;---------------------------------------------------------
__CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
;没有代码保护

;看门狗关闭
;上电廷时器开启
;振荡器模式为XT;-----------------------STATUS EQU 03H
;定义各寄存器PORTA EQU 05HPORTB EQU 06H TRISA EQU 5HTRISB EQU 6H;---------------------- STATUSC EQU 0RP0 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 LOOP3LOOP2
RRF PORTB,0
MOVWF PORTBLOOP3
CALL DELAY
CALL DELAY
;调用廷时
GOTO LOOP
;返回;-----------------------DELAY
;0.2S廷时子程序
MOVLW 0FFH
MOVWF 20HLP0
MOVLW 0FFH
MOVWF 21HLP1
DECFSZ 21H,1
GOTO LP1
DECFSZ 20H,1
GOTO LP0
RETURN ;---------------------
END
页: [1]
查看完整版本: 8位流水灯编程程序