Guia Assembler PIC
July 7, 2022 | Author: Anonymous | Category: N/A
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