ex6: micro pràctica 2: tutorial de mplab i llenguatge...

16
EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador 1 EX6 de Sistemes Electrònics Digitals GRUP: 13 Components: Pablo Andina Ivan Farre Ivan Bella DATA: 30/11/05 Descripció breu de les aportacions realitzades Familiaritzar-se amb el llenguatge assemblador, buscant informació sobre l’estructura intern del PIC16F84 i les seves instruccions, i l’entorn de simulació PROTEUS adaptat a la família microchip. Variar el codi inicialment donat per fer una ampliació del circuit, variant el codi font i adaptant la circuiteria amb el Proteus. TEMPS D’ESTUDI I DE PREPARACIÓ DE L’EXERCICI: Sessions TGA a l’aula: 2 Sessions TGB al laboratori 2 Sessions TGC fora de l’horari 2 Treball individual Estudiant 1: Estudiant 2: Estudiant 3: Estudiant 4: 2,5 3 4 Temps total (per estudiant) 10

Upload: others

Post on 18-Sep-2019

10 views

Category:

Documents


0 download

TRANSCRIPT

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

1

EX6 de Sistemes Electrònics Digitals GRUP: 13 Components: Pablo Andina Ivan Farre Ivan Bella DATA: 30/11/05 Descripció breu de les aportacions realitzades Familiaritzar-se amb el llenguatge assemblador, buscant informació sobre l’estructura intern del PIC16F84 i les seves instruccions, i l’entorn de simulació PROTEUS adaptat a la família microchip. Variar el codi inicialment donat per fer una ampliació del circuit, variant el codi font i adaptant la circuiteria amb el Proteus. TEMPS D’ESTUDI I DE PREPARACIÓ DE L’EXERCICI:

Sessions TGA a l’aula: 2 Sessions TGB al laboratori 2 Sessions TGC fora de l’horari 2 Treball individual Estudiant 1: Estudiant 2: Estudiant 3: Estudiant 4:

2,5 3 4

Temps total (per estudiant) 10

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

2

CONTINGUT DE L’EXERCICI L’anàlisi del primer programa en assemblador ..........................................................................Pàgina 3 La compilació del projecte..............................................................................................................Pàgina 8 La simulació a través del laboratori virtual Proteus-VSM.......................................................Pàgina 10 El procés de “debugging”a través de l’execució pas a pas........................................................Pàgina 12 Una ampliació senzilla del projecte (programació en assemblador)........................................Pàgina 13 Conclusions....................................................................................................................................Pàgina 16

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

3

L’anàlisi del primer programa en assemblador

Un cop hem analitzat el codi del programa fem el diagrama de flux del comptador de 8 bits.

Analitzem el codi i determinem:

- Directives: les directives son unes instruccions addicionals , un conjunt de pseudos-instruccions que serveixen per definir dades, rutines i tot tipus d’informació per tal que el programa executable sigui creat d’una manera determinada. Per tant en el nostre codi tenim varies directives:

o TITLE: Amb aquesta directiva posem el títol del nostre projecte entre cometes dobles.

o LIST:aquesta directiva s’utilitza: p= ‘model del PIC’ que especifica amb quin model de microchip estem treballant.

o INCLUDE: amb #include< ‘model del PIC’.inc> és necessari ja que conté informació i configuració interna del xip.

o ORG: ens indica on comenta el programa.

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

4

o EQU: aquesta directiva fa una igualtat entre una constant i un valor determinat.

o END: ens marca el final del programa El origen del programa segons la directiva ORG 005h indica on comenta el nostre programa. S’ha de tenir en compte que no podem definir el nostre de començament a la direcció de memòria 000h ja que s’ha de tenir un espai reservat per a la interrupció reset (MCRL). Com es veu a la Figura 1 el vector interrupció està a la posició 0004h i el vector reset al 0000h.

Figura 1. Mapa de memòria del PIC16F84A

Per entendre el funcionament del programa vam anar al datasheet del PIC i Al punt 7 (Instruction set summary) hi ha les instruccions amb la seva sintaxi. Abans hem d’aclarir uns quanta conceptes: PARAMETRE DESCRIPCIÓ F Direcció del registre ( de 0x00 a 0x7F) W Acumulador B Numero de bit; K Constant o etiqueta D Selecció de destí: d=0 guarda al acumulador (w). d=1 guarda al

registre f. Per defecte es d=1. INSTRUCCIO SINTAXI CLRF f Clear F. El contingut de f s’esborra (tots els bits a 0), BSF f,b Bit Set F. Posa a 1 el bit b de f. MOVLW k Move Literal to W. Els vuits bits de k son carregats al acumulador.

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

5

