Sida 1 av 1

Första asm program för pic 16f676

Postat: 19 juni 2008, 19:31:23
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"

Postat: 19 juni 2008, 19:37:23
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

Postat: 19 juni 2008, 21:20:25
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.

Postat: 20 juni 2008, 11:07:33
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?

Postat: 20 juni 2008, 11:29:12
av sodjan
Varför _RC_OSC ???
Varför tror du att det skulle fungera ?

Se databladet samt (slutet av) p16f676.inc.

Postat: 20 juni 2008, 13:12:03
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????

Postat: 20 juni 2008, 13:20:58
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.

Postat: 20 juni 2008, 13:26:23
av marcla
Kör 4mhz
Och enl. datablad så skall det vara XT

Postat: 20 juni 2008, 14:01:19
av Icecap
Ditt delay är kort, det kan mycket väl vara att LED'n blinkar men så snabbt att du inte ser det.

Postat: 20 juni 2008, 14:13:08
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"...

Postat: 20 juni 2008, 16:00:15
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?

Postat: 20 juni 2008, 16:29:25
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'

Postat: 20 juni 2008, 16:33:17
av marcla
ok!
tack

Postat: 20 juni 2008, 21:13:50
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.

Postat: 21 juni 2008, 01:55:59
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...