Sei sulla pagina 1di 46

Interrupciones: Registros utilizados: INTCON: Registro de lectura y escritura que contiene varios bits de sealizacin y habilitacin para el desbordamiento

del TMR0, cambio sobre el puerto RB e interrupcin externa en la patilla RB0/INT. 0. RBIF: Indicador de interrupcin por cambio de estado RB4-RB7 1. INTF: Indicador de interrupcin externa 2. T0IF: Indicador de interrupcin por desbordamiento de Timer 0 3. RBIE: Habilitacin de interrupcin por cambio de estado RB4-RB7 4. INTE: Habilitacin de interrupcin externa 5. T0IE: Habilitacin de interrupcin por desbordamiento de Timer 0 6. PEIE: Habilitacin de interrupcin de perifricos 7. GIE: Habilitacin general de interrupciones PIR1: El registro PIR1 contiene los bits de sealizacin individual de las interrupciones de perifricos 0. TMR1IF: Indicador de interrupcin por desbordamiento de Timer 1 1. TMR2IF: Indicador de interrupcin por desbordamiento de Timer 2 2. CCP1IF: Indicador de interrupcin del mdulo de Captura/Comparacin. a) Modo Comparador: Coincidencia entre TMR1 y CCP1 b) Modo Captura: Ha ocurrido una captura de TMR1 3. No Implementado. 4. TXIF: Indicador de interrupcin de fin de transmisin USART 5. RCIF: Indicador de interrupcin de llegada de datos USART 6. CMIF: Indicador de interrupcin por cambio de estado de alguna de las salidas de los comparadores. 7. EEIF: Indicador de interrupcin de fin de escritura eeprom interna. PIE1: Registro que posee los bits de habilitacin individual para las interrupciones de perifricos. El bit PEIE del registro INTCON debe ser 1 para permitir la habilitacin de cualquier interrupcin de perifrico. 0. TMR1IE: Habilitacin de interrupcin por desbordamiento de Timer 1 1. TMR2IE: Habilitacin de interrupcin por desbordamiento de Timer 2 2. CCP1IE: Habilitacin de interrupcin del mdulo de Captura/Comparacin/PWM. 3. No Implementado. 4. TXIE: Habilitacin de interrupcin de fin de transmisin USART 5. RCIE: Habilitacin de interrupcin de llegada de datos USART 6. CMIE: Habilitacin de interrupcin por cambio de estado de alguna de las salidas de los comparadores. 7. EEIE: Habilitacin de interrupcin de fin de escritura eeprom interna.

Palabra de Configuracin El PIC16F628 ha sido construido con caractersticas tales que se puede configurar para funcionar en modos de operacin que no necesitan componentes externos tales como el circuito de reloj o de reset. Esto implica que es necesario configurar su modo de operacin a travs de una palabra de configuracin. La palabra de configuracin se encuentra mapeada en la direccin 2007h de la memoria de programa y solo puede ser accesada durante la programacin de dispositivo.

CP1:CP0:Bits de proteccin de cdigo Los bits 13-10 encargados de proteger la memoria de programa. CPD: Bit de proteccin para cdigo de datos 1 = Proteccin deshabilitada de la memoria de datos. 0 = Proteccin habilitada en la memoria de datos. LVP: Habilitacin de la programacin por voltaje bajo 1 = LVP habilitado, la terminal RB4/PGM tiene tal funcin. 0 = LCP: deshabilitado, RB4/PGM es una terminal I/O. BODEN: Bit de reset por voltaje de alimentacin bajo 1 = Reset por BOD habilitado 0 = Reset por BOD deshabilitado MCLRE: Habilitacion del terminal de reset 1 = Terminal de reset en RA5. 0 = MCLR conectado internamente a Vdd, RA5 es un pin I/O. PWRTEN : Bit de habilitacin de temporizador al energizar 1 = PWRT habilitado. 0 = PWRT deshabilitado. WDTEN: Bits de habilitacin de Watch-Dog 1 = WDT habilitado 0 = WDT deshabilitado. FOSC2:FOSC1:FOSC0: Bits de seleccin del tipo de oscilador

Octubre 19, 2011, 12:33:49

Bienvenido(a), Visitante. Por favor, ingresa o regstrate. Perdiste tu email de activacin?


Siempre
Ingresar

Ingresar con nombre de usuario, contrasea y duracin de la sesin


Buscar

137

INICIO

AYUDA

BUSCAR

INGRESAR

REGISTRARSE

uControl > Articulos, circuitos, tutoriales y Revista uControl > Tutoriales, guias y cursos en uControl > Aprenda ASM desde cero

anterior prximo
Pginas: 1 2 Autor Ir Abajo
IMPRIMIR

Tema: Aprenda ASM desde cero (Ledo 16433 veces)

0 Usuarios y 1 Visitante estn viendo este tema.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Aprenda ASM desde cero


: Octubre 30, 2008, 09:23:22

Lo primero que hay que saber para este lenguaje, es que cada lnea de cdigo, es una instruccin que realiza el CP o un paso que realiza el CP. A diferencia de otros lenguajes, como por ejemplo el C, una lnea de instruccin, puede llevar uno o mas pasos que el CP debe realizar. Ms adelante entendern el porqu.

A esto ltimo dicho, nos explica el porqu de un programa escrito en ASM (assembler) lleva menos lnea Cumulonimbus de instruccin que el mismo programa realizado en otro lenguaje. Esto se traduce que, cuanto menos lneas de cdigo, menor consumo de la memoria de programa. Nota: Entendemos por el mismo cdigo, al realizar un software para realizar una dicha tarea. Una tarea que debe realizar nuestro microcontrolador, puede ser escrito en diferentes lenguajes, y es el programa que se utiliz quien lo traduce a formato hex (1 y 0). Ahora, Qu es el CP? El CP o PC es el Contador de Programa. Es el encargado de leer cada instruccin y realizar la accin solicitada por el software. Para dar un ejemplo un poco ms claro, digamos que el CP, es una persona. Esta persona se le da un papel que tiene diferentes tareas a realizar. Estas tareas, estn una debajo de la otra y lee lnea por lnea y hace lo que le

