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.
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:
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.
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?
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.
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.
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...
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.
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.
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.