Kod till PIC16F877A-- Edit: 887

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

Inlägg av sodjan »

Du kan köra på precis vilken kristall du vill, bara du håller
dig inom "ramarna", d.v.s t.ex *max* 20 Mhz. Att bara vissa
värden är godkända är en missuppfattning. Ofta är "udda"
frekvenser önskvärda för att t.ex få baudrates med 0% fel..

> Jag menar att i data bladet står det att 4 8 och 20Mhz går.

Visst, och det är helt rätt.
Men det fungerar med en massa andra värden också... :-)
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

Läs databladet sid 162, under kolumnen "Max".

Så länge du håller dig under dessa värden så har det noll och ingen betydelse - sett ur PIC:ens överlevnads-/funktionssynpunkt - vilken hastighet din klocka har.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Ja! :happy: Då behöver jag förhoppningsvis inte slänga mina som jag har nu :D

Ska testa så fort jag får tid!

//Daniel Andersson
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

Slänga? SLÄNGA?!
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Ja du, en del på forumet använder hemska ord. *ryser* :D
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

:lol:

Säger hamstern!
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag syftade inte på slänga i en sopyunna utan i en hörna där de kan ligga tills de är antika :)

//Daniel A
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Nu har jag läst i databladet men fattar ändå inte riktigt hur sodjans kod funkar. (den första sodjan skrev). Jag har alldrig använt en timer men det tror jag att jag fattar hur det funkar, men inte hur den blinkar. "comf" är ju det enda kommandot som har med det att göra, eller?? Då måste den ju byta status på pinnen så att om den är 1 så blir den nol och tvärt om?? Funkar det att koppla en LED på vilken pinne som helst i portA?

Edit: Var ska 16F877A.LNK ligga, och var hittar jag den?

Mvh. Daniel Andersson
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, jag tror att jag vet vilken kod du menar...

COMF inverterar ett register, i detta fall tror jag att det var PORTA.

Så alla "1" blir "0" och tvärtom. Det var bara en genväg för att
blinka med en pinne, eftersom det inte finns någon instruktioner
som bara gör det med en pinne.

> Funkar det att koppla en LED på vilken pinne som helst i portA?

I *detta* fall skulle det göra det, ja.

COMF instruktionen ligger i den rutinen som Timer1 interuptet
kör regelbundet (varje gång som Timer1 räknar från h'FFFF'
till h'0000')

Alla LKR filer ligger i LKR katalogen där MPLAB är installerat.
Om jag skrev LNK så är det ett skrivfel...
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Okej jag förstår det mesta nu :)

"Om jag skrev LNK så är det ett skrivfel..." Okej, Då förstår jag, jag hittade LKR men inget LNK och jag kan inte så mycket av den biten så jag kunde inte räkna ut själv att det var ett skrivfel.

Tack!
Mvh. Daniel Andersson
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag gör ofta det felet, styrfilerna till länkaren i i RSX-11/M (PDP11)
hette just LNK. Det var 10-15 år sedan, men det sitter kvar :-)
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Då vet jag det till framtiden när jag tar en kod som du gjort :)

:happy: Jag lyckades få den att blinka trotts att jag först kopplade fel och körde 2amp genom den!

Mvh. Daniel Andersson
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Perfekt.
Nu blir allt mycket enklare när du väl har *en* kod som fungerar.
Nu är det bara att bygga vidare... :-)
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jepp :)

En bit av koden:

Kod: Markera allt

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
        clrf    trisd
        clrf    trise             ; 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...
Om jag inte vill använda timern kan jag då ta bort allt detta pluss biten med "BLINKA!"?

Kod: Markera allt

   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...
Mvh. Daniel Andersson
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Använda och använda...

Om du bara vill undvika avbrott/interrupt från timer1, så räcker det
med att *inte* sätta TMR1IE i PIE1. Timer1 kommer fortfarande
att "snurra", men det är inget som varken stör eller syns.

Om du vill använda timer1 till annat, så får du konfigurera den
så det passar.

Om du vill att timer1 står still, så får du stänga av den.
"0" -> TMR1ON i T1CON.

Så det beror på vad du vill göra...

Bitern med "BLINKA!" kan du ta bort eller låta vara kvar, den
kommer i alla fall aldrig att köras. Det beror också på vad du vill göra...
Skriv svar