dice esa lnea. Cada lnea, posee una instruccin que se debe hacer. Cuando termin de hacer esa instruccin, continua con la lnea de abajo. Supongamos que tenemos un papel que dice: Levantar la mano izquierda. Bajar la mano izquierda. Saltar tres veces en el mismo lugar. Levantar la mano derecha. Saltar una vez en el mismo lugar. Bajar la mano derecha. El CP, har esas tareas sin negarce y lo har fielmente a lo que est escrito. Por lo que, si hace una tarea mal, es porque le pusimos una o ms instrucciones mal. Si bien, el CP har lo que nosotros le pidamos, el CP nos pide que respetemos algunas cosas. Estas cosas, dependern de cada microcontrolador y que debemos saber para poder programar en forma correcta al PIC.
ltima modificacin: Octubre 30, 2008, 05:23:48 por Ariel En lnea

Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconecta do Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #1 : Octubre 30, 2008, 09:53:46

Cmo es la extructura del lenguaje ASM? Es muy fcil, posee 4 columnas bien diferenciadas y que no es problema acordarce. * La primer columna se llama ETIQUETA y sirve para darle el nombre a una pocicin de la memoria del programa al que se necesita apuntar. Los que no se den cuenta, ya lo haran.

* La segunda columna, se llama INSTRUCCIN y lo que justamente hace, es una instruccin a realizar por el CP.
Cumulonim bus

* La tercera columna, se llama OPERANDO y es el operando de una instruccin, o sea, de la segunda columna. Hay instrucciones que no tienen operando y las veremos ms adelante. * Y la cuarta columna, se llama OBSERVACIONES y sirve solo para el programador, o sea, el usuario que est programando el PIC. En otras palabras, a nosotros. Siempre comienza con ; (punto y coma) Si no sirve para el PIC, Para qu complicarla ms? Todo lo contrario, es para alludar al programador de que no se olvide que intent hacer. Todos los lenguajes, desde los ms bsicos, hasta los ms avanzados, tienen esta caractersticas ya que en el, pondremos que es lo que queremos hacer o explicar el programa. Si bien, estas observaciones se utilizan en la cuarta columna, no es obligacin colocarla en esta columna, si no que puede ir al margen de la planilla en dnde estamos programando. Y es aqu dnde explicaremos la porcin de una rutina para entenderlo ms adelante. Bien, veremos a continuacin, como se escriben las columnas: ETIQUETAS INSTRUCCIN ;OBSERVACIONES O, podemos verlo as: ;OBSERVACIONES ;OBSERVACIONES ;OBSERVACIONES (y la cantidad que necesitemos) OPERANDO

ETIQUETAS INSTRUCCIN ;OBSERVACIONES

OPERANDO

En lnea Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #2 : Octubre 30, 2008, 04:39:42

Antes de empezar a ver las intrucciones, debemos concentrarnos en los registros. Qu son los registros?

Los registros, son pociciones de memoria el cual se utilizan para ir configurando el pic mientras se corre el programa, cambiar de bancos para acceder a otras partes de memorias, son banderas que nos van diciendo Cumulonimbu que est pasando con distintas operaciones, son s habilitaciones o desabilitaciones para mdulos que trae el PIC. Por ejemplo, conversor Analgico/Digital, PWM. Estos registros, tienen una ancho de bit de acuerdo al PIC, que hay de 8 bit, 16 bit y 32 bit. Excepto la palabra configuracin y que la veremos mas adelante. El tamao de los registro depende del tipo de microcontrolador. Cada registro, posee un nombre, y cada bit o un grupo de bit, se puede utilizar para lo descripto anteriormente (habilitar/desabilitar, etc). A continuacin, veremos una pocicin de la RAM y sus 4 bancos. Este, es del PIC16F877

Como notarn, en las cuatro columnas, hay nombres. Estos nombres son todos los registros que posee este PIC. Vern que hay registros que se repiten. No quiere decir que estan duplicados, triplicados o cuatriplicados, si no que se puede acceder a ellos no importa en que banco estemos trabajando. (Ya lo entendern, no se

preocupen). Cada vez que se programe el PIC y se necesite trabajar con uno de estos registros, se debe acceder al banco que est dicho nombre. Es por eso, que esta tabla es muy importante a la hora de trabajar. Aprovechando que sub esta tabla del pic, cuando dea ejemplo de programacin, ser sobre este pic. Microchip provee en forma gratuita estos datasheet. Y hay uno por cada PIC. Por lo que si no tienen este datasheet, descargenlo de la pgina de Microchip. Cuando empezemos a programar, lo necesitarn.
Banco de memoria RAM del 16F874A.jpg (86.17 KB descargado 5948 veces.) ltima modificacin: Noviembre 23, 2008, 12:21:44 por Leon Pic En lnea

Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconecta do Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #3 : Octubre 31, 2008, 10:23:31

Uno de los registros muy utilizado, es el registro de trabajo W, el cual, se utiliza para mover un dato/valor de un registro a otro, cargar valores en un registro, y con la ayuda de la ALU puede hacer operaciones matemticas. Observen con atencin el diagrama de bloque dnde se encuentra W

Cumulonim bus

Leon Pic
Moderador PIC24F Desconecta do Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #4 : Noviembre 01, 2008, 10:28:54

Ahora, vamos a estudiar el registro STATUS y luego continuaremos con las instrucciones.

Registro STATUS Si entendieron hasta ac, se acordar que los registros poseen un ancho de 8 bytes. Cada byte, puede contener un 1 o 0.

Cumulonim bus

Vemos ahora en detalle el registro STATUS:

Este registro, tiene 3 Bytes dedicado para las operaciones matemticas, 3 bytes dedicado al cambio de banco de

