650 likes | 794 Vues
Computadores (TU Sistemas Computacionales). Elementos de estructura de computadores. José Estay A / jea I semestre académico 2014. PIC 16F877-Arquitectura.
E N D
Computadores(TU Sistemas Computacionales) Elementos de estructura de computadores José Estay A / jea I semestre académico 2014
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
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
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
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
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
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.
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
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
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
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
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
Aplicación simple: una secuencia binaria en la salida PORT B, archivo de diseño *.DSN, creado usando ISIS captura de esquemáticos)
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 MOVLW 00 TRIS 06 CLRF 06 again INCF 06 GOTO again
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
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
Archivo Código de máquina creado usando Assembler MPASM :020000040000FA :0A000000003066008601860A03281E :00000001FF
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 W5A
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
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
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
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.
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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROCESSOR 16F877 ; Define MCU type __CONFIG 0x3733 ; Set config fuses ; Register Label Equates.................................... PORTB EQU 06 ; Port B Data Register TRISB EQU 86 ; 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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Initialise Port B (Port A defaults to inputs)............. BANKSEL TRISB ; Select bank 1 MOVLW b'00000000' ; Port B Direction Code MOVWF TRISB ; Load the DDR code into F86 BANKSEL PORTB ; Select bank 0 GOTO reset ; Jump to main loop
; 'delay' subroutine ........................................ delay MOVWF Timer ; Copy W to timer register down DECFSZ Timer ; Decrement timer register GOTO down ; and repeat until zero RETURN ; Jump back to main program
; Start main loop ........................................... reset CLRF PORTB ; Clear Port B Data start BTFSS PORTD,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 CALL delay ; Jump to subroutine 'delay' GOTO start ; Repeat main loop always END ; Terminate source code
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
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
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
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
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
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 .
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
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
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
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)
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
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
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
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
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
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
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