INSTRUCCIONES DIRECTIVAS

HOLA AMIGOS,
Soy nuevo en el foro, la verdad es que tengo dudas de programacion, crei que conocia las instrucciones y directivas, pero creo que no se nada.

Mi pregunta es:

DNOP MACRO
LOCAL Label
Label GOTO Label+1
ENDM


¿Qué es LOCAL
¿Qué otras operaciones puedo realizar ( complemento si es numero, resta, suma, MULTIPLICACION, DIVISION que otras mas )?
¿Sobre que otros valores se pueden realizar?

Mi otra duda es:


TABLE ADDWF PCL,F
TBASE equ $
CAR0 equ $-Tbase
CARO equ $-Tbase

RETLW B'00001110'
RETLW B'00010001'
RETLW B'00010001'
RETLW B'00010001'
RETLW B'00010001'
RETLW B'00010001'
RETLW B'00001110'

Que es $?
Las equivalencias pueden ir en cualquier parte del programa?
Que mas puedo hacer con mi MPLAB?

Se que ustedes me pueden responder, es por eso que les agradesco desde ya

Muchas gracias!!!!!!!!!!!!
 
rodrigo_1 dijo:
Mi pregunta es:

Código:
DNOP	MACRO
	LOCAL	Label
Label	GOTO	Label+1
	ENDM

¿Qué es LOCAL?

Estas definiendo una variable local al macro. Como un macro se lo puede llamar muchas veces 'label' no será tomado como una etiqueta normal sino que será tomada siempre diferente cada vez que se lo ingrese.

Por ejemplo, si haces

Código:
HOLA:
	nop
	goto HOLA+2
HOLA:
	nop
	goto HOLA+2

El ensamblador te dará error porque pusiste 2 veces el mismo label (HOLA).

Si haces el uso de un macro
Código:
DNOP	MACRO
	LOCAL	Label
Label	
	nop
	GOTO	Label+2
	ENDM


	dnop
	dnop

Aqui no nos dará error y se compilarán 2 secuencias iguales.

rodrigo_1 dijo:
Mi otra duda es:

Que es $?
Las equivalencias pueden ir en cualquier parte del programa?
Que mas puedo hacer con mi MPLAB?

$ solo hace referencia a la posición justa actual de esa linea de código.

Por ejemplo

goto $-1 ; hace un goto a la posición del ProgramCounterActual-1 (linea anterior)

goto $+1 ; hará un goto a la posicion del PC+1

goto $+20 ;hará un goto a la posicion del PC+20

Sirve para por ejemplo cuando uno hace

Código:
_WAIT:
	btfss	PIR1,RCIF
	goto	_WAIT

en vez de hacer el _WAIT

Código:
	btfss	PIR1,RCIF
	goto	$-1

De esa forma no hace falta declarar el label _WAIT

Si te interesan los detalles, leete el manual y ahi podrás evacuar todas las dudas que te surjan.
http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf

Saludos
 
HOLA NE NUEVO

AGRADESCO MAGIO TU RESPUESTA,
aclaraste mis dudas. y voy a leer el mpasm, muchas gracias

quisiera consultarte una cosa:
Sabes tengo un problema, tengo una larga lista de retornos
de la forma:

table addwf pcl,1
retlw 0x0c
retlw 0x01
retlw 0x02
retlw 0x04
retlw 0x01
....... .......

son tantos que sobrepasan los 256

asi q tube q utilizar varias subrutinas
mi problema entonces es que una de esas subrutinas esta en la posicion d'257'
de la memoria de programa, y cuando la llamo y le suma el valor del pcl esta salta a la posicion cargada en el registro de trabajo pero de la primera tabla

trate de jugar con el pclath pero no resulta,
solo ocurre cuando cargo un valor en el pcl, se que es el registro de menos peso del contador del programa, asi q solo puede saltar 256 posiciones,
ademas se tambien que si esta se encuentra el la posicion 200 solo podra saltar 56 posiciones, las siguientes iran de nuevo al principio, es decir q si le sumo 60, se ira a la posicion 4 (vector de interrupcion), asi q quiero solucionarlo amigo

quisiera q porfavor me des una mano
te estoy hasta ahora muy agradecido
gracias
 
Mé podrian ayudar en el codigo y circuito para controlar un motor de DC por medio del PWM del PIC16F877A, cuando precione el swith 1 se active el motor, cuando presione un segundo swith incremente su velocidad y asi sucesivamente hasta el swith 8.
 
Entiendo tu duda y no tengo acá un código a mano, pero está documentado en un application note que habla de Table Reads. Esto lo puedes buscar en la pagina de Microchip.

Lo que se hace es no solo modificar el PCL sino también el PCLATH. Como el program counter solo copia el contenido del PCLATH al efectuarse un salto, entonces no afecta que lo precargues de antemano.

Te paso el link.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011102


Saludos
 
Atrás
Arriba