memoria y 2 bytes dedicado para saber que o quin produjo un Power Up (despertar del micro). Y se puede leer y escribrir en l (cambiar datos). Los analizamos desde el ms significativo (MSB) hasta el menos significativo (LSB). BIT 7: Se llama IRP y sirve para el direccionamiento indirecto para cambiar el banco de memoria. 1 = Banco 2 y 3 0 = Banco 0 y 1 BIT 6 y BIT 5 Se llaman RP1 y RP0 respectivamente. Sirve para el direccionamiento directo para cambiar de banco de memoria. 00 01 10 11 = = = = Banco 0 Banco 1 Banco 2 banco 3

BIT 4 Se llama TO (neg). Este bit se utiliza para saber quin despert al PIC. 1 = Despus que despierta (power up) o por las instrucciones CLRWDT o SLEEP, se pone a 1 este bit. 0 = Se pone a 0 cuando el wachtdog o en castellano perro guardan (WDT) despierta al PIC. BIT 3 Se llama PD (neg). Este bit se utiliza para saber si el pic estaba durmiendo.

1 = Despus de que despierta (power up) o por la instruccin CLRWDT, se pone a 1 0 = Se pone a 0 cuando se ejecuta la instruccin SLEEP BIT 2 Se llama Z y al igual que los dos bytes anteriores, es una bandera. Nos indica el resultado de una operacin aritmtica y lgica. 1 = La operacin aritmtica o lgica di como resultado 0 0 = La operacin aritmtica o lgica no di como resultado 0 BIT 1 Se llama DC. Digit carry/borrow (dgito llevar/prestar). Es afectado por las instrucciones ADDWF; ADDLW; SUBLW; SUBWF (Para la resta, la polaridad es inversa). 1 = Hubo un acarreo del 4to bit menos significativo al 5to bit. 0 = No hubo un acarreo del 4to bit menos significativo al 5to bit. BIT 0 Se llama C carry/borrow. Es afectado por las mismas instrucciones que afectan al bit DC. 1 = Hubo un accareo del bit ms significativo (Bit 7) o sea cuando se exede de H'FF' 0 = No hubo accareo del bit ms significativo
Registro STATUS 16F877.jpg (101.17 KB - descargado 4952 veces.) En lnea Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al

PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectad o Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #5 : Noviembre 04, 2008, 09:47:14

Breve instroduccin de las INSTRUCCIONES Cada instruccin tiene una ancho de 14 Bits, es por eso que la memoria de programa tiene el mismo ancho. Justamente para poder alojar cada instruccin. Las instrucciones, estn divididas en tres grupos. Los cuales son:

Cumulonimb us

Byte-Oriented operation (Byte-Orientando a la operacin) Bit-Oriented operation (Bit-Orientando a la operacin) Literal and Control operation (Control y Literal de la operacin)

Primer grupo Byte-Oriented operation Cada instruccin de este grupo est compuesta por:

OPCODE (Cdigo) DESTINATION (Destino) FILE REGISTER ADDRESS (Direccin del archivo de registro)

El OPCODE o cdigo, es el cdigo de cada instruccin y que es nica para cada instruccin. Est formada por los bit del 13 al 8. El DESTINATION o el destino, indica en dnde se va a guardar el dato.Por ejemplo, si hacemos una suma, tenemos dos opciones dnde guardarlo, una puede ser el registro W y la otra opcin puede ser otro registro cualquiera o una pocicin de la RAM. Est formada por el

bit 7. La constante que nos indica esto es la letra d. Si esta letra es 0, la operacin se guardar en el registro W. EN cambio si vale 1, la operacin se guardar en el registro o pocicin de memoria que estemos trabajando al momento de usar una instruccin. Hay instrucciones, como veremos ms adelante, que no es necesario indicar dnde queremos guardar la operacin, ya que se hace en forma automtica. Y hay otras instrucciones que si no se indica el destino, nos puede dar un error al compilar o el compilador lo eligir el y por ende, nos puede ejecutar mal el programa. Y por ltimo, tenemos el FILE REGISTER ADDRESS que se carga con la direccin del registro a ser guardado. Est formada por los bit 6 al 0. La constante que nos indica esto, es la letra f Segundo grupo Bit-Oriented operation Cada instruccin de este grupo est compuesta por:

OPCODE (Cdigo) BIT ADDRESS (Bit de direccin) FILE REGISTER ADDRESS (Direccin del archivo de registro)

OPCODE es igual al primer grupo. Est formado por los bits 13 al 10. El BIT ADDRESS, se utiliza para direccionar la operacin. Est formado por los bits 9 al 7. Como pueden observar, se sacrific bit del opcode para drcelo al bit address. La constante que nos indica esto es la letra b Y por ltimo tenemos FILE REGISTER ADDRESS, que es igual al primer grupo. Est formado por los bit 6 al 0. Igual que en el primer grupo. la constante que nos indica

esto es la letra f. Tercer grupo Literal and Control Cada instruccin de este grupo, est compuesta por:

OPCODE LITERAL

OPCODE es igual que en el primer grupo. Est compuesta por los bits 13 al 8. Exepto para las instrucciones CALL y GOTO que est compuesta por los bit 13 al 11 (prestar mucha atencin a esto, cuando veamos estas dos instrucciones entendern la importancia). Y el LITERAL que puede ser un valor, por ejemplo para sumar, para restar, para cargar al registro W, en fin, un nmero decimal, binario o hexadecimal. O puede ser una valor de direccin a dnde apuntar para las instrucciones CALL y GOTO. Est compuesta por los bits 7 al 0. Exepto para las instrucciones CALL y GOTO que est compuesta por los bit 10 al 0 (prestar mucha atencin a esto, cuando veamos estas dos instrucciones entendern la importancia). A continuacin, vemos las 35 instrucciones agrupadas por los tres grupos:

Si alcanzan a ver en la imagen, vern que algunas instrucciones afectan al registro STATUS y otras no.

Set de instrucciones agrupadas en tres grupos.jpg (117.66 KB - descargado 4909 veces.) ltima modificacin: Noviembre 04, 2008, 10:04:27 por Leon Pic En lnea

Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #6 : Noviembre 07, 2008, 02:32:35

Las instrucciones Les voy a arruinar el momento de alegra. Las instrucciones hay que estudiarlas de memoria. Si, leyeron bien, de memoria. Lo que tienen que saber sobre las instrucciones, es como se escriben, que hace cada instruccin y lo ms importante que bit del REGISTRO afecta. Vamos a ir vindolo por orden alfabtico. Y otra cosita ms, como es de esperarce, estn en INGLES o son abreviaturas pero en INGLES. Recordemos que: .123 o D'123' es en decimal; 0x7B o 7Bh o H'7B' es en Hexadecimal; B'01111011' es en binario. ADDLW Suma un valor designado por el programador al registro W Ejemplo
Cdigo: ADDLW .128

Cumulonimbus

Si W tena cargado un valor = .5, despus de la instruccin W tiene cargado el valor .133

Para recordar, ADD es sumar, L es Literal y W es el registro W Afecta a:


Z Se pone a 1 si la operacin es 0 DC Se pone a 1 si hubo un acarreo del bti 3 al 4 C Se pone a 1 si hubo desbordamiento, o sea, cuando se supera H'FF'

ADDWF Suma el valor del registro W con el valor de un registro cualquiera. El destino de esta suma, lo elige el programador. Ejemplo:
Cdigo: ADDWF TEMP,W

Si W tena guardado .133 y la pocicin de la RAM llamada TEMP tena el valor cargado con .2, W vale .135 y TEMP contina valiendo .2 Ahora si hubiera puesto as:
Cdigo: ADDWF TEMP,F

TEMP valdra .135 y W valdra .133 Para recordar, F, es File Register Address. NOTA: Para indicar la direccin de dnde se guarda, tambin se puede poner 0 o 1 en vez de W o F. 0, corresponder guardarlo en el registro W y 1 en el registro TEMP (para este caso).

Afecta a:

Z Se pone a 1 si la operacin es 0 DC Se pone a 1 si hubo un acarreo del bti 3 al 4 C Se pone a 1 si hubo desbordamiento, o sea, cuando se supera H'FF'

ANDWF Realiza la operacin AND entre W y un registro designado por el programador. El destino de esta operacin lo elije el programador. Ejemplo:
Cdigo: ANDWF TEMP,F

Si antes de la instruccin W vale B'11100011' y TEMP vale B'00111010' Despus de la instruccin TEMP vale B'00100010' y W vale B'11100011' Afecta a:

Z Se pone a 1 si la operacin es 0

En lnea Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes:

Re: Aprenda ASM desde cero


Respuesta #7 : Noviembre 09, 2008, 05:28:40

BCF Pone a 0 el bit de un registro. El bit debe ser indicado por el programador.

3862

Ejemplo:
Cdigo: BCF TEMP,2

Cumulonimbus

Antes de la instruccin TEMP vale B'11111111'. Despus de la instruccin TEMP vale B'11111011' Para recordar, Bit Clear es borrar File es archivo o registro No afecta ningn bit del registro Status. BSF Pone a 1 el bit de un registro. El bit debe ser indicado por el programador. Ejemplo:
Cdigo: BSF TEMP,0

Antes de la instruccion TEMP vale B'01110110'. Despues de la instruccion TEMP vale B'01110111' Para recordar, Bit Set es poner a 1 File Archivo o registro

No afecta a ningun Bit del registro Status. BTFSC Salta un lnea si el bit de un registro es cero. El bit debe ser indicado por el programador. Ejemplo:
Cdigo: BTFSC BCF BSF TEMP,5 PORTA,0 PORTB,0

Caso 1: TEMP vale B'00011110'. El CP analizar solo el Bit 5 del registro TEMP, como es 0, salta la instruccin BCF PORTA,0 y ejecuta la siguiente lnea que es BSF PORTB,0 y continua haciendo la instruccin. Caso 2: TEMP vale B'00111000'. El CP analizar solo el Bit 5 del registro TEMP, como es 1 no salta la instruccin y har la instruccin BCF PORTA,0 y luego continua con la instruccin BSF PORTB,0

Para recordar Bit Test es chequear File Skip es salto Clear No afecta a ningn Bit del registro Status. BTFSS Salta una lnea si el bit de un registro es 1. EL bit debe ser indicado por el programador. Ejemplo:
Cdigo: BTFSS ADDWF ANDWF TEMP,3 PORTC NODO

Caso 1: TEMP vale B'01101100'. El CP analizar solo el Bit 3 del registro TEMP, como es 1, salta la instruccin ADD PORTC y ejecuta la siguiente lnea que es ANDWF NODO y continua haciendo la instruccin. Caso 2: TEMP vale B'11110000'. El CP analizar solo el Bit 3 del registro TEMP, como es 0 no salta la instruccin y har la instruccin ADD PORTC y luego continua con la instruccin AND NODO. Para recordar Bit Test es chequear File Skip es salto Set No afecta a ningn Bit del registro Status.

Normalmente, continuando las instrucciones BTFSS y/o BTFSC va un GOTO o CALL pero no la he puesto porque an no se explicaron estas instrucciones.

ltima modificacin: Noviembre 10, 2008, 08:27:56 por Leon Pic

En lnea

Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #8 : Noviembre 15, 2008, 09:35:13

CALL Se digire a una direccin de la memoria de programa designado por el programador. En otras palabras, se utiliza para dirigirce a una rutina o tarea. Su principal ventaja es que una vez que finaliz la tarea, vuelve al punto siguiente desde dnde se llamo. Ejemplo :

Cumulonimbus

