![]() |
|||
| 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.