Jag fick hem boken "Microcontrollers" av Lars Bengtsson här om dagen och har nu satt igång att pyssla lite.
I första kapittlet bygger man och programmerar en enkel AND grind. Detta har jag fått att fungera utan några större problem och jag tror mig förstå vad som verkligen händer i koden.
Nu till min fråga:
Som övningar till detta exempel ska man konstruera en OR-grind med hjälp av de instruktioner som man byggde upp AND-grinden med. Jag även har lyckats få detta att fungera men jag har ju ingen som kan kontrollera att det jag gjort verkligen är det korrekta sättet att göra det på. Jag skulle uppskatta mycket om någon tog sig lite tid att titta på det samt kanske ge råd på andra sätt problemet kan lösas.
Lite information om uppkopplingen för de som inte har boken.
PIC:en är uppkopplad utan kristall och använder ett RC-nät (R=10k och C=100pF) på pin 16. Detta ger enligt författaren en klockfrekvens (Fosc) på ca 600KHz. På RB0 samt RB1 är två strömbrytare (SPDT) kopplade (dessa växar mellan VDD och VSS). På RB5 är en LED kopplad via en resistor på 100ohm (i boken, jag använder 220ohm).
Min koppling ser ut så här:

Här är flödesschemat för koden:

Och slutligen, koden:
Kod: Markera allt
list p = 16F84A ;Processor PIC16F84A.
#define status 3 ;Status registret.
#define rp0 5 ;Bankselect bit.
#define trisb 86 ;TRISB.
#define portb 6 ;Port B.
org 0
bsf status,rp0 ;Välj bank 1 (Bit set).
movlw 3 ;00000011, flytta "3" till W. (Move Litteral to W)
movwf trisb ;Flytta W till TRISB. (Move W to F)
bcf status,rp0 ;Välj bank 0 (Bit Clear).
bcf portb,5 ;Pin 5 på Port B = 0. (Bit Clear).
main:
btfss portb,0 ;Testa pin 0 på Port B. Om 1, hoppa över nästa instruktion. (Bit Test, Skip If Set).
goto or1 ;Gå till OR1.
bsf portb,5 ;Pin 5 på Port B = 1. (Bit Set).
goto main ;Gå till huvudloop.
or1:
btfss portb,1 ;Testa pin 1 på Port B. Om 1, hoppa över nästa instruktion. (Bit Test, Skip If Set).
goto off ;Gå till off.
bsf portb,5 ;Pin 5 på Port B = 1. (Bit Set).
goto main ;Gå till huvudloop.
off:
bcf portb,5 ;Pin 5 på Port B = 0 (Bit Clear)
goto main ;Gå till huvudloop
end
Kom gärna med förslag. Eftersom att detta är "mitt" första ASM program så har jag säkert inte tänkt på allt.
EDIT: Fixade ett fel i schemat.