Cdigo: CALL ESC_PORTB

Para recordar, CALL es llamada. No afecta ningn bit del registro Status. ------------------------------------------------------------------------------------------------------------------------------------------Hacemos una exepcin con respecto a ver las instrucciones por orden alfabtico y veremos la instruccin GOTO. ------------------------------------------------------------------------------------------------------------------------------------------GOTO Se digire a una direccin de la memoria de programa designado por el programador. En otras palabras, se utiliza para saltar instrucciones que no queremos que se

ejecuten. A diferencia de la instruccin CALL, no hay forma de volver cuando se ejecuta la instruccin. Ejemplo:
Cdigo: GOTO INICIO

Para recordar GO TO es ir a. No afecta a ningn bit del registro Status. Extendiendo la explicacin. Vamos a hablar del PC para entender bien sobre estas instrucciones. La exelente explicacin que continua, por desgracia no es ma (ojal fuera mi explicacin), son de las personas Maunix y BrunoF (del foro todopic) En la siguiente imagen, vemos el diagrama de bloques del PC o CP.

El PC es de 13 bits en este caso(8kwords). 14 son los bits de cada "word" o instruccin que se graban en cada posicin de la FLASH (memeria de programa). El PC se reparte en: sus 8 bits de menor peso en el registro PCL, y los 5 restantes en el registro PCLATH. Los pics al tener un set de instrucciones reducido no puede en una sola instruccin meter todos los bits necesarios para direccionar toda su memoria. EL program counter son 2 registros, el PChigh y PCLow . Cuando haces un CALL o un GOTO, solo se rellenan 11 bits (los 8 del PClow y 3 del PChigh) y los restantes 2 los rellenas con el PCLATH (para completar los 13bits). El STACK (pila) tiene toda la direccin, no solo parcial. Si haces un call desde la pagina 0 a la pgina 3 y luego un return el cdigo SI volver a la pgina 0, pero el PCLATH sigue apuntando a la pgina 3, entonces si usas otro goto o call, debes tener en cuenta de modificar el PCLATH. Entnces, dijimos que: El PC = ProgramCounter o CP = Contador de Programa, tiene 13 bits; del 0 al 12. Al ejecutar un call o un goto, se copian del 0 al 10, y los otros 2 bits se copian del registro PCLATH. El pclath solo estar all para esa situacion. En un return o retfie la microelectronica del PIC, pega la direccin del PC que estaba guardada. Lo vemos con un ejemplo

1. STACK = vaco PC = 0x00A0

PCLATH = 0b000011000 Ejecutas un CALL 0x230 2. El STACK tiene en su posicin 0 la direccin 0x00A0. PC = 111000110000 3. Se ejecuta la subrutina y en ese punto el PC ya qued en PC = 111000110111 4. Viene un RETURN. La microelectrnica del PIC copiar el stack tal cual en el program counter + 1 Valor STACK 0x00A0 + 1 --> PC = 0x00A1 5. EL cdigo sigue ejecutandose en la pgina 0 pero hay que tener en cuenta que el PCLATH apunta a la pgina 3 por ello si hars otro CALL o GOTO, debers cambiar de nuevo el PCLATH si la subrutina no est en la pgina 3. Para cerrar el tema Vamos a entrar a todo detalle en el Program Counter(PC) para que se vayan todas las dudas ya que es muy importante. Vayamos al tema tema del PC, computed goto(lo que algunos llaman "tabla"), call, returns y goto. El Program Counter(PC) est conformado en esta familia de uC(y refiriendonos a la familia 16F, las otras poseen ms o menos bits implementados) por 13 bits repartidos entre dos registros: PCH y PCL. El PCL es legible/escribible directamente a traves del registro fsico PCL(valga la redundancia). En cambio, el PCH no es directamente accesible. No puede ser ledo, y slo puede se grabado mediante un buffer que contiene el valor temporalmente(oh! aqu aparece nuestro famoso PCLATH). Entonces, recordar: El PCLATH es slo un buffer temporal que almacena los 5 bits de mayor peso del PC para ser escritos cuando se ejecute una instruccin que lo requiera.

Ahora, hay dos situaciones posibles en las que el PC debe ser cargado de manera distnta: una es cuando queremos trabajar con tablas y otra cuando realizamos un call o un goto que no est en el msmo banco. 1era situacin: Tabla(Comuted Goto) La tabla es una situacin de uso del PC en la que se afecta directamente al registro PCL. Cuando se afecte directamente al PCL mediante una instruccin, es necesario que el usuario asegure que PCLATH tenga sus 5 bits pre-cargados adecuadamente. Hago un ejemplo: Mal: org 0x000 movlw 0x01 call tabla

org 0x300 tabla addwf PCL,F retlw 0x03 retlw 0x01 retlw 0x0F ..... Bien: org 0x000 movlw 0x03 movwf PCLATH movlw 0x01 call tabla

org 0x300

tabla addwf PCL,F retlw 0x03 retlw 0x01 retlw 0x0F ..... Mejor: org 0x000 pageselw tabla movlw 0x01 call tabla

org 0x300 tabla addwf PCL,F retlw 0x03 retlw 0x01 retlw 0x0F ..... Pageselw es una instruccin del MPASM que genera dos instrucciones: un movlw literal y un movwf PCLATH. El valor del literal es automticamente seleccionado por el ensamblador segn la etiqueta(o posicin de memoria) que se le especifique. En el caso anterior pageselw tabla generara estas dos instrucciones: movlw 0x03 movwf PCLATH Si no aseguramos que los 5 bits del PCLATH estn correctamente seteados al momento de afectar al PCL mediante alguna instruccin(generalmente es la addwf, pero puede usarse subwf y muchas otras) entonces el programa saltar a una posicin indeseada.

