Kom-igång-problem med PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
scilattji
Inlägg: 3
Blev medlem: 20 juli 2006, 21:06:10
Ort: Borås

Kom-igång-problem med PIC

Inlägg av scilattji »

Tjena!

Har problem med att få igång min assemblerkod till min PIC16f870.

Har skrivit följande kod i MPLAB:

Kod: Markera allt

	list	p=pic16F870
		#include <P16F870.inc>


		
		org		0000h
		goto		START			
		org		0005h
			
			
			
START:		bcf		STATUS,RP1
		bsf		STATUS,RP0		
		movlw		00h
		movwf		TRISB			
		bcf		STATUS, RP0

		movlw		0Fh
		movwf		PORTB

LOOP:		nop			
		goto		LOOP

		
			end




tänkte att det borde tända några lysdioder på PORTB, men när jag mäter har jag 0V ut på alla pinnar.

Dessutom får jag följande meddelande i MPLAB:

Kod: Markera allt


Clean: Deleting intermediary and output files.
Clean: Deleted file "test.err".
Clean: Deleted file "G:\Programmering\test\test.cod".
Clean: Deleted file "G:\Programmering\test\test.hex".
Clean: Deleted file "test.lst".
Clean: Done.
Executing: "C:\Program\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F870 "test.asm" /l"test.lst" /e"test.err"
Message[302] G:\PROGRAMMERING\TEST\TEST.ASM 15 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Loaded G:\Programmering\test\test.COD.
BUILD SUCCEEDED: Thu Jul 20 21:56:47 2006
det där med "Register in operand not in bank 0." förstår jag inte riktigt..rad 15 är den med TRISB men jag bifinner mig ju i bank1..eller??
har jag gjort nån annan tavla??


har testat att ladda ner ett blink-a-led program och då funka allt som det skulle..
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Posta gärna blinka-led-programmet också så får man något att jämföra med.
scilattji
Inlägg: 3
Blev medlem: 20 juli 2006, 21:06:10
Ort: Borås

Inlägg av scilattji »

blink-a-led programmet var bara en hex fil jag laddade ner från nätet. menade bara att jag har fått själva programmeringen av kretsen att funka men det var lite otydligt skrivet...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Message302 är bara en *varning*. MPASM vet inte vilken bank din
kod befinner sig i, så den varnar bara och påminner om att det
är viktigt att det är rätt... :-)
Det finns olika metoder att bli av med dom, men strunta i det så länge.

Sen har du ingen __CONFIG, så du får default konfig, vad nu det är.

Använd gärna BANKSEL istället för direkta bcf/bsf på RP0/RP1. Koden
blir renare och en felkälla försvinner. Kolla MPASM/MPLINK manualen
för detaljer (sidan 52)...


Här är ett blink-a-LED program till en 16F870 :

Kod: Markera allt

;**********************************************************************
;   Enkelt blink-a-led, 16F870.                                       *
;                                                                     *
;**********************************************************************
;    Files required:  P16F870.INC                                     *
;                     16F870.LNK                                      *
;                                                                     *
;**********************************************************************


	list      p=16f870
	#include <p16f870.inc>
	
	__CONFIG   _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

RESET_VECTOR    CODE    0x000     ; processor reset vector
	    goto    start             ; go to beginning of program


INT_VECTOR      CODE    0x004     ; interrupt vector location
        goto    isr_routine       ; goto main interrupt service routine.
        

MAIN    CODE

start
        banksel adcon1
        movlw   h'06'
        movwf   adcon1            ; Stäng av ADC.


        banksel trisa
        clrf    trisa
        clrf    trisb
        clrf    trisc             ; Alla pinnar = utgångar.

        banksel t1con
        movlw   b'00110001'
        movwf   t1con             ; Se datablad...
        
        banksel pie1
        movlw   b'00000001'
        movwf   pie1              ; Enable avbrott från TMR1.

        banksel intcon	
        bsf     intcon, peie
        bsf     intcon, gie       ; Enable avbrott...

loop
        goto loop                 ; Vänta på avbrott...
 


ISR_ROUTINE  CODE

isr_routine

        banksel portb
        comf    portb            ; Blinka !!

        banksel pir1
        bcf     pir1, tmr1if     ; clear avbrotts flagga.

        retfie


		END


Skriv svar