pues no es precisamente una directiva pero es otra forma de ahorrar lineas, u de pensar. pero aun no le cogi el truquillo, os lo paso y si podeis me contais si habeis echo algo parecido y como lo habeis solucionado, o por si os da alguna idea ;-)
se me ocurrio que para generar una tabla de forma automatica podria hacer esto;
dt .0, (($-1+1)), (($-1+1)), (($-1+1)), (($-1+1)), (($-1+1)) si se le pone .20 por ej en el primero empieza a partir de ahí
y el compilador hacia justo eso, sumaba uno al valor de la linea anterior :mrgreen:
pero intente esto
DT .0, (($-1+2)), (($-1+2)), (($-1+2)), (($-1+2)),
y me dijo que naranjas. sigue sumando uno.
tambien asi no da error al compilar
#define eco .3
#define L .2
dt .0, (($-1+eco+L)), (($-1+eco+L)), (($-1+eco+L)), (($-1+eco+L))
y que va se niega, empieza por .20 y suma uno al siguiente, mas uno, mas uno..... no multipilca ni resta.
asi por ej.
DT .10, (($-1-2)), (($-1-2)), (($-1-2)), (($-1-2)),
lo que sale es 0xa, oxfe, 0xff, 0, 0x1 :shock: aqui ya si que me perdi, pero algo hace
:shock: :shock: :shock: seguire dandole a ver si lo saco
un saludo
DT eco, (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)),
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
DT (($-1+eco+1)), (($-1+eco+1)), (($-1+eco+1))
PRIN_TABLA
DT eco
FILL (($-1+eco+1)),FINAL-$ ; Llena con ¡'¡'¡'¡'¡' los registros de la memoria de programa hasta la etiqueta FINAL
org PRIN_TABLA+.50
FINAL
PD2: ¿Por qué sólo sirven para el MPLAB?
DT .248, .246, .244, .242, .240
DT .238, .236, .234, .232, .230
DT .228, .226, .224, .222, .220
DT .218, .216, .214, .212, .210
DT .218, .216, .214, .212, .210
DT .198, .196, .194, .192, .190
DT .188, .186, .184, .182, .180
DT .178, .176, .174, .172, .170
DT .168, .166, .164, .162, .160
DT .158, .156, .154, .152, .150
DT .148, .146, .144, .142, .140
DT .138, .136, .134, .132, .130
DT .128, .126, .124, .122, .120
DT .118, .116, .114, .112, .110
DT .108, .106, .104, .102, .100
DT .98, .96, .94, .92, .90
DT .88, .86, .84, .82, .80
DT .78, .76, .74, .72, .70
DT .68, .66, .64, .62, .60
DT .58, .56, .54, .52, .50
DT .48, .46, .44, .42, .40
DT .38, .36, .34, .32, .30
DT .28, .26, .24, .22, .20
DT .18, .16, .14, .12, .10
DT .8, .6, .4, .2, .0, .0, .0, .0
;
DT .0, .0, .0, .0, .2, .4, .6, .8
DT .10, .12, .14, .16, .18
DT .20, .22, .24, .26, .28
DT .30, .32, .34, .36, .38
DT .40, .42, .44, .46, .48
DT .50, .52, .54, .56, .58
DT .60, .62, .64, .66, .68
DT .70, .72, .74, .76, .78
DT .80, .82, .84, .86, .88
DT .90, .92, .94, .96, .98
DT .100, .102, .104, .106, .108
DT .110, .112, .114, .116, .118
DT .120, .122, .124, .126, .128
DT .130, .132, .134, .136, .138
DT .140, .142, .144, .146, .148
DT .150, .152, .154, .156, .158
DT .160, .162, .164, .166, .168
DT .170, .172, .174, .176, .178
DT .180, .182, .184, .186, .188
DT .190, .192, .194, .196, .198
DT .200, .202, .204, .206, .208
DT .210, .212, .214, .216, .218
DT .220, .222, .224, .226, .228
DT .230, .232, .234, .236, .238
DT .240, .242, .244, .246, .248
Operadores Aritméticos y de Procedencia
Operador Ejemplo
$ Retorna contador de programa goto $+3
( Paréntesis izquierdo 1 +(d*4)
) Paréntesis derecho (longitud+1) * 256
! Operador NOT (completo lógico) If ! (a - b)
- Negación (complemento a 2) -1 * longitud
~ Complemento flags = ~flags
high Retorna byte alto movlw high CTR_Tabla
low Retorna byte bajo movlw low CTR_Tabla
upper Retorna byte superior movlw upper CTR_Tabla
* Multiplica a = b * c
/ División a = b / c
% Módulo entry_len = tot_len % 16
+ Suma tot_len = entry_len * 8 + 1
- Resta entry_len = (tot - 1) / 8
<< Desplazamiento a la izquierda flags = flags << 1
>> Desplazamiento a la derecha flags = flags >> 1
>= Mayor o igual If entry_idx >= num_entries
> Mayor que If entry_idx > num_entries
< Menor que If entry_idx < num_entries
<= Menor o igual If entry_idx <= num_entries
= = Igual a If entry_idx = num_entries
!= No igual a If entry_idx != num_entries
& Bitwise AND flags = flags & ERROR_BIT
^ Bitwise Or-exclusiva flags = flags ^ ERROR_BIT
| Bitwise Or flags = flags | ERROR_BIT
&& Función AND lógica If (len = = 511) && (b = = c)
|| Función lógica OR If (len = = 511) || (b = = c)
= Hacer igual a entry_index = 0
+= Sumar a, hacer igual entry_index += 1
-= Restar, hacer igual entry_index -= 1
*= Multiplicar, hacer igual entry_index *= entry_length
/= Dividir, hacer igual entry_index /= entry_length
%= Módulo, hacer igual entry_index %= 8
<<= Desplaza a la izquierda, hacer igual flags <<=3
>>= Desplaza a la derecha, hacer igual flags >>=3
&= AND, hacer igual flags &=ERROR_FLAG
|= OR, hacer igual flags |= ERROR_FLAG
^= OR-Exclusiva, hacer igual flags ^= ERROR_FLAG
++ incrementar i ++
-- decrementar i --
Limpiar macro memInicial,cantidad
variable contador
contador=cantidad
ERRORLEVEL -207
while(contador>0)
clrf memInicial
memInicial++
contador--
endw
ERRORLEVEL +207
endm
Limpiar AUX,4