2da situacin: CALL y GOTO En esta familia de uC, cada instruccin es codificada en 14 bits. En el caso de las instrucciones CALL y GOTO, su estructura es la siguiente: F2 F1 F0 K10 K9 K8 K7 K6 K5 K4 K3 K2 K1 K0 Donde las F indican cul instruccin es la que debe ejecutarse(100 para la CALL 101 para la GOTO), y las k corresponden a la direccin a la cual queremos llamar(con un CALL) o saltar(con un GOTO). Aqu se ve claramente un problema. Podemos ver que un CALL o un GOTO slo almacena 11 bits de la direccin a la cual debe ir. 11 bits es un mximo 2048 posiciones. Qu pasa cuando un uC posee ms de 2k de memoria Flash entonces? Por ejemplo, un 16F877A posee 8k de memoria Flash. Cmo hara para llamar a una subrutina que est ms all de la posicin 2047 de la flash? La solucin nuevamente se encuentra en el PCLATH(y es nuevamente el usuario el que tiene el deber de precargar el valor adecuado). Entonces, dijimos que el PC contiene 13 bits de longitud. 13 bits son hasta 8kwords(una word es en esta familia un conjunto de 14 bits que conforman una instruccin la cual se aloja en la memoria FLASH del uC). Un CALL o un GOTO slo contienen los 11 bits de menor peso de la direccin a la cual ir, por lo que los 2 bits restantes debern ser pre-cargados en los bits 4 y 3 del registro PCLATH por el usuario programador. Cuando se ejecuta una instruccin CALL o GOTO, es imprescindible que el registro PCLATH est correctamente precargado. La instruccin a la que el uC ir estar conformada por 13 bits y ellos sern: PCLATH,4 K1 K0 PCLATH,3 K10 K9 K8 K7 K6 K5 K4 K3 K2

Cabe mencionar que el uC carga a PC<10:0> con el valor pasado por los 11 bits de K, y a PC<12:11> con el valor de los bits PCLATH<4:3>. El registro PCLATH no es modificado de ninguna manera. Slo se leen esos dos bits. Por ejemplo, en un uC de 8kWords hay 4 pginas. Una pgina cada 2048 words. Si se est en una pgina y se quiere ir a otro es necesario precargar antes dichos bits del PCLATH para poder hacerlo. El usuario no debe preocuparse por precargar el PCLATH en dos sitaciones: Si el uC no posee ms de 2kWords de memoria Flash; O si en el cdigo creado por el usuario, no se utiliza la memoria FLASH ms all de la posicin 2047(0x7FF). Si ocurre al menos uno de esos dos casos, es suficiente con asegurar que los bits PCLATH<4:3> se encuentren ambos en cero. Vamos con un par de ejemplos: Mal: org 0x000 call cruzo ;Esto es pgina0

org 0x800 cruzo retlw 0xFF .....

;Esto ya es el pgina1

Bien: org 0x000 movlw 0x08 ;Esto es pgina0

movwf PCLATH call cruzo

org 0x800 cruzo retlw 0xFF .....

;Esto ya es el pgina1

Mejor: org 0x000 pagesel cruzo call cruzo ;Esto es pgina0 ;automaticamente seleccionar banco

org 0x800 cruzo retlw 0xFF .....

;Esto ya es el pgina1

Pagesel es una instruccin del MPASM que genera dos instrucciones: un bcf/bsf PCLATH,3 y un bcf/bsf PCLATH,4. El software ensamblador selecciona automticamente la instruccin bcf o bsf segn el banco en el cual se encuentra la etiqueta(o posicin de memoria) que se le especifique. En el caso anterior pagesel cruzo generara estas dos instrucciones: bsf bcf PCLATH,3 PCLATH,4

Ya que la subrutina cruzo se encuentra en la pgina1. Finalmente, cuando se ejecuta una instruccin CALL, se carga en el STACK el valor de la posicin actual ms 1(es

decir, se guarda en el STACK el valor PC+1). Se guardan los 13 bits, por lo que durante las instrucciones RETURN,RETLW y RETFIE no es necesario precargar al PCLATH. Para ms informacin, ver el esquema seccin 2.3 del datasheet de los PIC16F87XA que habla de cmo cargar al PC segn cada situacin.
PC.jpg (22.12 KB - descargado 4778 veces.) ltima modificacin: Noviembre 23, 2008, 12:40:54 por Leon Pic En lnea

Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #9 : Noviembre 21, 2008, 09:09:44

CLRF Borra el contenido de un registro seleccionado por el programador. La forma en que lo hace, pone en 0 los 8 bit del registro. Este registro, puede ser cualquiera de la pocicin de la RAM. Ejemplo:

Cumulonimbus

Cdigo: CLRF PORTB

Antes de la instruccin PORTB vale B'11000111'. Despus de la instruccin PORTB vale B'00000000' Para recordar CLeaR es limpio File es archivo o registro. Afecta a:

Z Se pone a 1

CLRW Borra al registro W. La forma en que lo hace, pone en 0 los 8 bit del registro. Ejemplo:
Cdigo: CLRW

Antes de la instruccin W vale B'00000111'. Despus de la instruccin W vale B'00000000'. Para recordar CLeaR es limpiar Work es trabajo. Afecta a:

Z Se pone a 1

CLRWDT Borra al WDT. La forma en que lo hace, pone en 0 al mismo. Ejemplo:


Cdigo: CLRWDT

Antes de la instruccin WDT vale B'11111110'. Despus de la instruccin vale B'0000000'. Para recordar CLeaR es limpiar Watch Dog es perro guardian Timer es contador. Afecta a:

TO (neg) Se pone a 1 PD (neg) Se pone a 1

