Guia Assembler PIC

July 7, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Guia Assembler PIC...

Description

 

 

Guia Assembler PIC  BCF R egi gist stro ro,, B it   B i t Cle Clea ar F ile “Pone a Cero, el Bit correspondiente del Registro Especificado” Especificado”  

En particular, los bits de PortB tienen nombre y se pueden llamar como tal, en caso contrario, basta con poner el número de bit o incluso la dirección del registro (ej: 0x06)

BSF R egi gist stro ro,, B i t   B i t Se Sett F File ile “Pone a Uno el Bit correspondiente del Registro especificado” especificado”  

Hasta ahora, tenemos la instrucción básica que qu e permite poner Ceros y Unos en los diferentes registros,  pero en algunos casos, puede ser necesario escribir todo un byte con una sola instrucción, como veremos a continuación.

MOVLW Literal  “Pone el valor Literal en el Registro W”  W”  Cuando se habla de  Literal, se hace referencia a números, estos pueden ser en los siguientes formatos: Binario 0b’10000100′   Decimal 132  Hexadecimal 0x84  Independiente de la base numérica del literal, a nivel niv el de bits, siempre serán binarios.

 

 

Ejemplo:

MOLW No tiene un mayor efecto en la programación, pero es un paso provisorio cuando se quiere  poner un Byte completo en algún registro.

MOVWF Registro  “Deposita el contenido de W en el Registro especificado” especificado”   Se utiliza en conjunto con MOVLW para llenar registros con una sola instrucción. Ejemplo:

En este caso, el par de instrucciones, sirvió para configurar entradas y salidas, ya que se aplicó al TRISB. (los pines RB0-RB1-RB2-RB3 quedaron como entradas, mientras que RB4-RB5-RB6-RB7 quedaron como salidas)

BTFSS R egi gist strr o, Bi B it B i t te test fi le, le, ski p i f se sett “Evalúa el Bit especificado del Registro correspondiente e ignora la siguiente línea de código  si esta a Uno“  Esta instrucción, puede ser usada para evaluar si se activa alguna entrada. Ejemplo:

Se evaluó el estado del tercer bit del registro re gistro PORTA, al ser este 1, entonces se ignora la siguiente línea de código.

 

 

BTFSC Registro,Bit B i t te test fi le, le, ski p i f cle clea ar .  “Evalúa el Bit especificado del Registro correspondiente e ignora la siguiente línea de código  si esta a Cero“  Al contrario de lo que hace BTFSS, esta instrucción, evalúa los Ceros. Ejemplo:

Sirva, para evaluar la desactivación de una entrada o salida.

GOTO label  I r al La L abel Una de las instrucciones poderosas del lenguaje assembler, pues permite que nuestro programa se ejecute en diferentes partes del código o volver a repetir instrucciones hasta que se cumpla una determinada condición. Un  Label,  puede ser cualquier palabra escrita en el programa que no sea una instrucción en Assembler, debe escribirse siempre con las misma Mayúsculas y Minúsculas. Ejemplo:

En el código mostrado, mientras no se active el Bit RB1, el programa seguirá repitiendo la instrucción BTFSS hasta que este se active y entonces encenderá el bit RB7.

Call y Return Son instrucciones que permiten llamar Subrutinas; pequeñas porciones de código que una vez que terminan de ejecutarse dejan la ejecución del programa justo en el lugar donde estaba antes de llamarlas. En la imagen, es posible ver como trabajan estas instrucciones, (Ese programa no necesariamente funciona) INICIO BSF STATUS,RP0 CALL configuraIO BSF

STATUS,RP0

BSF

PORTB,RB0

 

 

BSF

PORTB,RB1

GOTO INICIO configuraIO MOVLW MOVWF RETURN

B’00000000’ 

TRISB

Se puede ver como el código va a la definición de la subrutina y luego vuelve al lugar en que estaba  para continuar con la ejecución de las demás instrucciones.

EQU En general, sirve para declarar una equivalencia entre una palabra y una expresión. Habitualmente se usa para poner nombre a algún registro re gistro de propósito general y no llamarlo por su dirección.

DECFSZ Registro,1 “Decrement file, skip if zero”   Resta 1 a un registro e ignora la siguiente línea de código si el resultado es cero. Ejemplo: numero EQU 0x27 Inicio MOVLW 5 MOVWF numero

cuentaMenos DECFSZ numero GOTO cuentaMenos

BSF PORTA,0 GOTO Inicio END

El programa no enciende el Bit 0 del Registro R egistro PORTA, si no hasta pasar 5 veces por el label cuentaMenos, lo cual se debe a que se carga la ca cantidad ntidad 5 en el registro número. 

 

 