MOVWF f Move W to F. Mou les dades de w a f. BCF Bit Clear F. Posa a 0 el bit b de f. GOTO k Va a una subrutina. INCF f,d Increment f. El contingut del registre f és incrementat. Si d es 0 el

resultat es posa a w, si és 1 es torna a posar a f. MOVF f,d Move f. El contingut de f passa a un altre lloc depenent de d. Si d=0

el destí es w. Si d=1 es queda a f. d=1 és útil per testejar el registre. BTFSS f,b Bit Test f, Skip if Set. Si el bit b de f és 0 la següent instrucció

s’executa. Si el bit b de f és 1 la següent instrucció serà NOP (no opera).

Els ports de sortida serà el PORTB on estan connectats els vuits LEDS del comptador. Del PORTA només utilitzem per al polsador i després per ampliar el projecte amb el LED de la volta. Finalment tenim el fitxer de capçalera #INCLUDE<PIC16F84A.INC>. Si obrim el projecte i obrim aquest include veurem el seu contingut amb les definicions i les direccions de memòria. LIST ; P16F84A.INC Standard Header File, Version 2.00 Microchip Technology, Inc. NOLIST ; This header file defines configurations, registers, and other useful bits of ; information for the PIC16F84 microcontroller. These names are taken to match ; the data sheets as closely as possible. ; Note that the processor must be selected before this file is ; included. The processor may be selected the following ways: ; 1. Command line switch: ; C:\ MPASM MYFILE.ASM /PIC16F84A ; 2. LIST directive in the source file ; LIST P=PIC16F84A ; 3. Processor Type entry in the MPASM full-screen interface ;========================================================================== ; ; Revision History ; ;========================================================================== ;Rev: Date: Reason: ;1.00 2/15/99 Initial Release ;========================================================================== ; ; Verify Processor ; ;========================================================================== IFNDEF __16F84A MESSG "Processor-header file mismatch. Verify selected processor." ENDIF ;========================================================================== ; ; Register Definitions ; ;========================================================================== W EQU H'0000' F EQU H'0001'

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

6

;----- Register Files------------------------------------------------------ INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' EEDATA EQU H'0008' EEADR EQU H'0009' PCLATH EQU H'000A' INTCON EQU H'000B' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' EECON1 EQU H'0088' EECON2 EQU H'0089' ;----- STATUS Bits -------------------------------------------------------- IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' ;----- INTCON Bits -------------------------------------------------------- GIE EQU H'0007' EEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' RBIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' RBIF EQU H'0000' ;----- OPTION_REG Bits ---------------------------------------------------- NOT_RBPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' ;----- EECON1 Bits -------------------------------------------------------- EEIF EQU H'0004' WRERR EQU H'0003' WREN EQU H'0002' WR EQU H'0001' RD EQU H'0000' ;========================================================================== ; ; RAM Definition ; ;========================================================================== __MAXRAM H'CF' __BADRAM H'07', H'50'-H'7F', H'87' ;========================================================================== ; ; Configuration Bits ; ;==========================================================================

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

7

_CP_ON EQU H'000F' _CP_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _PWRTE_OFF EQU H'3FFF' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LP_OSC EQU H'3FFC' _XT_OSC EQU H'3FFD' _HS_OSC EQU H'3FFE' _RC_OSC EQU H'3FFF' LIST

Finalment associarem cadascun del bloc de diagrama de flux al conjunt d’instruccions en assemblador que el realitzen. BLOC 1: INICI

ORG 005h Start

BLOC 2: CONFIGUREM PORTB COM SORTIDA. COMPTADOR A ZERO

clrf PORTB bsf STATUS,RP0 movlw 00h movwf TRISB bcf STATUS,RP0 clrf COUNT

BLOC 3: S2 POLSAT?

Loop btfss PORTA,4 goto Incrementa goto Loop

BLOC 4: INCREMENTEM COMPTADOR I VISUALITZEM EL LED

Incrementa Incf COUNT,F movf COUNT,W movwf PORTB

BLOC 5: SOLTEM S2?

Debounce btfss PORTA,4 goto Debounce goto Loop

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

8

La compilació del projecte

Posem la practica el directori a C:\ tal com recomana la practica, després compilem. Per compilar el projecte: Project ->Build All.

Figura 2. Com compilar el nostre programa

