HSG |
|
Port A, Bit 0 wird mit einem 4,7 kΩ-Pull-Up-Widerstand auf eine 1 gezogen. Der Taster kann den Eingang auf 0 herunterziehen, wobei der 470 Ω-Widerstand als Schutzwiderstand für die Programmierphase dient.
processor pic16f877a include p16f877a.inc __config _HS_OSC & _WDT_OFF & _PWRTE_ON org 0x00 RESET: clrf STATUS movlw 0x00 movwf PCLATH goto main org 0x10 main: ; INITIALIZING PORTA (direkt aus Handbuch) bcf STATUS, RP0 ; bcf STATUS, RP1 ; Bank 0 clrf PORTA ; Initialize PORTA by clearing output data latches bsf STATUS, RP0 ; Select Bank 1 movlw 0x06 ; Configure all pins movwf ADCON1 ; as digital inputs movlw 0xCF ; Value used to initialize data direction movwf TRISA ; Set RA<3:0> as inputs, RA<5:4> as outputs ; TRISA<7:6> are always read as '0' ; ergänzt movlw b'11111110' ; PORTB<7:1> auf Eingang movwf TRISB ; PORTB<0> auf Ausgang bcf STATUS, RP0 ; wieder Bank 0 einschalten loop: btfsc PORTA,0 ; bit test skip if clear goto ein1 ; Taste nicht gedrückt, Eingang=1 ein0: movlw 0x1 ; Taste gedrückt, Eingang=0 movwf PORTB ; LED an RB0 einschalten ( mit 0 ein !) goto endloop ; Überspringen des ein1-Teils ein1: movlw 0x0 movwf PORTB ; LED an RB0 abschalten ( mit 1 aus !) endloop: goto loop end
Die Funktionalität des Programms ist sehr unspektakulär: Die LED leuchtet nur, wenn die Taste gedrückt ist. Das Programm zeigt übrigens auch, wie eine Alternative in Assembler programmiert werden kann.