Först och främst, underbart forum med mycket bra info och länkar!!
Jag har svårt och förstår beteendet i mitt program. Använder mig av MPLAB och skriver för en 16f690 PIC (PicKit2 från Kjell o Co.).
Programmet ska öppna upp några C-portar, där dioderna är kopplade på demokortet, sen flytta dioderna. Bör tillägga att det är min 2'a vecka i assembler, bare with me...
Kod: Markera allt
;Header och settings från MPLAB
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
org 0
Test equ 023h ;För att hålla mappningarna för C-porten när dioderna roteras
Cntr1 equ 024h ;Dessa tre räknare används av Delay funktionen
Cntr2 equ 025h
Cntr3 equ 026h
Start:
clrf PORTC ;bara för säkerhetsskull
movlw b'00000000'
tris PORTC ;sätt c-portarna till outputs
movlw b'00001111'
movwf Test ;Spara utgångsvärdet i Test
movwf PORTC ;sätt RC0-RC3 High <= Här hänger inte RC0 med (r-m-w problem?) :?:
call Delay ;vänta 0.5sek
call RotateSet ;rotera, resultatet blir att enbart RC1 lyser... märkligt :?:
call Delay
...osv några rader för att rotera Test ett helt varv
goto $ ;loopa kvar på denna rad, end verkar inte fungera då programmet startar om....?
RotateSet
rlf Test ;Rotera Test vänster, funkar bra, första gången blir detta b'00011110'
movlw Test ;Flytta värdet till w-registret, första flytten ger W=b'00100011' :?:
movwf PORTC ;Sätt värdet på C-portarna, första flytten ger (i MPLAB debugg) PORTC=b'00100000' :?:
return
Delay
här har jag en delay rutin som kommer från http://www.piclist.com/techref/piclist/codegen/delay.htm
return
end