Si veiem el fitxer output veiem que el projecte es compila correctament: Clean: Deleting intermediary and output files. Clean: Deleted file "prog_1.err". Clean: Deleted file "C:\ASM_Practica_1\prog_1.cod". Clean: Deleted file "C:\ASM_Practica_1\prog_1.hex". Clean: Deleted file "prog_1.lst". Clean: Done. Executing: "C:\Archivos de programa\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F84A "prog_1.asm" /l"prog_1.lst" /e"prog_1.err" Warning[207] C:\ASM_PRACTICA_1\PROG_1.ASM 41 : Found label after column 1. (COUNT) Message[302] C:\ASM_PRACTICA_1\PROG_1.ASM 64 : Register in operand not in bank 0. Ensure that bank bits are correct. Message[302] C:\ASM_PRACTICA_1\PROG_1.ASM 74 : Register in operand not in bank 0. Ensure that bank bits are correct. Warning[205] C:\ASM_PRACTICA_1\PROG_1.ASM 117 : Found directive in column 1. (END) Loaded C:\ASM_Practica_1\prog_1.COD BUILD SUCCEEDED: Thu Nov 24 20:45:07 2005

Obrim el fitxer Prog_1.HEX amb un editor de text per veure el codi hexadecimal que es gravarà al PIC.

Figura 3. Arxiu .HEX que introduïm al PIC

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

9

La simulació a través del laboratori virtual Proteus-VSM

Obrim el PROTEUS i carreguem la practica.

Figura 4. Esquemes del comptador (mòdul comptador, connexió del PIC16f84A i mòdul alimentació) Observem el circuit d’alimentació del PIC. Bàsicament es un regulador 78L05 que dóna 5V a la sortida. El LED indica si està funcionant o no. Els condensadors són per fer més estable el senyal. Aquest circuit no surt d’un corrent altern com pot ser el de casa si no que surt d’una bateria de 9V. Si ho volguéssim per un endoll hauríem de posar un transformador i un pont de díodes per tal de fer un rectificador d’ona completa.

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

10

Entrem dintre del COMPTADOR8BITS i mirem que al PIC16F84 tenim el arxiu .HEX abans de començar la simulació. Per fer això seleccionem sobre el PIC i premem el botó dret i tindrem un menú on posarà Program File i el arxiu associat al PIC. Un cop comencem a simular el circuit cada cop que polsem el polsador (RA4) incrementa un bit mentre que si polsem RESET (MCLR) es posarà a 0. A continuació tenim unes quantes captures de la nostra simulació:

Figura 5. Fotogrames de la simulació del comptador de 8 bits

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

11

El procés de “debugging” a través de l’execució pas a pas

Aquesta opció ens permet anar avançant més detalladament el funcionament del PIC. A més a més podem col·locar “breakpoints” per aturar el projecte en el punt que vulguem i poder consultar el valor de les variables.

Figura 6. Opcions del debugger

Quan utilitzem la opció debugging controlem la simulació mitjançant una fina finestra d’aquest estil. També podem consultar el valor de les diferents variables del nostre programa en qualsevol moment del debugging. El seu valor i la seva direcció de memòria ens apareixeran en una finestra com la que mostra la imatge següent.

Figura 7. Registres interns del PIC

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

12

Una ampliació senzilla del projecte (programació en assemblador)

Ara volem ampliar el programa i el circuit per tal que cada vegada que el comptador doni una volta completa s’il·lumini un LED que connectarem a la línia RA0. El diagrama de flux sofreix algunes modificacions degut aquesta ampliació. Modifiquem el diagrama de flux inicial per il·luminar el LED a cada volta.

CONFIGUREM PORTB COM SORITDA COMPTADOR A ZERO CONFIGUREM RA1 COM SORTIDA.

S2 POLSAT?

NO

INCREMENTEM EL COMPTADOR I VISUALITZEM EL LED. POSEM EL RA1 A NIVELL BAIX.

SI

NO

INICI

COMPTADOR=255?

SI

ENCENEM EL LED DE VOLTA.

SOLTEM S2?

NO

SI

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

13

Implementem aquest diagrama de flux en el codi inicial. Les instruccions noves estan en cursiva i subratllades. Finalment el codi ampliat és el següent: ; ************************************************************************************** ; TÍTOL I DESCRIPCIÓ ; ***************************** TITLE "Comptador de polsos" ; Aquest programa està preparat per a la targeta PIC_MILLENIUM de demostració. ; El Port B està connectat a la barra de 8 LED. ; La línia RA4 està connectada al polsador S2 ; Cada vegada que es prem el polsador S2, s’incrementa en una unitat el compte ; de polsos que s’emmagatzema a la variable COUNT i es visualitza el seu valor ; en binari en els LED connectats al PORTB del PIC ; ************************************************************************************** ; SELECCIÓ DEL PIC ; **************************** LIST p=16F84A ; Aquesta directiva de l’assemblador amb l’opció p ; selecciona el PIC ; ************************************************************************************** ; DEFINICIONS PRÒPIES DEL PIC ; **************************** #INCLUDE <P16F84A.INC> ; Inclou les definicions del PIC seleccionat ; L'ús de noms en lloc de xifres facilita molt la ; comprensió dels programes. En aquesta aplicació ; solament usem les definicions següents: ; W EQU H'0000' ; F EQU H'0001' ;----- Register Files ----------- ; STATUS EQU H'0003' ; PORTA EQU H'0005' ; PORTB EQU H'0006' ; TRISB EQU H'0086' ;----- STATUS Bits -------------- ; RP0 EQU H'0005' ; ************************************************************************************** ; DEFINICIONS ; **************************** COUNT EQU 0x0C ; A la posició 0Ch comencen els registres de ; propòsit general dins de la memòria SRAM ; Per tant, s’usa la primera posició per guardar ; el comptatge de polsos. MAXIM EQU 0xff ; Comparem MAXIM amb el valor fins que arribi a 256 ; ************************************************************************************** ; PROGRAMA ; **************************** ORG 005h ; La directiva 'org' indica on ha de començar el ; programa. La memòria FLASH de programa per aquest ; micro és de 1024 posicions de 14 bits cadascuna). ; La posició 000h és el començament, però hi ha el ; vector de reset, així que la posició 005h és la ; primera lliure desprès del vector d’interrupció ; Normalment començarem els programes en aquesta ; posició ; ----- Configurar el port B com a sortida

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

