Objetivos Familiarizarse con el manejo de un micro (procesador/controlador) Arquitectura Organización de un SED Entender la documentación Entender la especificación de un SED Desde el punto de vista de la aplicación Desde el punto de vista del propio SED Requisitos de CPU Requisitos de memoria Requisitos de I/O Desarrollar habilidades de diseño y depuración de un SED Parte hardware Parte software (en C y/o Ensamblador)
Programa Introducción Arquitectura del microcontrolador SIEMENS 80C167 Registros Lenguaje Ensamblador: Juego de instrucciones Modos de direccionamieno Memoria y mapa de memoria Periféricos Puertos paralelo/serie Timers Otros: Displays, teclados, etc. Interrupciones Programación en alto nivel: Lenguaje C Proyecto Hardware/software
Normas y bibliografía Evaluación (consultar información oficial)
Nota = .7 Teoría+ .3 Lab Teoría .3 Pruebas intermedias + .7 Prueba final Habrá varias pruebas intermedias (Evaluación continua) Habrá ejercicios para casa (algunos evaluables) Se pedirá la participación del alumno en clase Incluso se podrán cambiar los porcentajes Fundamental: la asistencia
Bibliografía Página WEB: Teoría, calendario, prácticas Manuales Siemens Libro de programación en C
Introducción al SIEMENS 80C167
SIEMENS 80C167 Microcontrolador (Embedded Processor) de 16 bits ALU y Registros de 16 bits Diseñado para tareas de control industrial Robusto frente al ruido electromagnético P.e. PLCs del LAB Rango direccionamiento: 16 Mbytes (memoria) Con memoria RAM interna Ciertas versiones disponen también de ROM interna Con muchos dispositivos integrados en el chip Controladores de comunicaciones serie Puertos paralelo Temporizadores (timers) Convertidor analógico/digital (A/D) Moduladores PWM (electrónica de potencia).
Modelo de programador del 167 Memoria R8 00 0000 00 0001 FF FFFF R9 R12 R10 R14 R13 R15 R0 R1 R4 R3 R2 R6 R5 R7 PC R11 PSW SP Registros CPU 00 FE00 00 FE02 00 FE0X I/O (GPRs) (SFRs) (SFRs)
Memoria Organizada en celdas de 1 BYTE (8 bits) Cada byte tiene su DIRECCIÓN Dada en 24 bits (16 Mbytes) Se accede a la memoria usando la dirección. Ejemplos Lectura/escritura (datos/direcciones: 1s y 0s)
Registros (CPU): Posiciones de memoria de acceso rápido I/O. En el 167 el acceso a puertos es similar al acceso a memoria
dato = READ (dirección) WRITE(dato, dirección)
Primer ejemplo Suma de dos datos en ASS 167
Suma (940)+(942) en (942)
Para llenar R0 hacen falta dos bytes! (2 bytes por dato) En direcciones consecutivas de memoria (940/941) Parte baja del dato (en R0) en dirección par
MOV R0,0x940 ; READ ADD R0,0x942 MOV 0x942,r0 ;WRITE
Más ejemplos: Programas en C y Ensamblador Primer ejemplo: bucle for En lenguaje C
En lenguaje ensamblador N = 5; j en 00FA00 H ( j no está inicializada !)
for (i=1; i N 506 DD 05 JMPR cc_sgt,512 ; then goto 512H 508 04 F1 00 FA ADD 0fa00,R1 ; j += 1 50C 08 01 ADD R0,#1 ; i += 1 50E FA 00 04 05 JMPR cc_uc,504 ; salto sin condición 512
Notas En Ensamblador más largo que en C Línea ensamblador = operación elemental mov de un dato de memoria-registro (registro-memoria) Suma dos datos Compara dos datos Saltos (con y sin condición) Las instrucciones se almacenan en memoria en formato BINARIO (1s y 0s) Las instrucciones ocupan 2 ó 4 bytes Las instrucciones se almacenan en posiciones de memoria CONSECUTIVAS. Se ejecutan en orden Salvo el los saltos La DIRECCIÓN (de memoria) de la próxima instrucción a ejecutar se almacena en el PC (Contador de Programa)
Cómo se ejecuta un programa ? Dos pasos: Captura de la instrucción (Instruction Fetch, usando el PC) Ejecución (usando la ALU)
Fetch: Trae la instrucción de memoria, incrementa PC CPU = MEM(PC); PC++; Execute: La ALU realiza la operación (suma, resta, etc.)
Programa ensamblador Traduce las instrucciones de pnemónico a binario Por ejemplo, la instrucción
Se convierte en (Codificación de instrucciones)
Nuestra primera instrucción que suponemos cargada en la posición 500 H de memoria Tipos de ensambladores De línea: No soporta etiquetas (reside en el monitor de la tarjeta) De PC: Soporta etiquetas (reside en el PC)
MOV R0,#1 E0 10
Ejemplo con etiquetas (ensamblador en PC) Las etiquetas facilitan la programación en ASS
Los campos que forman una instrucción en ASS
Los campos etiqueta y comentario son opcionales TAB si no se usa el campo de etiqueta
MOV R0,#1 ; r0 (i) MOV R1,#1 ; auxiliar bucle: CMP R0,#5 ; if i>N JMPR cc_sgt,fin ; then goto ´fin ADD 0fa00H,R1 ; j += 1 ADD R0,#1 ; i += 1 JMPS bucle ; = jmpr cc_uc, fin: etiqueta: operación operandos ;comentario
Operaciones y operandos (resumen) Operaciones Transferencia: mov Aritméticas: add, sub, cmp, neg, mul, div Lógicas: and, or, cpl Desplazamientos: shr, shl Saltos: jmpr cc_uc (cc_eq, cc_ne, cc_ugt, cc_sgt, cc_ule, …) Operandos, modos de direccionamiento Inmediato: #1 Directo a registro: R0 Directo a memoria: 0fa00 Indirecto: [R0] Números Decimal 15 Hexadecimal 0fa00 H (0 por delante si empiezan por letra) Binario 01001000 B
Modos de direccionamiento. Directo a registro mov r0,r1 ; R0