Första asm program för pic 16f676

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
marcla
Inlägg: 311
Blev medlem: 19 juli 2006, 11:36:38
Ort: Gislaved

Första asm program för pic 16f676

Inlägg av marcla »

Hej har skrivit mitt första program i asm för pic men det vill inte funka...

Kod: Markera allt

processor 16f676
include <p16f676.inc>
 __CONFIG   _BODEN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _MCLRE_ON
                                STATUS     equ 03h
                                PORTC      equ 07h
                                TRISC       equ 87h
                                K              equ 1Eh
		
MAIN                            BSF           STATUS,5
                                MOVLW      00h	 
                                MOVWF      TRISC
                                BCF           STATUS,5
		
LOOP                            MOVLW      b'11111'
                                MOVWF      PORTC
		
                              
                                call DELAY
		
                                MOVLW      00h
                                MOVWF      PORTC

                                
                                call DELAY

                                GOTO LOOP
		
DELAY
                                MOVLW D'255'
                                MOVWF K
DO                              DECFSZ K, 1
                                GOTO DO
RETURN
end	
Det händer inget när jag kör programmet...
Där emot om jag nuddar kristallen då tänds dioderna en liten stund sedan släcks dem...
Är det något fel med min konfig av kristallen var görs konfigureringen i MPLAB?
När jag kör programeraren får jag varningen: "No config word in file"
Senast redigerad av marcla 20 juni 2008, 13:17:25, redigerad totalt 4 gånger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kolle lite på dessa exempel och försök igen... :-)
http://www.jescab.se/PIC16.html

Även här har du ett simpelt exempel:
http://www.jescab.se/abs_reloc.html
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Gör man det på rätt sätt så gör man det med assemblerdirektiv i källkoden. Läs på i manualen till MPASM. Fördelen är då att inställningarna finns med i hexfilen till den färdiga applikationen, och behöver inte ställas in i programmeraren.
Användarvisningsbild
marcla
Inlägg: 311
Blev medlem: 19 juli 2006, 11:36:38
Ort: Gislaved

Inlägg av marcla »

Gjorde ett nytt program:

Kod: Markera allt

processor 16f676
include <p16f676.inc>
__config _RC_OSC & _WDT_OFF & _PWRTE_ON

org 0

movlw B'00000000' 
tris PORTC 

movlw B'00000001'
movwf PORTC

fin: goto fin
end
men då får jag följande fel:

Kod: Markera allt

Error[113]   C:\USERS\MARTIN\DESKTOP\PIC\ASM\BLINK A LED\LED.ASM 3 : Symbol not previously defined (_RC_OSC)

Vad är fel?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Varför _RC_OSC ???
Varför tror du att det skulle fungera ?

Se databladet samt (slutet av) p16f676.inc.
Användarvisningsbild
marcla
Inlägg: 311
Blev medlem: 19 juli 2006, 11:36:38
Ort: Gislaved

Inlägg av marcla »

Ok ändrade till _XT_OSC och då tännds dioderna men när jag det första programmet som blinkar led då tänds bara dioderna och inget mer????
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Vad har du för kristall?

På högre frekvenser (kommer inte ihåg var gräsen går) så skall man använda HS-oscillator.
Användarvisningsbild
marcla
Inlägg: 311
Blev medlem: 19 juli 2006, 11:36:38
Ort: Gislaved

Inlägg av marcla »

Kör 4mhz
Och enl. datablad så skall det vara XT
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Ditt delay är kort, det kan mycket väl vara att LED'n blinkar men så snabbt att du inte ser det.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kör i MPSIM och sätt på "stopwatch" så ser du vilken blinkfrekvens du får.
Eller bara räkna ut den, det är ju bara 1 instruktion i delay-loopen...

> DO DECFSZ K, 1

Srkiv *aldrig* "0" eller "1", använd alltid "F" eller "W"...

> MOVLW b'11111'
> MOVWF PORTC

Ange alltid 8 bitar.

> BCF STATUS,5

Använd alltid symbolerna som är definierade, aldrig bara en siffra.

> MOVLW 00h
> MOVWF TRISC

Samma sak som "CLRF TRISC"...
Användarvisningsbild
marcla
Inlägg: 311
Blev medlem: 19 juli 2006, 11:36:38
Ort: Gislaved

Inlägg av marcla »

Ok!
Dioden blinkade men för snabbt för att se...

SODJAN: Så hur skall man skriva BCF STATUS,5 så att det blir rätt?
BMI
Gått bort
Inlägg: 496
Blev medlem: 31 juli 2006, 22:29:08
Ort: Halmstad

Inlägg av BMI »

BCF STATUS,RP0

Enligt Inc filen för P16F676

Kod: Markera allt

;----- STATUS Bits --------------------------------------------------------

IRP                          EQU     H'0007'
RP1                          EQU     H'0006'
RP0                          EQU     H'0005'
NOT_TO                       EQU     H'0004'
NOT_PD                       EQU     H'0003'
Z                            EQU     H'0002'
DC                           EQU     H'0001'
C                            EQU     H'0000'
Senast redigerad av BMI 20 juni 2008, 16:34:22, redigerad totalt 1 gång.
Användarvisningsbild
marcla
Inlägg: 311
Blev medlem: 19 juli 2006, 11:36:38
Ort: Gislaved

Inlägg av marcla »

ok!
tack
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Grejen med det är att OM man använder de "rätta" bitnamn kan samma mjukvara kompileras i ett annat projekt där bitsen heter det samma men kan vara flyttat i placering.

Dessutom är det mycket enklare att läsa programmet, det blir mer logisk.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Dessutom är det mycket enklare att läsa programmet,...

Jag skulle säga att det *primärt* är för kunna läsa koden
utan att sida med databladet i handen varje gång.

Står det bara "5", så måste jag kolla att det är rätt.
Står det "RP0" så vet jag att det är rätt...
Skriv svar