#define usa movlw como lo habíamos comentado y const sólo usará salto a tablas cuando son muchos datos.
La optimización de CCS realmente es buena.
Usando un arreglo de constantes CCS sí genera la tabla en ROM...
#include "16f84a.h"
const int8 temp[] = {0xA0, 3,5,6,7,8,1,1,1};
void main()
{
int8 prueba[9];
int8 i;
for(i=0; i<9; ++i)
{
prueba=temp[i];
}
}
Esto es lo que genera:
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 011
0003: NOP
.................... #include "16f84a.h"
.................... //////// Standard Header file for the PIC16F84A device ////////////////
.................... #device PIC16F84A
.................... #list
....................
.................... const int8 temp[] = {0xA0, 3,5,6,7,8,1,1,1};
....................
....................
.................... void main()
.................... {
0011: CLRF 04
0012: MOVLW 1F
0013: ANDWF 03,F
.................... int8 prueba[9];
.................... int8 i;
....................
.................... for(i=0; i<9; ++i)
0014: CLRF 1B
0015: MOVF 1B,W
0016: SUBLW 08
0017: BTFSS 03.0
0018: GOTO 01F
.................... {
.................... prueba=temp[i];
0019: MOVF 1B,W
001A: CALL 004
001B: MOVWF 0D
001C: MOVWF 12
.................... }
001D: INCF 1B,F
001E: GOTO 015
.................... }
001F: SLEEP
La instrucción CALL 004 brinca a una subrutina con RETLW pero el volcado ASM LST no lo muestra. Winpic800 lo muestra así...
0x0000 : 0x3000 movlw 0x00
0x0001 : 0x008A movwf 0x0A
0x0002 : 0x2811 goto 0x11
0x0003 : 0x0000 nop
0x0004 : 0x100A bcf 0x0A , 0
0x0005 : 0x108A bcf 0x0A , 1
0x0006 : 0x110A bcf 0x0A , 2
0x0007 : 0x0782 addwf 0x02 , F
0x0008 : 0x34A0 retlw 0xA0 ; .
0x0009 : 0x3403 retlw 0x03 ; .
0x000A : 0x3405 retlw 0x05 ; .
0x000B : 0x3406 retlw 0x06 ; .
0x000C : 0x3407 retlw 0x07 ; .
0x000D : 0x3408 retlw 0x08 ; .
0x000E : 0x3401 retlw 0x01 ; .
0x000F : 0x3401 retlw 0x01 ; .
0x0010 : 0x3401 retlw 0x01 ; .
0x0011 : 0x0184 clrf 0x04
0x0012 : 0x301F movlw 0x1F
0x0013 : 0x0583 andwf 0x03 , F
0x0014 : 0x019B clrf 0x1B
0x0015 : 0x081B movf 0x1B , W
0x0016 : 0x3C08 sublw 0x08
0x0017 : 0x1C03 btfss 0x03 , 0
0x0018 : 0x281F goto 0x1F
0x0019 : 0x081B movf 0x1B , W
0x001A : 0x2004 call 0x04
0x001B : 0x008D movwf 0x0D
0x001C : 0x0092 movwf 0x12
0x001D : 0x0A9B incf 0x1B , F
0x001E : 0x2815 goto 0x15
0x001F : 0x0063 sleep