Sida 2 av 3

Re: Hur snabb är din port?

Postat: 26 januari 2013, 16:57:52
av 1802
Ja koden finns, men man skall förstå den med...

Kod: Markera allt

comf 7      ;This instruction inverts the bits in the register specified.
bsf 3,5     ;These instructions set (BSF) the indicated bit in a register.   
decf 70     ;Another common operation is to add or subtract 1 from a register. 
swapf 70,w  ;This peculiar command moves the low 4 bits of the register to the top 4 bits and the top 4 bits of the register to the bottom 4 bits. 
movwf 87    ;The W register is central to most programs. This instruction moves a constant into the W register.


Here are some of the more common registers:
All banks, 0x0 - Indirect register (INDF; see below).
Bank 0/2, 0x1 - Timer 0 register.
Bank 1/3, 0x1 - Option register.
All banks, 0x2 - Low 8 bits of program counter (current program location).
All banks, 0x3 - STATUS register. Contains flags that tell you if the last operation resulted in a zero result or generated a carry. Also contains the RP bits.
All banks, 0x4 - Indirect pointer (FSR; see below).
Bank 0, 0x5 - PORT A data bits.
Bank 1, 0x5 - PORT A direction bits.
Bank 0/2, 0x6 - PORT B data bits.
Bank 1/3, 0x6 - PORT B direction bits.
Bank 0, 0x7 - PORT C data bits.
Bank 1, 0x7 - PORT C direction bits.
All banks, 0xA - PCLATH (used to load high bits of program counter).
All banks, 0xB - Interrupt control register.
Jag har lagt till lite kommentarer och info, för att försöka förstå den.

Re: Hur snabb är din port?

Postat: 26 januari 2013, 17:47:47
av sodjan
Eftersom det inte finns någon GOTO till början av koden så
kommer den att löpa genom resten av minnet som NOP's.
Det i sig ger ju en fördröjning. Sen, om man är intresserad,
så är det bara att fundera lite på vad instruktionerna gör.
Det blir en del tydligare om man kör symboliskt:

Kod: Markera allt

comf   portc        ; byt 0 <-> 1 på PORTC (eller TRISC om bank 1/3 är vald).
bsf    status, RP0  ; byt till bank 1/3
decf   70           ; Minska värdet på adress h'70' (i non-banked memory)
swapf  70, w        ; Swap high/low nibble och lägg resultatet i W
movwf  87           ; Uppdatera TRISC med värdet i W
Enklast är att köra det i MPSIM och notera värdena efter hand.

Re: Hur snabb är din port?

Postat: 26 januari 2013, 19:01:52
av 1802
sodjan: Jag tackar och bockar :tumupp:

Vissa pic's går inte att radera(ex pic12c508a). Är det då NOP man skriver över innehållet med, så att man kan anv dessa chip flera ggr? Hur kan det då ligga NOP i obrända delar?

Re: Hur snabb är din port?

Postat: 26 januari 2013, 19:10:18
av TomasL
Nej ett OTP-chip används bara en gång, blir det fel får man kasta den, och ta en ny.

Re: Hur snabb är din port?

Postat: 26 januari 2013, 19:11:15
av TomasL
sodjan skrev: Detta måste var den mest undrliga tråden på ganska länge...
Ja, jag fattar heller inte mycket av den.

Re: Hur snabb är din port?

Postat: 26 januari 2013, 19:13:08
av sodjan
> Vissa pic's går inte att radera(ex pic12c508a). Är det då NOP man skriver över innehållet med...

Man kan inte skriva p.g.a att man inte kan radera. Eller tvärtom...

Re: Hur snabb är din port?

Postat: 26 januari 2013, 19:18:40
av 1802
Som jag fattat det så går det att skriva flera ggr. Men bara från 0 till 1 eller om det var tvärt om. Typ som ett EPROM. Genom att då skriva över använda data med 00 eller om det var ff. Kan man fortsätta om det finns minne kvar. Det man skriver över med tror jag är NOP.

Re: Hur snabb är din port?

Postat: 26 januari 2013, 21:45:12
av TomasL
Nej, du har fattat det helt fel, en raderad processor är fylld med NOPar, och eftersom du inte kan radera en OTP-processor, kan du ej heller fylla den med NOPar.
Dessutom kan du inte skriva till konfigurationsregistren.

Följaktligen kan du inte återanvända den.

Re: Hur snabb är din port?

Postat: 26 januari 2013, 21:46:51
av TomasL
1802 skrev:Och det blir hur många bitars binärräknare snabbare än ögat? Obs det är inte bara den snabbaste jag är ute efter. Alla exempel är välkomna.

Ofta kommer frågan varför, jag svarar med ett citat. "Om du behöver fråga, så förstår du inte svaret."
Skulle villa påstå tvärtom. eller rättare sagt, eftersom du frågar, så......

Re: Hur snabb är din port?

Postat: 28 januari 2013, 12:13:50
av anders_w
Inte för jag förstår vad tråden handlar om, men jag använder ofta denna princip när jag håller på med FPGA. Då får man använda ungefär bit 26 för att komma ner under 1 Hz. En blinkande lysdiod ger mer information än man kan tro...

Re: Hur snabb är din port?

Postat: 28 januari 2013, 12:55:33
av 1802
anders_w: :tumupp: första svaret.

Re: Hur snabb är din port?

Postat: 28 januari 2013, 13:31:14
av TomasL
1802, det svaret är ju fullständigt ointressant.
Om jag i en PIC32 kör en normal while(1)-loop och räknar upp en 16-bitars-port, får jag rätt låg frekvens på samtliga bitar om jag kör med 1Hz klockfrekvens, kör jag med 80 MHz och en PB-klocka om 40 Mhz, får jag med debug-kod ut 4 MHZ på bit 1, och runt 122 Hz på bit 15.
Fortfarande är det fullständigt ointressant och säger ingenting om systemet som sådant.

Re: Hur snabb är din port?

Postat: 28 januari 2013, 17:19:23
av anders_w
Ointressant för dig, men kanske inte för 1802? Ingen vet ju varför 1802 frågar eller vad informationen ska användas till. Vilket heller inte spelar någon roll förutom för 1802 som möjligtvis kunde få fler svar genom att berätta det.

Re: Hur snabb är din port?

Postat: 29 januari 2013, 03:22:09
av 1802
Jag tycker det framgår tydligt i tråden. Att jämföra olika plattformars port hastighet. Blinka LED gör nog de flesta som första projekt. Och stöter på problemet att det blinkar fortare än man kan se. I vissa system med tex basic, räcker en 8 (har inte kollat min qbasic rutin än)bitars räknare för att det skall börja blinka tydligt synligt. Och även om man bara har en LED, kan man välja att visa rätt bit i binärräknaren. Att det sen är fler parametrar att jämföra mellan plattformar, har också framkommit i tråden.

Re: Hur snabb är din port?

Postat: 29 januari 2013, 07:52:23
av TomasL
Nej det framgår inte speciellt tydligt, eftersom det faktiskt dels beror på vilken hastighet man kör på och dels vilken applikation man kör.

Man behöver inte alltid alls använda räknare eller liknande för att blinka en led tydligt.
Så frågan är omöjlig att svara på.

Skall jag blinka led, så använder jag en vTaskdelay(1000) till exempel, eller också pollar jag coretimer, eller något liknande.