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