11.- Estructura de un Código Assembler y consejos varios. Ahora que tenemos varias instrucciones para realizar operaciones a nivel de bit y registros, es  posible conseguir infinidad de funcionalidades, para comenzar un código no olvidar algunos de los siguientes pasos y consejos, además de los mencionados en el tutorial el  tutorial de uso de MPLAB-X aqui (h ps://pwmlabs.wordpress.com/2016/09/06/programacion-enassembler-con-mplab-x/). ps://pwmlabs.wordpress.com/2016/09/06/programacion-enassembler-con-mplab-x/). 1. Comenzar con ORG 0x00, esto hará que la ejecución del programa siempre comience en la  primera posición de memoria del PIC. 2. Declarar Entradas y Salidas; cambiar al banco 01, ir a los TRIS TR IS correspondientes a las entradas o salidas que se quieran usar y poner los ceros y unos correspondientes, luego, regresar al banco 00 para trabajar con los PORT. P ORT. 3. Desactivar Interrupciones, para no tener problemas con el pin RB0. 4. Utilice siempre comentarios, permiten que tanto usted como cualquiera que lea el código, pueda ponerse rápidamente en contexto y entender su código. Los comentarios no afectan la ejecución del código.

Configuración de puertos

Los SFR o Registros de Funciones Especiales mas importantes para la configuración de los puertos son : Status PORTX -siendo X = A, B, C o D TRISX - Siendo Siendo X = A, B, C o D Si se asigna un Cero (0) a un pin quedara como salida y si se asigna un Uno (1) entrada. Ejemplo: Movlw

b`11110’

Movwf

TRISA ; todos los pines serán entradas salvo RA0

Para trabajar con Tris debemos dirigirnos al banco donde este se encuentra, es decir poner el valor correspondiente al bit RP0 del registro STATUS

 

 

Ejemplo:

Nota: todo lo que se escriba después de ; (punto y coma) será un comentario y sirve para detallar o explicar el funcionamiento de cada línea de código EJEMPLOS DE PROGRAMAS Encender un led (lo que a ustedes les encanta

)

1.  LIST

P=16F84A; usar PIC 16F84A    2.  #include

 

3. 4.  __CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC

  ; code protec off 

5.  ; power up timer on; watchdog off; osc XT    6.  7.  8. 

  BSF BSF 

9. 

MOVLW

ORG

00 00    STATUS,5; activa Banco 1  STATUS,

11. 

'00000'; carga 00000 en W    B'00000' B MOVWF TRISA ; puerto a todos salidas   MOVLW B'00000000'; carga 00000000 en W  B'00000000'  

12. 

MOVWF

TRISB

  ; puerto b todos salidaS 

13. 

BCF

STATUS, STATUS ,5

; volvemos al Banco0 

14.  15. 

BCF

,0 PORTB, PORTB

; ponemos a 0 RB0  

16. 

BCF

PORTB, PORTB ,1

; ponemos a 0 RB1  

17. 

BCF

PORTB,2  PORTB,

; ponemos a 0 RB2  

18. 

BCF

,3 PORTB, PORTB

; ponemos a 0 RB3  

10. 

 

 

19. 

BCF

,4  PORTB, PORTB

; ponemos a 0 RB4  

20. 

BCF

PORTB, PORTB ,5 

; ponemos a 0 RB5  

21. 

BCF

,6  PORTB, PORTB

  ; ponemos a 0 RB6 

22. 

BCF

PORTB, PORTB ,7 

  ; ponemos a 0 RB7 

23.  24. 

; luego haremos todos juntos 

25. 

; etiqueta 

INICIO

26. 

  BSF BSF 

PORTB,0  PORTB,

; pone a 1 RB0  

27. 

GOTO

INICIO

; va a inicio 

28.  29. 

END

; fin de programa 

Prender y apagar un led cada 1 seg. ( calculo de retardo y tiempo… OJO)  OJO)   Cristal de 4 mhz 1.  2.  3.  4.  5.  6.  7.  8.  9.  10.  11.  12.  13. 

List P=16F84A INCLUDE status trisa trisb porta portb cont1 cont2 cont3

equ equ equ equ equ equ equ equ

0x03 0x85 0x86 0x05 0x06 0x0C 0x0D 0x0E

reset org 0x00

 

14. 15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28. 29.   30.  31. 

inicio org 0x05 bsf status,5 movlw 0x00 movwf trisb bcf status,5 clrf portb led

bsf portb,0 goto retardo

retardo

movlw d'4' movwf cont3 movlw d'250' movwf cont2 movlw d'250' movwf cont1 nop

 

 

32.  33.  34.  35.  36.  37.  38.  39.  40.  41.  42.  43.  44.  45.  46.  47.  48.  49.  50.  51. 

 

52. 53.  54.  55.  56. 

decfsz cont1 goto $-.2 decfsz cont2 goto $-.6 decfsz cont3 goto $-.10 bcf portb,0 goto retardo2 retardo2 movlw d'4' movwf cont3 movlw d'250' movwf cont2 movlw d'250' movwf cont1 nop decfsz cont1 goto $-.2 decfsz cont2 goto $-.6 decfsz cont3 goto $-.10 end

 

 

Trabajando con entradas

Ponemos interruptores en RB0 a RB3, cuando son presionados, se enciende el led respectivo en RA0 a RA3. 1. 

LIST

2. 

.inc > #include
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF