Det program är i absolut mode och det vettigaste är väl att lära honom från början att använda relokerbart mode... men de DET går inte!
Jag har skrivit om programmet en aning, har rensat det ganska mycket och det finns inte ett suck att det kan fungera!
Kod: Markera allt
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
errorlevel -302
My_Vars UDATA
My_Swap res 1
STARTUP CODE
goto Start
nop
nop
nop
nop ; Really to be goto "ISR-routine"
Start:
banksel TRISA
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output
movlw 0x10 ; A2D Clock Fosc/8
movwf ADCON1
banksel ANSEL
movlw 0xFF ; we want all Port A pins Analoga
movwf ANSEL
banksel ADCON0
movlw 0x01
movwf ADCON0 ; configure A2D for Channel 0 (RA0), Left justified, and turn on the A2D module
nop ; wait 5uS for A2D amp to settle and capacitor to charge.
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
MainLoop:
bsf ADCON0,GO ; start conversion
Wait4It:
btfsc ADCON0,GO ; this bit will change to zero when the conversion is complete
goto Wait4It
movf ADRESH, W
movwf My_Swap
rrf My_Swap, F
rrf My_Swap, F
rrf My_Swap, F
rrf My_Swap, W
andlw 0x0F
movwf PORTC
goto MainLoop
end
:020000040000FA
:040000000034003494
:0C00040007280000000000000000831628
:100010000313FF308500870110309F008312031700
:10002000FF309E008312031301309F000000000088
:100030000000000000009F149F181C281E08003EAE
:10004000A000A00CA00CA00C200C0F3987001B28CE
:100050008207013402340434083404340234013495
:1000600000340934093406340634003400340F34C3
:020070000F344B
:02400E00D430AC
:00000001FF
och där framgår det att de 2 första kommandon är 0x3400 = IORLW 0x00 varefter programmet verkar komma i tänkt orden.
När jag blåser in det i kretskortet som följer med är den stendöd, om jag istället simulerar i MPLAB SIM får jag en kämpa hög med
"CORE-E0002: Stack under flow error occurred from instruction at 0x000000" och den stoppar efter 200 st av dessa.
Om jag istället ändrar lite till ABSOLUT MODE fungerar skiten alldeles utmärkt.
Jag ändrar starten av programmet till:
Kod: Markera allt
cblock 0x20
My_Swap
endc
org 0x000
goto Start
nop
nop
nop
nop ; Really to be goto "ISR-routine"
Start:
banksel TRISA
MPLAB är senaste, nerladdad i morse men jag har haft samma problem tidigare men inte haft så mycket gång i PIC ett tag.
Och nu kommer frågan: varför tusan gör den på detta viset?