;ST套件8位流水灯实例程序 ;本程序的功能是,将RB的8条引脚全部设置为输出模式,依次从RB0; ;到RB7送出高电平,然后再依次从RB7到RB0送出高电平.并且周而复始; ;从而使接在RB口的LED循环往返发光; ;烧写时应注意:配置位已经在程序中写明,加载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