Jag håller på att (försöka) bygga en liten robot som ska gå frammåt tills den känner att den är på väg in i ngt, då ska den svänga. Jag använder mig av en Ultraljudssensor, SRF05 (http://www.robot-electronics.co.uk/htm/srf05tech.htm), och en PIC16F690. Nu har jag försökt göra ett program som ska få PICen att reagera (släcka en lampa) när något är närmare än ca en dm (som motsvaras av ca 384 uS). Problemet är bara att den inte gör det.
Nedanstående program har jag:
Kod: Markera allt
#include<C:\Program Files\Microchip\MPASM Suite\p16F690.inc>
__config(_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF &_CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
delay1
delay2
endc
cblock 0x70
W_save
STATUS_save
endc
org 0
goto Start
nop
nop
nop
ISR:
movwf W_save
movf STATUS,w
movwf STATUS_save
bcf PORTC,0 ; släck LED
movf STATUS_save,w
movwf STATUS
swapf W_save,f
swapf W_save,w
retfie
Start:
bsf STATUS, RP0
movlw b'0000100'
movwf TRISA
clrf TRISC
BSF STATUS,RP1 ;Bank 2
CLRF ANSEL ;digital I/O
bcf STATUS, RP0
bcf STATUS, RP1raktfram:
delayloop:
decfsz delay1, f ;väntar 2/10 s, för att man ska se om lampan blinkar.
goto delayloop
decfsz delay2, f
goto delayloop
bsf PORTC, 0 ; sätt på LED
bsf PORTA,1 ;sänd trigger
nop ; vänta 10 uS
nop
nop
nop
nop
nop
nop
nop
nop
nop
bcf PORTA, 1 ; slut på trigger
movlw B'1001000'
movwf INTCON ; globala interrupt och external interrupts är tillåtna
bcf OPTION_REG, 6 ;interrupta när RA2 faller
delay: ; vänta 768 uS
decfsz delay1,f
goto delay
movlw b'00000000'
movwf INTCON
goto raktfram
endÄr det någon som vet vad som är fel?
