PIC16F628A - Blinka den - Nybörjare

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Nickeh
Inlägg: 82
Blev medlem: 9 augusti 2006, 00:41:37
Ort: Linköping
Kontakt:

Inlägg av Nickeh »

Ett bra länktips är detta:
http://techtrain.microchip.com/x14/

Fick då igång mitt förstående för vad jag höll på med :)
Databladen kan vara lite svårsmälta ibland tycker jag. iaf. till en början när man inte har full koll på alla begrepp...
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg av brauer »

Edit: Problemet löst
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det tillhör god "netiquet" att även tala om vad som var problemet.
Så vad var problemt/lösningen ?
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg av brauer »

f'låt :)
Jag hade problem med att MPLINK inte gjorde någon HEX-fil. Jag tog bort .lkr-filen efter lite googlande och fick ut min fil.
Ny lyser LEDen iaf. Om man ska får den att blinka, ska man köra delay_funktioner eller lära sig timer direkt? Känns som om det är lika bra att ta itu med timern med en gång.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, det betyer att din assembler kod är skriven i "absolute mode".
MPLINK (och linker-scripts, LKR filer) används till "relocatable mode".

Du kan blinka med en timer och en interrupt rutin, t.ex som nedan.
Obs att exemplet är i relocatable mode, och du ska lägga till rätt LKR fil till projektet.

Kod: Markera allt

;**********************************************************************
;   Enkelt blink-a-led, 16F628A.                                       *
;                                                                     *
;**********************************************************************
;    Files required:  P16F628A.INC                                     *
;                     16F628A.LNK                                      *
;                                                                     *
;**********************************************************************


	list      p=16f628A
	#include <p16f628A.inc>
	
	__CONFIG   _DATA_CP_OFF & _CP_OFF & _LVP_OFF & _BODEN_OFF & _BOREN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _MCLRE_OFF

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 cmcon
        movlw   h'07'
        movwf   cmcon            ; Stäng av ADC.

        banksel trisa
        clrf    trisa
        clrf    trisb             ; 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    porta            ; Blinka !!

        banksel pir1
        bcf     pir1, tmr1if     ; clear avbrotts flagga.

        retfie

		end
Senast redigerad av sodjan 4 september 2006, 23:10:56, redigerad totalt 1 gång.
brauer
Inlägg: 90
Blev medlem: 20 februari 2005, 14:30:00

Inlägg av brauer »

Hm, det där fick jag ingen ordning på. Får läsa in mig mer på timern först.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag plockade in koden i MPLAB och justerade för 628A.
Den är utbytt i förra inlägget...
Skriv svar