14

Start ; Etiqueta que indica la primera posició del programa clrf PORTB ; Posa a 0 el registre PORTB on hi han els LEDS bsf STATUS,RP0 ; Per tal d'adreçar-lo directament, cal configurar el bit 5 ; del registre d'estat STATUS. movlw 00h movwf TRISB ; Configura el PORT_B com a sortida bcf TRISA,1 ; Configura el RA1 com a sortida bcf STATUS,RP0 ; Torna a l'adreçament del bank 0 clrf COUNT ; ----- Inicialitza el comptador Loop btfss PORTA,4 ; ----- Si hi ha S2 polsat saltem a incrementar el COUNT ; Al bit 4 del PORTA (RA4) hi ha connectat S2. goto Incrementa ; Quan hi ha tecla polsada, RA4 = 0. S'executa la propera ; instrucció que es d'incrementar el compte goto Loop ; Mentre no s'hagi premut S2, RA4 = 1el programa es queda ; en aquest llaç ; ----- Incrementa i visualitza el contingut de COUNT Incrementa Incf COUNT,F ; Incrementa i es guarda el valor en el propi registre (F=1) movf COUNT,W ; Porta el contingut de COUNT a l’acumulador movwf PORTB ; Porta W al port b per tal d’il•luminar els LED bcf PORTA,1 ; Posa el RA1 a 0 goto Comparar Comparar subwf MAXIM,W ;Comparem el valor “maxim” amb el que portem fins ara btfsc STATUS,Z ;Si Z=0 salta ja que són iguals bsf PORTA,1 ;Encenem el Led que hem afetit Debounce btfss PORTA,4 ; Comprova si s'ha deixat de prémer la tecla S2 goto Debounce ; Si encara RA4 = 0, espera es queda en el llaç goto Loop ; Ja s'ha deixat anar la tecla (RA4 = 1) i torna cap al llaç ; principal ; ************************************************************************************** ; VECTOR DE RESET ; **************************** ORG 000h ; Quan es prem el MCLR_L, el programa va ; a l'adreça 000h per tal d'executar la seqüència ; d'inicialització. En aquest cas, simplement un salt a ; l'origen del programa goto Start ; ************************************************************************************** ; BITS DE CONFIGURACIÓ GENERAL PER AL PROGRAMADOR ; **************************** __CONFIG _RC_OSC & _PWRTE_ON & _CP_OFF & _WDT_OFF ; Rellotge exterior RC (_RC_OSC) ; Usarem el temporitzador d'arrencada Power-Up Timer(_WRTE_ON) ; No usarem el Watch-Dog Timer (_WDT_OFF)

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

15

; No protegirem el codi (_CP_OFF) END ; Directiva que marca el fi del programa font ; **************************************************************************************

Finalment compilem el projecte i veiem que no hi ha errors. Anem al PROTEUS i ampliem el circuit amb una resistència un diode LED.

Figura 8. Ampliació del circuit del PIC

EX6: MICRO Pràctica 2: Tutorial de MPLAB i llenguatge assemblador

16

Un cop hem ampliat simulem el circuit i comprovem que a cada volta el LED

s’encén.

Conclusions Fent aquesta pràctica ens hem introduït en un tipus de programació que abans no havíem vist. Estàvem acostumats a programació d’alt nivell, molt més simple i no tan estricte a l’hora de realitzar operacions tan bàsiques com podria ser fer una suma. Amb la programació en assemblador hem après que la programació va pujant de dificultat quan més a nivell hardware treballem i hem d’anar mirant els mapes de memòria per tal de mirar les direccions del registre del qual modificar, configurar el PIC abans fins i tot de començar a programar...