Re: Asm. Funderingar hos en nybörjare.
Postat: 18 mars 2010, 19:14:07
Okej. 

Svenskt forum för elektroniksnack.
https://elektronikforumet.com/forum/
Ganska så...Hur "lätt" är det att använda en roterande encoder då?
Kod: Markera allt
; Alps EC12 series rotary encoder connected to RA4, RA5
;
check_rbif
BTFSS INTCON, RBIF ; Was the cause PortB interrupt?
GOTO other_int ; no, check other interrupt
MOVF ENC_PORT, W ; Port B change caused interrupt.Read PortA
andlw b'00010000' ; Check if RB4 high
btfsc status,z
goto check_rbif_exit ; Nope
call delay_500us
MOVF ENC_PORT, W ; Read PortB again
movlw new
andlw b'00010000' ; Check if RB4 high
btfsc status,z
goto check_rbif_exit
; RA4 was apparently still high, what about Rb3?
MOVF ENC_PORT, W ;
andlw b'00001000' ; Check if Rb3 high to determine direction
btfsc status,z
goto decrement
increment
;incf value
movlw value
call inc32z
goto check_rbif_exit
decrement
;decf value
movlw value
call dec32z
check_rbif_exit
BCF INTCON, RBIF ; Clear the RAB interrupt flag.
goto exit_interrupt
Men gör du som jag föreslås behövs inga exakta delays, se annars:Tror jag skall börja med att fundera hur jag skriver delayrutinerna.
Just nu är det dock väldigt mycket grekiska för mig.AndersG skrev: Om du t ex har en 1MHz klocka och en 16-bits timer och sätter interrupt on overflow så får du en tick varje 0,262 sek (anta att timern matas med fosc/4). Då behöver du bara räkna upp till 329595 för 24 h
Med en 32-bitars räknare klarar du det elegant.
Notera att *moderna* PIC's alltid reset'ar till första program adressen (somThe PC is set upon a Reset, which means that the PC addresses the last
location in the last page (i.e., the oscillator calibration instruction). After
executing MOVLW XX, the PC will roll over to location 00h and begin
executing user code.
Men det kan den inte rent mekaniskt. Den har knäpplägen.Men säg att din encoder stannar precis i omslagsområdet för kanal A