NOTA: El WDT o el contador perro guardian, sirve para destrabar al PIC. Cada vez que se desborda, o sea, cada vez que pasa de H'FF' a H'00', produce un reset, y como es un reset, se dirige a la pocicin 0h de la memoria de programa. La forma de trabajar con el, es ir poniendo en lugares estratgicos la instruccin ya explicada, de esta manera evitamos el desborde del contador. Si el CP se traba en algn bucle o algo similar, al no limpiar el contador, el WDT desbordar y llevar al CP a la pocicin 0h de la memoria de programa. Muchas veces se evita de usar esta herramienta por no tener que calcular por todo el programa dnde y cuando limpiar al WDT. Es recomendable su uso.
En lnea Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #10 : Diciembre 03, 2008, 10:06:28

COMF Realiza el complemento de un registro.


Cdigo: COMF TEMP,F

Si TEMP tena guardado B'00111101' luego de ejecutar la instruccin TEMP vale B'11000010'. Notese, que aqu tambin podemos elegir el destino y esto nos deja Cumulonimbus guardarlo en el registro W si as lo requerimos. Para recordar COMlement es complemento File es registro.

Afecta a:

Z Se pone a 1 si la operacin da 0

DECF Decrementa en una unidad, o lo que es lo mismo, resta 1 el contenido de un registro


Cdigo: DECF DECENA,W

Si antes de la instruccin DECENA vale .255, despus de la instruccin W vale .254 y DECENA vale .255 Si por el contrario, hubieramos elegido el destino F, despus de la instruccin DECENA vale .254 Para recordar DECrement es decremento File es registro. Afecta a:

Z se pone a 1 si la operacin es 0

DECFSZ Decrementa en uno, o lo que es lo mismo, resta en 1 el contenido de un registro y cuando este vale 0, el CP salta una instruccin
Cdigo: LOOP DECFSZ GOTO BCF TEMP LOOP PORTB,0

El CP descontar en 1 el registro TEMP y evala el valor, si no es cero, ejecuta lnea siguiente que es GOTO LOOP, el cual se dirige de nuevo a la lnea LOOP DECFSZ TEMP el cual volver a descontar en 1 y

evalua el valor, si es cero salta la lnea GOTO LOOP y ejecuta la instruccin BCF PORTB. Esta ltima lnea, el programador pondr la instruccin que necesite ejecutar. Este pequeo programa que acabamos de ver, es un temporizador o un retardo que tardar en salir del bucle dependiendo de la frecuencia de reloj y el valor cargado en TEMP. NOTA: Esta instruccin, tambin hay que elegirle el destino. En el caso que no se exprese, como en este caso, el MPLAB dar por sentado que el resultado se guardar en el registro F y no en W. Para recordar DECrement es decremento File es registro Skip es salto Zero que es cero. No afecta ningn bit del registro STATUS.
En lnea Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #11 : Diciembre 05, 2008, 09:52:23

INCF Incrementa en 1, o suma 1, el contenido de un registro elegido por el programador.


Cdigo: INCF INDF,F

Si antes de la instruccin INDF vale H'29', despus de la instruccin INDF vale H'2A'. Notese que tambin Cumulonimbus podemos elgeir el destino. Si hubieramos elegido W, despus de la instruccin W vale H'2A' y INDF vale H'29'. Para recordar INCrement es incremento File es registro.

Afecta a:

Z se pone a 1 si el resultado es 0

INCFSZ Incrementa en 1, o suma en 1, el contenido de un registro elegido por el programador y cuando este es 0, el CP salta una instruccin.
Cdigo: VOLVER INCFSZ GOTO INCF CONTADOR VOLVER PORTA

El CP incrementar en 1 el registro CONTADOR y evala el valor, si no es cero, ejecuta lnea siguiente que es GOTO VOLVER, el cual se dirige de nuevo a la lnea VOLVER INCFSZ CONTADOR el cual volver a incrementar en 1 y evalua el valor, si es cero salta la lnea GOTO VOLVER y ejecuta la instruccin INCF PORTA. Esta ltima lnea, el programador pondr la instruccin que necesite ejecutar. Este pequeo programa que acabamos de ver, es un temporizador o un retardo que tardar en salir del bucle dependiendo de la frecuencia de reloj y el valor cargado en CONTADOR. Normalmente, se utiliza el retardo con DECFSZ pero este tambin es vlido. NOTA: Esta instruccin, tambin hay que elegirle el destino. En el caso que no se exprese, como en este caso, el MPLAB dar por sentado que el resultado se guardar en el registro F y no en W. Para recordar INCrement es incremento File es registro Skip es salto Zero es cero. No afecta ningn bit del registro STATUS. IORLW

Realiza la operacin OR entre W y un literal elegido por el programador. El resultado se guarda en W. La operacin es W OR L. Si antes de la instuccin W vale B'01110100' y el literal elegido es B'00011111', despus de la instruccin W vale B'01111111'. Para recordar Inclusive es inclusivo OR es la operacin binaria OR Literal es literal W es el registro trabajo. Afecta a:

Z se pone a 1 si la operacin da 0

ltima modificacin: Enero 14, 2009, 08:40:29 por Leon Pic

En lnea

Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #12 : Diciembre 06, 2008, 10:39:20

IORWF Realiza la operacin lgica OR entre el registro W y un registro elegido por el programador. La operacin es W OR F.
Cdigo: IORWF PORTC,F

Cumulonimbus

Si antes de la instruccin W vale B'01111111' y PORC vale B'00001111' despus de la instruccin PORTC vale B'01111111' y W vale B'01111111'. Notese que podemos elegir el destino y la otra opcin, como ya se dieron cuenta por las instrucciones pasadas, puede ser W.

Para recordar Inclusive es inclusivo OR es la operacin binaria OR W es el registro trabajo y File es registro. Afecta a:

Z se pone a 1 si el resultado es 0

MOVLW Carga al registro W con un literal elegido por el programador para luego hacer una operacin matemtica o moverlo a otro registro como veremos ms adelante. Sin duda alguna, una de las instrucciones ms usadas en la programacin ASM.
Cdigo: MOVLW .255

