pic16f876 icd2 pc mplab

Anuncio
;RC<7:0> tiene 8 leds
;RB<0> tiene un pulsador. RB<0>=1/0 es no-pulsado/pulsado
PRACTICA 0: TUTORIAL MPLAB + ICD2
Introducción
#include "p16f876.inc"
Este tutorial muestra las opciones básicas para el ensamblado, linkado, y
simulación de programas sobre los PIC, usando el software MPLAB v7.50.
También incluye la depuración usando el mismo software junto con el
depurador ICD2.
La aplicación para el tutorial es una placa con un PIC16F876, conectado a 8
diodos led (en los puertos RC0-RC7), y un pulsador en RB0, tal como aparece
en la Fig.1. El reloj del sistema es de tipo RC, de frecuencia 4MHz.
PIC16F876
VDD
MCLR/VPP
RB7/PGD
RA0/AN0
RB6/PGC
RA1/AN1
RB5
RA2/AN2/VREF+
RB4
RA3/AN3/VREF-
RB3/PGM
RA4/T0CKI
RA5/AN4/SS
4.7kΩ
VSS
OSC1/CLKIN
22pF
OSC2/CLKOUT
PC
MPLAB
VDD
VDD
VDD
VSS
RC1/T1OSI/CCP2
RC6/TX/CK
10nF
equ 0x20
;Es un GPR en Banco#0
org 0h
;Vector de RESET
nop
movlw 00h
banksel TRISC
;Banco#1
movwf TRISC
;Todos los bits RC<7:0> de salida
bcf OPTION_REG,NOT_RBPU
;Habilita pull-up en RB<7:0>
banksel PORTC
;Banco#0
movwf PORTC
;Apaga todos los leds
clrf COUNT
;COUNT=0
loop1
btfss PORTB,0
goto inccnt
goto loop1
;Espera a pulsador en RB<0>=0
inccnt
incf COUNT,F
movf COUNT,W
movwf PORTC
;COUNT++ y RC<7:0>=COUNT
loop2
btfss PORTB,0
goto loop2
goto loop1
;Espera a pulsador en RB<0>=1
10kΩ
RB1
RB0/INT
RC7/RX/DT
RC3/SCK/SCL
USB o
RS232
start
RB2
RC0/T1OSO/T1CLK
RC2/CCP1
ICD2
COUNT
end
RC5/SDO
Code 1: Código ensamblador del firmware
RC4/SDI/SDA
Creación del proyecto y Simulación
8x470Ω
8xLED
Fig1. Placa de la aplicación
El firmware se encarga de controlar el encendido de los leds, en función del
número de pulsaciones realizadas sobre el pulsador. Inicialmente los leds se
encuentran apagados, y a medida que se realiza una nueva pulsación se
muestra por los leds el número de pulsaciones efectuadas, en formato binario.
Esta dividido en dos partes, una primera parte de inicialización, que configura
los puertos RC0-RC7 como salida y el puerto RB0 como entrada. También se
inicializa a cero un GPR (0x20) como contador del número de pulsaciones
efectuadas, y se apagan los leds. La segunda parte es un bucle infinito que
espera a la pulsación de RB0, incrementa el contador de pulsaciones y muestra
su valor por los leds, y espera que se deje de accionar el pulsador antes de
continuar con la siguiente iteración del bucle.
1. Arrancar el MPLAB
2. Crear nuevo proyecto (Project / New). Poner como nombre p0, y como
directorio C:\TMP\p0
3. Crear nuevo archivo (icono New File), teclear el código del firmware, y
guardar el fichero (incono Save File) con el nombre p0.asm, en el directorio
C:\TMP\p0.
4. Añadir este fichero a las fuentes del proyecto, pulsando el botón derecho
del ratón sobre Souce Files dentro de la ventana que contine el fichero del
proyecto p0.mcp. Configurar el proyecto para el PIC16F876 (Configure /
Select Device). Configurar (Configure / Configuration Bits) el oscilador RC,
WDT deshabitado, y resto de parámetros como aparecen en la siguiente
figura. Guardar el proyecto (Project / Save Project)
Proyecto p0.mcp:
•p0.asm
Configure Bits
7. Realizar reset (icono Reset), y empezar a ejecutar paso a paso (Step Into).
Abrir la ventana para visualizar la memoria de programa (View / Program
Memory) y ventana de SFRs (View / Special Funcition Registers). Observar
como evoluciona el programa y los SFRs que son usados por el firmware a
medida que se va ejecutando.
8. Para mejorar la depuración es mejor visualizar unicamente aquellos SFRs y
GPRs que nos interesan. Cerrar las dos ventanas anteriores y abrir una
ventana Watch (View / Watch), y añadir la visualización de PORTB, PORTC
(SFRs de los valores de los puertos), TRISB, TRISC (SFRs de la
configuración de los puertos) y COUNT (el GPR usado como contador), con
Add SFR o Add Symbol para añadir SFR o GPR respectivamente. Volver a
efectuar un Reset y volver a ejecutar paso a paso.
9. El valor inicial de PORTB<0>=0 (que ha sido configurado como entrada)
porque el simulador asigna al pin RB0=0, que es el estado correspondiente
a cuando el pulsador está accionado. Para simular la acción de presión o
dejar de accionar el pulsador se abre una ventana de estímulos (Debugger /
Stimulus / New Workbook). Los estímulos sobre RB0 los haremos nosotros
cuando deseemos, por lo que hay que ir a la pestaña Asynch
(Asynchronous Stimulus). Asignar a RB0 una acción Set High y otra acción
Set Low. Disparar (Fire) el estímulo RB0=1 (simula pulsador no accionado)
y ejecutar un paso o reset. Experimentar como evoluciona el código a
medida que se simula como se va pulsando/dejando de pulsar el pulsador.
Figura 2. Proyecto p0.mcp y fichero fuentes p0.asm, y las opciones de
configure bits
5. Ensamblar y linkar (icono Build All). Si el código es correcto aparecerá en la
ventana Output / Build el mensaje Build Succeeded. Aparecen también dos
mensajes (no son errores ni warnings) que indican que se acceden a
registros que no son del banco 0, para que te asegures que la selección del
banco es correcta.
Executing: "C:\Tecno\MPLAB7.5\MPASM Suite\MPAsmWin.exe" /q
/p16F876 "p0.asm" /l"p0.lst" /e"p0.err"
Message[302] C:\TMP\P0\P0.ASM 13 : Register in operand not
in bank 0. Ensure that bank bits are correct.
Message[302] C:\TMP\P0\P0.ASM 14 : Register in operand not
in bank 0. Ensure that bank bits are correct.
Loaded C:\TMP\p0\p0.COD.
BUILD SUCCEEDED: Wed Feb 13 13:48:44 2008
6. Para simular el PIC16F876 con este firmware seleccionar como herramienta
de depuración el simulador (Debugger / Select Tool / MPLAB SIM). Cambiar
las opciones del simulador (Debugger / Settings)
• Processor frecuency: 4MHz
• Resto de opciones: por defecto
Estimulo RB0=1 (Fire)
Estímulo RB0=0
PORTB<0>=1
Figura 3. Ventanas Watch y de Estímulos asíncronos
10. Simular el código de forma animada (boton Animate), pulsando primero
Reset. Comprobar el correcto funcionamiento del código con la estimulación de
RB0.
10. Una vez comprobado el correcto funcionamiento del código, volver a
ejecutar un Reset. Colocar un punto de ruptura en la instrucción que
modifica los leds de estado (seleccionar la línea de la instrucción movf
PORTC y con botón derecho de ratón, Set Breakpoint). El código se puede
simular sin necesidad de ejecutar paso a paso; una vez se alcanza el punto
de ruptura:
11. También es posible medir el tiempo que paso hasta alcanzar una
instrucción. Seleccionar View / StopWatch, realizar un reset y ver paso a
paso cuantos ciclos máquina y tiempo requieran las instrucciones que no
son de salto y las de salto. Volver a realizar un reset y ver el tiempo que
pasa hasta alcanzar el punto de ruptura. Experimentar en diferentes sitios.
Creación del proyecto y Simulación
Se van a repetir los pasos anteriores realizados con el simulador, pero en este
caso depurando el sistema real (PIC16F876 con LEDs y pulsador) con el ICD2.
1. Asegurarse de que la placa PCB no esté alimentada. Conectar el ICD2 al
PC y a la cabecera con el PIC16F877. Conectar la cabezera a la placa PCB
con los leds y pulsador. Finalmente alimentar la placa a 9V.
2. En MPLAB cambiar el programador al ICD2 (Programmer / Select
Programmer / MPLAB ICD2). Aparecerá un mensaje de warning debido a
que la cabecera lleva el PIC16F877 mientras que el proyecto está
configurado para PIC16F876. Ambos PICs son iguales, excepto que el 877
tiene más pines (40 pines en lugar de 28) y puertos conectados a estos,
pero por lo demás son compatibles
Connecting to MPLAB ICD 2
...Connected
Setting Vdd source to target
ICDWarn0020: Invalid target
read=0x4D)
...Reading ICD Product ID
Running ICD Self Test
...Passed
MPLAB ICD 2 Ready
device
id
3. Programar el PIC (icono Program Target Device)
MPLAB ICD 2 Ready
Programming Target...
...Validating configuration fields
...Erasing Part
...Programming Program Memory (0x0 - 0x12)
...
(expected=0x4F,
…Verify Succeeded
...Programming succeeded
4. Cambiar el depurador a ICD2 (Debugger / Select Debugger / MPLAB ICD2)
5. Repetir la ejecución paso a paso, añadir breakpoints, visualizar los GPRs y
SFRs de interés, y demás pasos realizados durante la simulación, pero esta
vez usando el botón RB0 de la placa
Descargar