Jag har den kopplad med en 4MHz kristall och så enligt de enklaste tutorialsen. Mikrobrytarna har jag kopplat så de bara kortsluter +5V med respektive pinne. Utgångarna har jag indikerat mha lysdioder nu. Jag använder vanliga tangentbordsströmställare just nu istället för mikrobrytarna för att enklare experimentera.
Nu till problemet: Programmet verkar fungera bra, ända tills jag kommer för nära sladdarna med mina händer, då börjar lysdioderna blinka osv.. Hur ska jag koppla det för att komma bort från detta problem eller ska jag skriva nåt i koden?
Här är koden lite grejer är utkommentera och så men det är denna jag laddade microprocessorn med. (.asm)
Kod: Markera allt
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^;
; bose ;
; Säkerhetsprogram för ;
; styrning av ;
; Pneumatisk lyft ;
; till projektarbetet ;
; Datorstyrd truck ;
; ;
; --- TE3 ;
; Furulundsskolan 2006 ;
; ------------ ;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^;
;Made for PICmicro 16F84A
;RB1 (pin7)=Input 1 (Signal från kortet. 1=Uppe 0=Nere)
;RB2 (pin8)=Input 2 Microbrytare nere (1=nere 0=?)
;RB3 (pin9)=Input 3 Mikrobrytare uppe (1=uppe 0=?)
;RA0 (pin17)=Output 1 Magnetventil ner
;RA1 (pin18)=Output 2 Magnetventil upp
;RA2 (pin1)=Output 3 Kompressor på
;PORTA =Outputs
;PORTB =Inputs
;******Konstanterna*******;
STATUS equ 03H
OPT equ 81H
TRISB equ 86H
PORTB equ 06H
TRISA equ 85H
PORTA equ 05H
COUNT1 equ 08H
COUNT2 equ 09H
;***Konfigurera portarna***;
BSF STATUS,5 ;gå till bank 1
movlw b'11111111' ;ställ in portarna
movwf TRISB ;flytta W till TRISB registret
movlw b'00000' ;ställ in outputarna
movwf TRISA ;flytta till trisa registret
;BCF OPT,7 ;Pull-Up på portb
BCF STATUS,5 ;Tillbaka till bank 0
;****Watch Dog Timer****;
;bcf STATUS,0 ;Bank 0
;clrf 01h ;address of the other timer TMR0
;bsf STATUS,0 ;switch to bank 1
;clrwdt ;reset the WDT and prescaler
;movlw b'1111' ;Select the new prescaler value and assign 2,3s
;movwf OPT ;it to WDT
;bcf STATUS,0 ;come back to bank 0
;*****Programmet*****;
START
BTFSC PORTB,1 ;kolla om RB1=1 i så fall gå till subr Upp
Call Upp ;om RB1=0 testa igen
BTFSS PORTB,1 ;kolla om RB1=0 i så fall gå till subr Ner
Call Ner ;om den inte är det börja om från början
goto START ;Gå tillbaka till början av programmet
;***Subroutine Hissa upp gafflarna och kontrollera att de är uppe***;
Upp
BTFSC PORTB,3 ;kolla om mikrobrytaren uppe=1
goto START ;Om den är uppe behöver inget göras och vi testar igen
movlw b'00110' ;skicka bitarna för att sätta igång RA1 och RA2
movwf PORTA ;skicka de till PORTA
;clrwdt ;nollställ WDT
Check1
BTFSS PORTB,3 ;Kolla om mikrobrytaren uppe=1
goto Check1 ;om den inte är det kolla igen
clrf PORTA ;Stäng av
Return ;annars gå tillbaka till huvudprogrammet
;***Subroutine Hissa ner gafflarna och kontrollera att de är nere***;
Ner
BTFSC PORTB,2 ;Kolla om mikrobrytaren nere=1
goto START ;Om den är nere behöver inget göras och vi testar igen
movlw b'00101' ;skicka bitarna för att sätta igång RA0 och RA2
movwf PORTA ;Skicka de till PORTA
;clrwdt ;nollställ WDT
Check2
BTFSS PORTB,2 ;Kolla om mikrobrytaren nere=1
goto Check2 ;om den inte är det kolla igen
clrf PORTB ;Stäng av
Return ;annars gå tillbaka till huvudprogrammet
;***Subroutine delay räkna ner 255-->0 255ggr***;
;Delay
;Loop1
;decfsz COUNT1,1
;goto Loop1
;clrwdt ;nollställ WDT
;decfsz COUNT2,1
;goto Loop1
;clrwdt ;nollställ WDT
;Return
end