Si antes de la instruccin W vale .15, despus de la instruccin W vale .255. Para recordar MOVe es mover Literal es literal W es el registro trabajo. Como es de esperar, no afecta ningn bit del registro STATUS. MOVF Mueve el contenido de un registro a otro registro elegido por el usuario.
Cdigo: MOVF RETARDO,W

Si antes de la instruccin W vale H'2A' y RETARDO vale H'FF', despus de la instruccin W vale H'FF'. Notese que aqu podemos elegir el destino, y tenemos la posivilidad de elegir el destino al propio registro RETARDO. Al principio parece innecesario, pero se puede tomar como

una verificacin, ya que se ve afectado el registro STATUS bit Z. Para recordar MOVe es mover y File es registro. Afecta a:

Z Se pone a 1 si la operacin es 0

Anteriormente, habamos dicho que esta instruccin se la puede tomar como vereficacin, para saber si se guard con el mismo valor que tena, el bit Z se pone a 1 si el valor es igual al que tena cargado.
En lnea Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #13 : Diciembre 08, 2008, 06:37:16

MOVWF Mueve el contenido del registro W a un registro cualquiera elegido por el programador. Sin duda alguna, esta instruccin, es otra muy usada en la programacin ASM
Cdigo: MOVWF ADCON0

Cumulonimbus

Si antes de la intruccin W vale B'10000001' y ADCON0 vale 0x0, despus de la instruccin ADCON0 vale 0x81. Para recordar MOVe es mover W es el registro W y File es registro. No afecta ningn bit del registro STATUS.

NOP No realiza ninguna operacin. Solo consume un ciclo de instruccin.


Cdigo: NOP

Para recordar No es no y OPeration es operacin. No afecta ningn bit del registro STATUS. RETFIE Carga al CP con el valor de la parte alta de la pila para volver al lugar dnde se encontraba el CP antes de atender la interrupcin. Al mismo tiempo, pone a 1 el bit GIE para activar de nuevo las interrupciones.
Cdigo: RETFIE

Para recordar REturn es retornar From es de la IntErrupt es interrupcin. No afecta ningn bit del registro STATUS.
En lnea Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.

Leon Pic
Moderador PIC24F Desconectado Sexo: Mensajes: 3862

Re: Aprenda ASM desde cero


Respuesta #14 : Diciembre 17, 2008, 01:52:04

RETLW Carga al CP con el valor de la parte alta de la pila para volver al lugar dnde se encontraba el CP desde dnde se llam a la subrutina y al retornar, lo hace con un literal cargado en W especificado por el programador.

Esta instruccin, se utilizan en las tablas (para ms detalle, ver la explicacin del GOTO y CALL).
Cumulonimbus

Ejemplo:
Cdigo: RETLW 'L'

En este ejemplo, el MPLAB, carga en W el cdigo ASCII correspondiente a la letra L Extendiendo el ejemplo:
Cdigo: PAGESELW MOVFW CALL LA RUTINA TABLA CALL RUTINA PARA MOSTRA AL LCD NOP ; ; TABLA ADDWF RETLW CON 1 ASCII RETLW CON 2 ASCII RETLW CON 3 ASCII RETLW CON 4 ASCII 'T' ;RETORNA '3' ;RETORNA '2' ;RETORNA PCL,F '1' ;SUMA AL PCL ;RETORNA CON EL CONTENIDO DE W POR EJEMPLO 3 LCD_DATO ;LLAMA A LA TABLA contador TABLA ;CONFIGURA AL ;CARGA A W LA ;LLAMA A PCLATH PARA VOLVER AL LUGAR CORRECTO POCICIN A LEER EN LA TABLA POR EJEMPLO 3

Este es un ejemplo sencillo de como utilizar RETLW. Para interpretar este cdigo empezamos desde PAGESELW, supongamos que el CP est en esta instruccin (que est explicado que hace) luego pasa a la instruccin

MOVFW contador y suponemos que tiene cargado 3 en decimal, por lo que W pasar a tener 3 en decimal. El CP continua con CALL TABLA, el CP saltar por encima a todas las dems instrucciones y se dirige a la etiqueta TABLA y ejecuta la instruccin ADDWF PCL,F En el cdigo hablamos que le suma 3 al PCL, por lo que saltar al RETLW '3' cargando a W con el cdigo ASCII 3. Retorna justo debajo del CALL TABLA, o sea retorna a CALL LCD_DATO y ejecuta la rutina correspondiente, cuando termina, regresa al NOP (que puede ser cualquier instruccin que necesite el programador. Si en cambio, contador hubiera tenido cargado 4 en decimal cuando llegue a la tabla y le sume al PCL este apuntar a RETLW 'T' cargando en W el cdigo correspondiente ASCII. Para recordar RETurn es retornar Literal es literal W es el registro de trabajo W No afecta ningn bit del registro STATUS. RETURN Carga al CP con el valor de la parte alta de la pila para volver al lugar dnde se encontraba el CP cuando se llam a la rutina o subrutina. La diferencia con RETLW es que RETURN regresa sin cambiar a W. Este se utiliza para terminar una rutina y no se necesite ningn dato. Por ejemplo en la rutina CALL LCD_DATO no nos sirve que vuelva con ningn valor ya que es una rutina para enviar datos a un LCD, asi que esta rutina tendr implementada RETURN Por ejemplo:
Cdigo: RETURN

No afecta ningn bit del registro STATUS

Para recordar RETURN es retornar.


ltima modificacin: Diciembre 21, 2008, 09:28:28 por Leon Pic En lnea

Jess dijo, yo soy el Camino, la PAZ y la VIDA, nadie llega al PADRE si no es por mi.
IMPRIMIR

Pginas: 1 2

Ir Arriba

anterior prximo
Ir a:
=> Tutoriales, guias y cursos en uControl

Powered by SMF 1.1.9 | SMF 2006-2009, Simple Machines LLC Pgina creada en 0.127 segundos con 19 consultas. (Pretty URLs adds 0.021s, 2q)

Potrebbero piacerti anche