At some stage in your work you will have to change micro’s. It may be to change from a “One Time Programmable” chip to a flash version, or it may be to a chip with more features, such as Analogue to Digital Conversion.
Or it may be to our low-cost MCV08A - with 1k of program, 1 - ADC and precision 0.6v reference.
Changing from one chip to another is not easy as the files (the files you use to store temporary data during the running of a program) start at different addresses.
That’s why this information is important, so you can plan ahead and make the transfer as simple as possible.
At the start of a program we use “equates.”
This is simply assigning each name used in the program, to a file.
Suppose we create a delay sub-routine. Suppose it requires two files. We call them: “del1” and “del2” (for delay1 and delay2).
For a PIC micro with the code: MCV08A, the first available file is 0Ah. For a PIC12F629, the first available file is 20h and for a PIC12F508/9, it is 07h, as shown in the file map:
Since the General Purpose Registers start at different locations, del1 and del2 will be file 0Ah, and 0Bh for the MCV08A and different numbers for the other two chips. To save moving all the files when changing chips, we have a simple way to make all files “automatically change.”
Up to now, we have advocated using “equates” to assign each file-name to one of the General Purpose Registers, thus:
timera equ 20h ;general purpose timer timerb equ 21h ;general purpose timer timerc equ 22h ;general purpose timer timerd equ 23h ;general purpose timer note_select equ 24h ;selection of note note_tone equ 25h ;frequency of note note_length equ 26h ;length of note note_tempo equ 27h ;tempo of song random equ 28h ;random number
All the file numbers will have to be moved when changing micro’s. To save this, and prevent any mistakes we use cblock. This is a directive used for defining files in a compact way. The format of cblock is:
cblock 0x20 ;define the start of the files. The first "file" or "register" for a 12F629 is 20h timera ;this will be file 20h timerb ;this will be file 21h timerc ;this will be file 22h etc etc etc endc
Each file on the list will be allocated the next General Purpose Register.
To make cblock universal, we use:
cblock RAMStart
The assembler will automatically equate the names you have used for your sub-routines with the start of the General Purpose Registers. For MCV08A, this will be 0Ah, and for PIC12F629 it will be 20h, etc.
cblock becomes:
cblock RAMStart timera timerb timerc timerd note_select note_tone note_length note_tempo random endc
The next things to consider are the different features of each chip:
cvcc
12-Bit PSEUDO Instruction Mnemonics
Mnemonic | (cont) | Description | Equivalent Operation(s) | (cont) | Status (file 03h) |
---|---|---|---|---|---|
ADDCF | f,d | Add Carry to File | BTFSC INCF | 03h,0 f,d | Z |
ADDDCF | f,d | Add Digit Carry to File | BTFSC INCF | 03h,1 f,d | Z |
B | k | Branch | GOTO | k | - |
BC | k | Branch on Carry | BTFSC GOTO | 03h,0 k | - |
BDC | k | Branch on Digit Carry | BTFSC GOTO | 03h,1 k | - |
BNC | k | Branch on No Carry | BTFSS GOTO | 03h,0 k | - |
BNDC | k | Branch on No Digit Carry | BTFSS GOTO | 03h,1 k | - |
BNZ | k | Branch on No Zero | BTFSS GOTO | 03h,2 k | - |
BZ | k | Branch on Zero | BTFSC GOTO | 03h,2 k | - |
CLRC | Clear Carry | BCF | 03h,0 | - | |
CLRDC | Clear Digit Carry | BCF | 03h,1 | - | |
CLRZ | Clear Zero | BCF | 03h,2 | - | |
LCALL | k | Long Call | BCF/BSF BCF/BSF CALL | 0Ah,3 0Ah,4 k | |
LGOTO | k | Long GOTO | BCF/BSF BCF/BSF GOTO | 0Ah,3 0Ah,4 k | |
MOVFW | f | Move File to W | MOVF | f,0 | Z |
NEGF | f,d | Negate File | COMF INCF | f,1 f,d | Z |
SETC | Set Carry | BSF | 03h,0 | - | |
SETDC | Set Digit Carry | BSF | 03h,1 | - | |
SETZ | Set Zero | BSF | 03h,2 | - | |
SKPC | Skip on Carry | BTFSS | 03h,0 | - | |
SKPDC | Skip on Digit Carry | BTFSS | 03h,1 | - | |
SKPNC | Skip on No Carry | BTFSC | 03h,0 | - | |
SKPNDC | Skip on No Digit Carry | BTFSC | 03h,1 | - | |
SKPNZ | Skip on Non Zero | BTFSC | 03h,2 | - | |
SKPZ | Skip on Zero | BTFSS | 03h,2 | - | |
SUBCF | f,d | Subtract Carry from File | BTFSC DECF | 03h,0 f,d | Z |
SUBDCF | f,d | Subtract Digit Carry from File | BTFSC DECF | 03h,1 f,d | Z |
TSTF | f | Test File | MOVF | f,1 | Z |
Quick Links
Legal Stuff
Social Media