Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porRamona Grego Modificado hace 10 años
1
José Estay A / jea I semestre académico 2014 Computadores (TU Sistemas Computacionales) Elementos de estructura de computadores
2
PIC 16F877-Arquitectura Este MCU es ampliamente usado como un dispositivo avanzado en la enseñanza ya que posee una variado complemento de interfaces: entrada análoga, puerto serial, puerto esclavo, entre otros mas un buen rango de temporizadores en hardware
3
El PIC 16F877 es una elección adecuada para el aprendizaje sobre microcontroladores, debido a que su lenguaje de programación es relativamente simple, en comparación con un microprocesador tal como el Pentium INTEL, el cual es usado en los computadores tipo PC. Este tiene un set de instrucciones poderoso pero complejo para poder soportar operaciones multimedia avanzadas
4
PIC 16F877 Pin out Este chip puede ser obtenido en diferentes formatos de encapsulado y la versión tipo DIP es recomendada para la construcción de prototipos La mayoria de los pines son I/O estructurados en 5 puertos: A(5), B(8), C(8), D(8), y E(3), dando un total de 32 pines I/O
5
Estos pueden operar como simples pines I/O digitales, pero la mayoría tiene mas de una función, y el modo de operación de cada uno es seleccionado inicializando varios registros de control dentro del chip Observe en particular, que los puertos A y E son entradas analogas por omisión (...by default...) al alimentar el chip o con Reset, así ellos tienen que ser configurados si operación I/O digital es requerida El puerto B es usado para bajar el programa a la ROM FLASH del chip (RB6 y RB7) y RB0 y RB4..RB7 pueden generar una INT
6
El puerto C da acceso a los temporizadores (en adelante TIMERs) y puerto serial El puerto D puede ser usado como un puerto esclavo, con el puerto E proveyendo los pines de control para este efecto El chip puede operar realmente con una tensión algo menor de 2 Volts para trabajo con batería autónoma y ahorro de power Un circuito de CLK de baja frecuencia usando solo un capacitor y un resistor para establecer la frecuencia puede ser conectado a CLKIN
8
O un circuito oscilador con XTAL puede ser conectado a través de CLKIN y CLKOUT MCLR es la entrada de RESET; cuando es 0 la MCU se detiene y se restablece cuando MCLR es 1. Esta entrada se debe afianzar en alto permitiendo al chip ejecutar si un circuito de reset externo no está conectado, pero usualmente es una buena idea incorporar un botón reset manual en todas las aplicaciones incluidas aquellas mas triviales.
9
Diagrama de bloque PIC 16F877 La memoria de programa principal es una Flash ROM la cual almacena una lista de instrucciones de 14 bits. Estas son alimentadas a la unidad de control y usadas para modificar el archivo de registros de la RAM Los registros incluyen registros especiales de control, los registros de puerto y un set de registros de propósito general los cuales pueden ser usados para almacenar datos temporalmente Un registro de trabajo separado, W, es usado junto a la ALU para procesar datos Varios módulos especiales de periféricos proveen de un rango de opciones I/O
11
Hay 512 direcciones RAM en el archivo de registros: 0..1FF, los cuales están organizados en 4 bancos (0..3), cada banco contiene 128 direcciones Se selecciona por omisión (seleccionado al POWER-UP) el banco 0. Banco 0: es numerado 00..7F Banco 1: 80..FF Banco 2: 100..17F Banco 3: 180..1FF Los bancos contienen registros especiales de funciones (SFRs), los cuales tienen un propósito dedicado, y los registros de propósito general (GPRs). Los registros del archivo son mapeados en la figura 2-3 de la hoja de datos
12
Los SFRs pueden ser mostrados en el diagrama de bloques como separados de los GPRs pero ellos están de hecho en el mismo bloque lógico y direccionados del mismo modo Deduciendo los SFRs desde el numero total de localizaciones de RAM y admitiendo que algunos registros se repiten en mas de un banco, esto resulta en 368 bytes de registros de datos GPR
13
Prueba de hwr Es usual definir el hwr sobre el cual se pueden mostrar las operaciones de un programa PIC. Inicialmente un diagrama de bloque es usado para esquematizar el diseño de hwr, como el que se muestra a continuación. El símbolo esquemático para la MCU es mostrado indicando los pines a ser usados Para el programa de prueba simplemente se necesitan entradas que conmuten entre 0V y 5V y una indicación lógica en las salidas
14
Bosquejo de Hwr – diagrama de bloques
15
Conexiones MCU 16F877
16
Una aplicación simple RB0..RB7: el puerto B actúa como un contador binario de 8 bit RD0: un CLEAR por un push-button RD1: un COUNT por un push-button
17
Aplicación simple: una secuencia binaria en la salida PORT B, archivo de diseño *.DSN, creado usando ISIS captura de esquemáticos)
18
Fuente *.ASM creado usando un editor de texto no-formateado y un archivo de listado *.LST (próxima ppt) creado usando Assembler MPASM PROCESSOR 16F877 MOVLW00 TRIS06 CLRF06 againINCF06 GOTOagain
19
MPASM 08.10 Released BIN1.ASM 4-18-2008 19:09:41 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 PROCESSOR 16F877 00002 0000 3000 00003 MOVLW 00 Warning[224]: Use of this instruction is not recommended. 0001 0066 00004 TRIS 06 00005 0002 0186 00006 CLRF 06 Message[305]: Using default destination of 1 (file). 0003 0A86 00007 again INCF 06 0004 2803 00008 GOTO again 00009 00010 END
20
MPASM 08.10 Released BIN1.ASM 4-18- 2008 19:09:41 PAGE 2 SYMBOL TABLE LABEL VALUE __16F877 00000001 again 00000003 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXXXX----------- ---------------- ---------------- ------- --------- All other memory blocks unused. Program Memory Words Used: 5 Program Memory Words Free: 8187 Errors : 0 Warnings : 1 reported, 0 suppressed Messages : 1 reported, 0 suppressed
21
Archivo Código de máquina creado usando Assembler MPASM :020000040000FA :0A000000003066008601860A03281E :00000001FF
22
Programa El ‘877 tiene 8k de memoria de programa Así puede almacenar un máximo de 1024x8=8192 instrucciones de 14-bit Por omisión, la carga y la ejecución empiezan desde la dirección cero Ejemplo de instrucción: Código fuente:MOVLW 05A Código HEX:305A Código binario:0011 0000 0101 1010 (16 bits) Instrucción:11 00xx kkkk kkkk (14 bits) La instrucción significa W 5A
23
En el set de instrucciones de la hoja de datos (Tabla 13-2)se observa que los primeros 4 bits (1100) conforman el código de instrucción (Op-Code), los próximos 2 bits nom son usados (xx, aparece como 00 en el código binario) y los últimos 8 bits conforman el valor literal (5A) El literal está representado como kkkk kkkk ya que puede tener cualquier valor en el rango 00000000..11111111 (00..FF) El formato de las otras instrucciones depende principalmente del número de bits requeridos para el operando
24
El número de bits del op-code puede variar entre 3 y todos los 14, dependiendo del número de bits necesarios para el operando Esto es diferente de un procesador convencional, tal como el Pentium, donde el op-code y el operando son cada uno creados como un número entero de bytes La instrucción del PIC es más compacta como se observa en el conjunto de instrucciones mismo, para mayor velocidad de operación. Esto se define como RISC
25
Otro ejemplo con más detalles La aplicación nos genera un archivo de diseño *.DSN, creado usando captura de esquemático de ISIS Los otros archivos generados: *.ASM, *.LST, *.HEX
26
Cuando el botón RUN es presionado, un cero lógico es ingresado en RD1, y un incremento en la cuenta binaria es observada en los LEDs, donde LSB=RB0. Cuando es liberado, (RD1=1) la cuenta se detiene y es retenida. Cuando el botón de RESET (RD0) es presionado, la cuenta desplegada va a cero (“reseteada” a cero) La velocidad del reloj de la MCU puede ser ajustada en RV1, alrededor de 40kHz.
27
Otro ejemplo con mayor detalle
28
ASM ;Source File:BIN4.ASM ;Author:Date: ;Processor:PIC 16F877 ;Hardware: PIC Demo System ;Clock: RC = 100kHz ;Inputs: Port D: Push Buttons ;RD0, RD1 (active low) ;Outputs: Port B: LEDs (active high) ;WDTimer: Disabled ;PUTimer: Enabled ;Interrupts: Disabled ;Code Protect: Disabled ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29
PROCESSOR 16F877; Define MCU type __CONFIG 0x3733; Set config fuses ; Register Label Equates.................................... PORTBEQU 06; Port B Data Register TRISBEQU86; Port B Direction Register PORTD EQU 08; Port D Data Register Timer EQU 20; GPR used as delay counter ; Input Bit Label Equates.................................. Inres EQU 0; 'Reset' input button = RD0 Inrun EQU 1; 'Run' input button = RD1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
30
; Initialise Port B (Port A defaults to inputs)............. BANKSELTRISB ; Select bank 1 MOVLW b'00000000' ; Port B Direction Code MOVWFTRISB ; Load the DDR code into F86 BANKSELPORTB ; Select bank 0 GOTOreset ; Jump to main loop
31
; 'delay' subroutine........................................ delayMOVWF Timer ; Copy W to timer register down DECFSZ Timer ; Decrement timer register GOTO down ; and repeat until zero RETURN; Jump back to main program
32
; Start main loop........................................... resetCLRFPORTB ; Clear Port B Data startBTFSSPORTD,Inres ; Test reset button GOTO reset ; and reset Port B if pressed BTFSC PORTD,Inrun ; Test run button GOTO start ; and repeat if n pressed INCF PORTB ; Increment output at Port B MOVLW 0FF ; Delay count literal CALLdelay; Jump to subroutine 'delay' GOTO start ; Repeat main loop always END ; Terminate source code
33
Programa Observe que dos tipos de etiquetas (label) son usados en el programa para representar números: identificadores de etiquetas son usados al principio del programa para declarar rótulos para el archivo de registros que serán usados en el programa Etiquetas que representan direcciones son puestas en la 1era. columna para marcar el destino de instrucciones GOTO y CALL
34
Palabra de configuración del chip La directiva de assembler _CONFIG establece aspectos relacionados con la operación del chip. Un área especial de la memoria de programa fuera del rango normal (2007h) almacena la palabra de configuración del chip. La función de cada bit se muestra en la tabla a continuación, junto con algunas configuraciones típicas. Mayores detalles en la sección 12 de la hoja de datos
35
Palabra de configuración `F877
36
Protección del código Por consideraciones comerciales o de seguridad se puede prevenir la lectura del código. Detalles en la sección 14 de la hoja de datos. CP1 protege deshabilita lectura WRT permite deshabilitar escritura desde dentro del programa mismo CPD protege escritura de la EEPROM de datos
37
ICD=Desarrollo (depuración) In-Circuit ICD permite que los programas sean bajados a la MCU después de que esta ha sido instalada en el circuito de aplicación Con ICD, el chip puede ser programado y reprogramado durante el desarrollo evitando daños mecánicos y eléctricos causados por la remoción del chip
38
Programación de bajo voltaje Normalmente cuando el chip es programado, un voltaje alto (12..14 V) es aplicado al pin PGM (RB3). Para evitar la necesidad de aplicar este voltaje durante la programación in-circuit, un modo de programación de bajo voltaje es disponible, sin embargo, al usar esta opción RB3 pierde su disponibilidad como función I/O en la operación normal
39
Power-up Timer Cuando la fuente de poder es aplicada a una MCU programada, el inicio de la ejecución del programa debería de ser demorado hasta que la fuente y el reloj sean estables, de otra manera el programa puede no ejecutarse correctamente. Así el timer power-up puede habilitarse como un paso rutinario. Un reloj interno provee una demora de 72 mseg. Esto es seguido por una demora de partida del oscilador de 1024 ciclos de reloj antes de que la ejecución del programa comience.
40
BOREN Brown-out se refiere a una breve caída en el voltaje de polarización, causados por fluctuaciones del suministro u otra falla de la fuente la cual puede interrumpir la ejecución del programa Si BOREN es seteado, una falla de fuente de no mas de 100 uSeg causará que el dispositivo se mantenga en reset hasta que la alimentación se recupere y luego esperará que el timer power-up finalice, antes de reiniciar. El programa debe ser diseñado para recuperación automática
41
Watchdog timer Está diseñado para resetear automáticamente la MCU si hay una mal función del código, por un error en la lógica de programación Un oscilador interno separado y un contador generan automáticamente un reset cada 18 mseg, a menos que sea deshabilitado en la palabra de configuración Si WdT es habilitado, debería ser regularmente reseteado por una instrucción en el lazo del programa (CLRWDT) para prevenir el RESET. Si el programa se cuelga y la instrucción de reset del WdTno es ejecutada, la MCU reiniciará y (posiblemente) continuará correctamente dependiendo de la naturaleza de la falla
42
Oscilador RC Un reloj tipo RC (resistor-capacitor) es barato y feliz, requiere de solo dos componentes externos de bajo costo, operando con el circuito driver interno La constante de tiempo determina el periodo del reloj Un resistor variable puede ser usado para tener una frecuencia manualmente ajustable, aunque esto no es muy estable y preciso
43
Oscilador Xtal Permite gran precisión. Normalmente es conectado a través de los pines de clock con un par de pequeños capacitores (15 pF) Un valor conveniente es 4 MHz, esto da un tiempo para el ciclo de instrucción de 1 uSeg, lo que hace mas fácil los cálculos de temporización (cada instrucción consume 4 ciclos de reloj)
44
Configuración La configuración por omisión es 3FFF, lo cual significa que la protección de código está apagada, ICD deshabilitado, escritura de programa habilitada, programación de bajo voltaje habilitada, BOREN habilitada, temporizador power-up deshabilitado, WdT habilitado y oscilador RC habilitado Un seteo típico para un trabajo de desarrollo básico habilita ICD, habilita power-up timer, deshabilita WdtT, y usa oscilador tipo XT
45
Conjunto de instrucciones del PIC Set de instrucciones Una versión del conjunto de instrucciones del PIC, organizada en grupos funcionales se muestra en la tabla hipervinculada arriba. Consiste de 35 instrucciones separadas, algunas con destinos resultantes alternativos El destino por omisión para el resultado de una operación es el archivo de registros, pero el registro de trabajo W es algunas veces una opción. Cada instrucción es descrita en detalle en la hoja de datos de la MCU, sección 15
46
Tipos de instrucciones: MOVE MOVE: los contenidos de un registro son copiados a otro. No se puede mover directamente un byte desde un registro de archivo a otro, debe hacerse vía el registro W Para poner datos dentro del sistema desde el programa (un literal) se debe usar MOVLW para colocar el literal dentro de W inicialmente. Luego puede ser movido a otro registro según se requiera
47
La sintaxis no es simétrica, para mover un byte desde W a un registro de archivo, MOVWF es usado. Para mover en el otro sentido, MOVF F,W es usado donde F es cualquier dirección de un registro de archivo. Esto significa que MOVF F,F está también disponible. Esto puede parecer sin objeto, pero de hecho puede ser usado para verificar un registro sin alterarlo
48
Tipo Registro Las operaciones de registro afectan solamente a un simple registro y todas excepto CLRW operan sobre los registros de archivo CLEAR establece todos los bits a cero DECREMENT disminuye el valor en 1 INCREMENT aumenta el valor en 1 SWAP intercambia los nibbles superior e inferior COMPLEMENT invierte todos los bits
49
ROTATE mueve todos los bits a la izquierda o derecha incluyendo el flag de carry en este proceso CLEAR y SET de un bit opera sobre un bit seleccionado, donde el registro y el bit necesitan ser especificados en la instrucción
50
Tipo Aritmética&Lógica Adición y substracción: si el resultado genera un bit extra (p.ej FF + FF = 1FE) o requiere de una cifra de préstamo (borrow) (p.ej. 1FE – FF = FF), el flag de carry es usado Las operaciones lógicas son llevadas a cabo con pares de bits de los dos números
51
Tipo TEST, SKIP&JUMP Los saltos programados son iniciados usando un bit de test y un brinco condicional seguido por un GOTO o CALL El test bit puede ser realizado sobre cualquier bit de un registro de archivo. Este podría ser un bit de un puerto, para chequear si una entrada ha cambiado, o un bit de estado en un registro de control
52
BTFSC (Bit Test and Skip iF Clear) y BTFSS (Bit Test and Skip iF Set) son usados para verificar un bit y brincar a la próxima instrucción, o no, de acuerdo al estado del bit cotejado DECFSZ y INCFSZ representan un test usado frecuentemente El test del bit y el brinco pueden ser seguidos de una simple instrucción que involucre la condicionalidad, pero un GOTO y CALL permiten un bloque de código condicional Otra opción, que es usual al usar tablas de datos, es RETLW (Return wi Literal in W)
53
Tipo Control NOP: no realiza operación alguna y consume 4 ciclos de reloj (delay) SLEEP: detiene el programa, tal que puede ser reiniciado por una interrupción externa. También será usada al final de cualquier programa que no posea un lazo que lo devuelva hacia atrás continuamente, para prevenir que la ejecución del programa continúe sobre localizaciones de memoria no usadas. Las localizaciones no usadas contienen el código 3FFF, el cual es una instrucción valida (ADDLW FF). Si el programa no es detenido, continuará ejecutando repetidamente estas instrucciones y comenzará nuevamente cuando el PC de la vuelta a 0000
54
CLRWDT: significa limpie (ponga a cero)el temporizador perro de guardia. Si el programa se pega en un loop o se detiene por cualquier otra razón, será reiniciado automáticamente por el WdT. Para detener este evento cuando el programa está operando normalmente, el WdT debe ser reseteado a intervalos regulares menores a 10 mSeg dentro del loop del programa, usando CLRWDT
55
Instrucciones opcionales TRIS fue una instrucción originalmente creada para hacer la inicialización de los puertos simple. Selecciona el banco 1 de registros tal que los registros de dirección de datos TRIS (TRISA, TRISB, etc.) pueden ser cargados con un código de sentido de dirección. El fabricante no recomienda más el uso de esta instrucción, aunque aún es soportada por las versiones actuales de ensambladores para mantener una compatibilidad regresiva y es usual cuando se aprende con programas muy simples
56
La directiva al ensamblador BANKSEL puede ser usada en programas mas avanzados ya que otorga un acceso más flexible a los registros en los bancos 1, 2, 3 La otra opción es cambiar los bits de selección de banco en el registro de estado usando BSF y BCF OPTION: provee acceso al registro OPTION, es la otra instrucción que ya no es más recomendada. Puede ser reemplazada por BANKSEL para seleccionar el banco 1 el cual contiene el registro OPTION el que puede entonces ser accedido directamente
57
Ejecución del programa Instrucciones del PIC Registro IR, secuencia, op-code, decodificación PC sigue la pista de la ejecución del programa PC se limpia a cero al encender o resetear El registro PC es de 13 bits, lo que implica 8 K de memoria de programa El rango del registro PC
58
El registro PCL (SFR 02) contiene el byte bajo y este puede ser leído o escrito como cualquier otro registro del archivo El byte alto es solo accesible indirectamente vía PCLATH (SFR 0A)
59
Subrutinas Una etiqueta e usada al inicio de la subrutina Cuando la subrutina es llamada esta dirección destino es copiada dentro del PC Al mismo tiempo la dirección de retorno (PC + 1) es empujada dentro del stack El stack tiene 8 niveles y es LIFO
60
La subrutina finaliza con una instrucción RETURN que causa que el programa regrese a la posición original y continúe Esto es realizado sacando la dirección de retorno desde el stack y reemplazándola sobre el PC En los PIC el stack no es directamente accesible (ver figura próx ppt)
62
Interrupciones El stack también es usado cuando se procesa una INT La INT es efectivamente un CALL y RETURN el cual es iniciado por una señal externa de hwr que fuerza al procesador a saltar a una secuencia dedicada de instrucciones: la ISR Por ejemplo, la MCU puede ser seteada tal que cuando un temporizador de hwr finaliza su cuenta, el proceso requerido en ese momento es llamado vía una INT de Timer
63
Cuando una señal de INT es recibida se termina de ejecutar la instrucción actual y la dirección de la próxima instrucción (la dirección de retorno) es empujada dentro del stack La ISR finaliza con una instrucción RETFIE la cual causa que la dirección de retorno sea extraída desde el stack La ejecución del programa continúa entonces en la localización original Sin embargo, hay que tener en cuenta cualquier cambio en los registros que pueda haber sucedido en la ISR Si es necesario los registros deben ser salvados al comienzo de la ISR y restaurados al final, en algún conjunto de registros de archivo libres
64
Límites o fronteras de página Durante la ejecución normal de un programa la operación del PC es automática pero pueden surgir problemas potenciales cuando ocurre una bifurcación en el programa Las instrucciones de salto (CALL o GOTO) proveen solo de una dirección destino de 11 bits, tal que la memoria de programa es efectivamente dividida en 4 bloques de 2K, o PAGINAS (pages) Un salto a través de fronteras de páginas requiere de la modificación de los bits de selección de página por el programa usuario (PCLATH 4:3) Además, si los 8 bits del PCL son modificados directamente, como en el caso de una lectura de una tabla, debe tenerse cuidado si un salto está hecho desde un bloque de 256 bytes a otro Secciones 2.3 y 2.4 de la hoja de datos del 16F877 detallan como manejar estos problemas
65
Fin TUSistComp_Comp05 JEA/jea
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.