Академический Документы
Профессиональный Документы
Культура Документы
Introduccin
El siguiente trabajo se desarroll con el fin de introducirse en la programacin de microcontroladores de la familia HC908, en particular el modelo HC908JK1, a travs de una aplicacin sencilla pero de mucha utilidad, como lo es el multiplexado de displays. Esta aplicacin se la implement en un contador de eventos, que muestra los resultados en 5 displays de 7 segmentos. El modelo utilizado (HC908JK1) es el ms pequeo de la familia, pero logra adaptarse en forma justa a los requerimientos en la cantidad de puertos, por lo que su precio econmico lo hace ideal para aplicaciones donde no haya mayores requerimientos de hardware que los de los displays.
Caractersticas
El Contador de Eventos a pesar de haber sido realizado sobre un microcontrolador HC908JK1, puede ser fcilmente adaptado para cualquier otro modelo superior de la misma familia. Se trata de un programa que cuenta la cantidad de flancos ascendentes que se producen por segundo sobre el pin 4 del puerto D y la muestra a travs de 5 displays de 7 segmentos en Hertz. Para poder contar el nmero de flancos que se producen, se utiliz la funcin de Captura de Entrada como un generador de interrupciones. Cabe destacar que originalmente esta funcin provista por el microcontrolador no solo permite generar interrupciones sino que adems cuenta la cantidad de pulsos de clock entre eventos. Aqu se lo utiliz en forma parcial en reemplazo del pin de IRQ, para aprender a configurar esta funcin.
Descripcin General
La estructura general del programa responde al siguiente diagrama de flujo:
Instrucciones de pre-procesamiento Inicio Loop Principal
Multiplexacin de displays
Una vez que las instrucciones de pre-procesamiento han sido ejecutadas, y las variables junto con los registros inicializados, se entra en la rutina de Loop_Principal. Esta contiene una instruccin que salta a ella misma, en espera de alguna de las dos interrupciones posibles. Cuando se detecta un flanco ascendente en el bit 4 del puerto D, correspondiente a la entrada de la funcin Captura de Entrada, se genera una interrupcin que accede a la rutina Captura. En esta rutina se incrementa en uno una variable de 16 bits llamada NEventos y se sale de la interrupcin. En forma paralela, el mdulo de tiempo (TIM) se encuentra contando a la frecuencia del clock del micro. Cuando la cuenta iguala a un valor cargado con anterioridad en el registro TMODH:TMODL, se produce lo que se denomina un overflow o desbordamiento y se genera una interrupcin que llama a la rutina MultDisp_&_Gate. Esta rutina posee dos partes: Gate y Displays. La primera funciona como compuerta: se encarga, cada un segundo, de colocar la cantidad de eventos contados durante el ltimo segundo, almacenados en NEventos, en la variable frec y de borrar NEventos. Luego, esta variable es tomada por la segunda parte, Displays, convertida convenientemente al formato BCD y mostrada en el display que corresponda. Se debe notar que a la parte de Gate se accede solo cada un segundo. En el resto de los casos, se saltea esta parte y solo se ejecuta Displays, usando los valores guardados con anterioridad en la variable frec. De esta manera, la cuenta mostrada por los displays, se actualiza cada un segundo con el nmero exacto de eventos contados por la rutina Captura.
Laboratorio de DSP Universidad Nacional de Crdoba Argentina Pgina 2/21
RAMStart EQU $0080 ROMStart EQU $F600 VectorStart EQU $FFDE $Include 'jl3regs.inc' org RAMStart
*************************************************** * Definicin de variables * *************************************************** contador sustraen dig1 dig2 dig3 dig4 dig5 NumAConv NEventos frec NInterrup NDIsplay ds 1 ds 2 ds 1 ds 1 ds 1 ds 1 ds 1 ds 2 ds 2 ds 2 ds 2 ds 1 ;Contador de la rutina resta. ;sustraendo: vble de la rutina resta. ;Vbles que contienen cada digito de la frecuencia medida ;despues de la decodificacion BCD.
;Numero a Convertir: se carga el numero a convertir a BCD. ;Numero de Eventos: cantidad de flancos contados. ;Frecuencia: numero de eventos despues del tiempo de Gate. ;Numero de Interrupciones: veces que interrupmpe el TIM (a ;las 100 se entra en Gate). ;Numero de dislpay a multiplexar.
Al comienzo del programa se definen tres variables con las direcciones de memoria de los comienzos de la RAM, ROM y vectores de interrupcin. La sentencia $Include 'jl3regs.inc' permite incluir este archivo en la compilacin, ya que contiene la direccin de todos los registros del micro para no tener que definir la direccin de aquellos utilizados. Luego se definen en la RAM todas las variables que se usarn en el programa.
Inicio
org ROMstart Inicio: rsp bset 0,CONFIG1 clra clrx clrh clr dig1 clr dig2 clr dig3 clr dig4 clr dig5 clr NEventos clr NEventos+1 clr frec clr frec+1 ;Reseteo stack pointer: SP ! 00FF ;Apago el COP. ;Limpio acumulador y partes alta y baja del Index Register.
mov #$01,NInterrup ;Numero luego del cual se ejecutare al rutina Gate mov #$F4,NInterrup+1 ;(500). mov #!6,NDisplay ;Numero del display a activar. mov #%11111111,DDRB ;Seteo puerto B como salida para mandar info al display. mov #%11101111,DDRD ;Seteo puerto D como salida para controlar los displays, ;excepto bit 4 que sirve de entrada de seal a medir. mov #%01010000,TSC ;Seteo el TIM para que el contador se incremente con ;una frecuencia de (Internal BusClk % 1). mov #$1C,TMODH ;Cargo el numero (7372) hasta el cual contara el TIM antes mov #$CC,TMODL ;de interrumpir para contar la cantidad de eventos (tiempo ;de Gate) y multiplexar displays. mov #%01000100,TSC0 ;Seteo el canal 0 del TIM para capturar la entrada en el ;flanco ascendente de la seal. cli ;Activo interrupciones.
En este bloque se configuran los mdulos a utilizar por medio de sus respectivos registros: la instruccin rsp inicializa el stack pointer, situando el mismo en la direccin $00FF para mantener la compatibilidad de cdigo con los modelos HC05. Esto se debe a que en la mayora de los HC05 la RAM se extiende solo hasta $00FF, no siendo as en la mayora de los HC08, en donde la memoria excede la direccin $00FF. Se debe tener en cuenta que el Stack Pointer contiene la direccin superior de la pila, por lo que la direccin de la misma decrece con cada dato nuevo que se introduzca;
Laboratorio de DSP Universidad Nacional de Crdoba Argentina Pgina 4/21
se setea en uno el bit 0 del registro CONFIG1, llamado COPD, para deshabilitar el COP (Computer Operating Properly); se inicializan las variables antes definidas, colocando algunas en cero;
Debido a la necesidad de manejar nmeros mayores a 255, se deben utilizar variables, o lugares de memoria, de 16 bits, que permiten almacenar hasta el nmero 65535. Sin embargo, como el microcontrolador junto con todo su set de instrucciones es de 8 bits, se deben separar a las variables de 16 bits en dos partes de 8 bits cada una: el byte superior y el inferior. De esta manera, cada parte de la variable larga puede ser tratada con las instrucciones de 8 bits. Como se sabe, el nombre de la variable no es ms que una etiqueta que indica un lugar de memoria de 8 bits. Cuando se manejan variables de 16 bits, esta etiqueta indicar el lugar de memoria de 8 bits ms bajo de la variable de 16 bits. Esta posicin de memoria corresponde a la parte alta de la variable de 16 bits, es decir, el byte superior. Para hacer referencia a la parte baja de la variable larga (el byte inferior), se le deber sumar 1 byte a la direccin apuntada por la etiqueta de la variable, a travs del operando +. Por ejemplo, en la seccin de Inicio, NInterrup hace referencia a la parte alta de la variable, mientras que Ninterrup+1 se refiere a la parte baja. De esta manera, cada byte de la variable larga, puede ser tratado como una variable independiente de 1 byte. se configura el puerto B como salida para mandar los datos a los displays, cargando %11111111 en el registro Data Direction Register B (DDRB); y el puerto D tambin como salida para controlar la activacin de cada display mediante el registro DDRD, excepto el bit 4 que corresponde a la entrada de la Captura de Entrada; se configura el mdulo de tiempo (TIM): Primero se carga el registro TSC:
colocando TOIE en 1, lo que habilita la generacin de interrupciones por parte del TIM; TSTOP en 0, lo que habilita la cuenta; TRST en 1, para limpiar la cuenta y comenzar a contar desde $000; y [PS2:PS0] en %000 para que el contador se incremente a la frecuencia del bus interno del micro, es decir, que el pre-scaler divida esta frecuencia por uno.
Laboratorio de DSP Universidad Nacional de Crdoba Argentina Pgina 5/21
Luego, se carga en los registros TMODH:TMODL el nmero hasta el cual contar el TIM antes de generar el pedido interrupcin, de forma tal que este pedido se produzca con una frecuencia de 500Hz (2 mseg). El nmero se calcula teniendo en cuenta que la frecuencia del bus interno del micro es un cuarto de la frecuencia del clock externo, y que el pre-scaler del TIM no modifica este valor:
Fclock 4
TMOD =
(FINTERRUPCION )
(FINTERRUPCION ) TMOD =
Fclock 4
0,002 _ seg
1
TMOD =
14.7510 6 Hz 4
Finalmente, se carga el registro correspondiente al canal 1 del TIM, para configurar la Captura de Entrada:
colocando CH0IE en 1, para habilitar la generacin de interrupciones; y [MS0A:ELS0B:ELS0A] en %001 para que la captura de entrada se produzca en el flanco ascendente de la seal de entrada. Loop Principal
;Espero interrupciones.
Consiste en un bucle (loop) infinito, que no realiza ninguna operacin fuera de la de salto, en donde se espera que se presenten alguna de los dos interrupciones posibles. Rutina de interrupcin del TIM: Multiplexado de Displays y Gate
NInterrup:NInterrup+1 =0
Si
No
dec NDisplay
NDisplay = 5
No
Si
frec:frec+1
Conversin a BCD
Dig5
Seleccin de DISPLAY5
. . NDisplay = 4 . .
No
Si
frec:frec+1
Conversin a BCD
Dig4
Seleccin de DISPLAY4
NDisplay = 3
Si
frec:frec+1
Conversin a BCD
Dig3
Seleccin de DISPLAY3
No
NDisplay = 2
Si
frec:frec+1
Conversin a BCD
Dig2
Seleccin de DISPLAY2
frec:frec+1
No
Conversin a BCD
Dig1
Seleccin de DISPLAY1
6 --> NDisplay
Salir
MultDisp_&_Gate: dec NInterrup+1 bne a lda NInterrup cbeqa #$00,a dec NInterrup dec NInterrup+1 a: lda NInterrup+1 ora NInterrup bne Displays
;Decremento en uno la vble NInterrup. ;Si no es cero, salteo la rutina Gate, en caso ;contrario, entro a Gate.
Para decrementar la variable de 16 bits NInterrup, que se carga con 500 en Inicio, se decrementa primero la parte baja (NInterrup+1) hasta hacerla cero. Recin cuando esta es cero, se decrementa la parte alta (NInterrup) junto con la baja nuevamente. Mientras que las partes alta y baja de NInterrup no sean igual a cero simultneamente, se salta directamente a la parte de los displays, salteando Gate.
Gate:
mov NEventos,frec mov NEventos+1,frec+1 clr NEventos clr NEventos+1 mov #$01,NInterrup mov #$F4,NInterrup+1
;Muevo la vble NEventos a frec. ;Limpio NEventos. ;Cargo nuevamente NInterrup con 500.
Se mueven partes alta y baja de NEventos a frec y se recarga NEventos con el valor original. La variable frec contiene los datos, en formato hexadecimal, que sern utilizados por Displays para ser mostrados en los displays.
Displays:
dec NDisplay lda NDisplay cbeqa #!5,Displ5 cbeqa #!4,Displ4 cbeqa #!3,Displ3 cbeqa #!2,Displ2 cbeqa #!1,Displ1
Displ5:
mov frec,NumAConv ;Cargo en la rutina de la resta la cantidad de eventos mov frec+1,NumAConv+1 ;hasta el momento. mov #$27,sustraen ;Cargo partes alta y baja de 10000 mov #$10,sustraen+1 ;(sustraen:sustraen+1). jsr Conversion_BCD ;Salto a rutina Resta. mov contador,dig5 ;Coloco en dig5 el resultado de la rutina Resta. ldx dig5 ;Busco en la posicin dig5 de la tabla, la combinacin que lda Tabla7seg,x ;corresponde a ese numero y la cargo en el acumulador. mov #%00000100,PTD;Controlo la activacin del display 5 con el bit 2 del puerto D. sta PTB ;Paso el acumulador a la salida del puerto B. bra Salida_Disp mov #$03,sustraen ;Cargo partes alta y baja de 1000 mov #$E8,sustraen+1 ;(sustraen:sustraen+1). jsr Conversion_BCD ;Salto a rutina Resta. mov contador,dig4 ;Coloco en dig4 el resultado de la rutina Resta. ldx dig4 lda Tabla7seg,x mov #%00001000,PTD ;Idem pero para el display 4, utilizando el bit 3 sta PTB ;del puerto D. bra Salida_Disp
Displ4:
Displ3:
mov #$00,sustraen ;Cargo partes alta y baja de 100 mov #$64,sustraen+1 ;(sustraen:sustraen+1). jsr Conversion_BCD ;Salto a rutina Resta. mov contador,dig3 ;Coloco en dig3 el resultado de la rutina Resta. ldx dig3 lda Tabla7seg,x mov #%00100000,PTD ;Idem pero para el display 3, utilizando el bit 4 sta PTB ;del puerto D. bra Salida_Disp mov #$00,sustraen ;Cargo partes alta y baja de 10 mov #$0A,sustraen+1 ;(sustraen:sustraen+1) jsr Conversion_BCD ;Salto a rutina Resta. mov contador,dig2 ;Coloco en dig2 el resultado de la rutina Resta. ldx dig2 lda Tabla7seg,x mov #%01000000,PTD ;Idem pero para el display 2, utilizando el bit 5 sta PTB ;del puerto D. bra Salida_Disp mov NumAConv+1,dig1 ;Coloco en dig1 el ultimo digito del numero a convertir. ldx dig1 lda Tabla7seg,x mov #%10000000,PTD ;Idem pero para el display 1, utilizando el bit 6 sta PTB ;del puerto D. mov #!6,NDisplay ;Limpio el bit TOF del registro de control del TIM ;para habilitar nuevas interrupciones.
Displ2:
Displ1:
La variable NDisplay contiene el nmero de display a activar. Al comienzo de la rutina, se compara este valor y se salta a la parte de la misma que corresponda al display seleccionado (Displx). Una vez adentro, se carga en sustraen la unidad decimal del orden que le corresponde al display, lo cual es pasado a la subrutina Conversin_BCD. Esta subrutina devuelve, a travs de la variable contador, el nmero decimal correspondiente al display a activar. Este nmero, despus de ser transferido a digx (donde x corresponde al nmero de display a activar), es cargado en la parte baja del registro Index Register (Registro de Indice) usando tax. Luego, este valor almacenado en el registro se usa para indicar la posicin de la tabla Tabla7seg que contiene la codificacin en formato 7 segmentos que corresponde al nmero a mostrar en el display. Esta codificacin se carga en el acumulador utilizando la instruccin lda Tabla7seg,x. Finalmente, se coloca en el puerto D la combinacin adecuada para permitir el encendido de los leds del display que corresponda y en el puerto B el nmero a mostrar en formato 7 segmentos. Se debe notar que este programa fue diseado para displays del tipo nodo comn.
Laboratorio de DSP Universidad Nacional de Crdoba Argentina Pgina 9/21
La variable NumAConv es la que contiene en formato hexadecimal el nmero que ser convertido por la rutina Conversin_BCD en cada display. Esta variable se carga con la cantidad de eventos nicamente en la parte Displ5 de Gate, y es modificada despus de cada conversin. Recordemos que la cuenta haba sido colocada en la variable frec por Gate. En Displ1 no se llama a la subrutina de conversin, debido a que el resto de la conversin anterior, que se guard en NumAConv, corresponde al ltimo dgito en formato decimal. La rutina finaliza limpiando el bit 7 del registro TSC (TOF) para habilitar nuevas interrupciones.
Conversion_BCD: clr contador Repite: lda NumAConv+1 sub sustraen+1 sta NumAConv+1 bcc Massigni dec NumAConv Massigni: lda NumAConv sub sustraen sta NumAConv bmi Salida_Resta inc contador bra Repite Salida_Resta: lda NumAConv+1 add sustraen+1 sta NumAConv+1 lda NumAConv adc sustraen sta NumAConv rts
Negative = 1 No
Si
Salida
El principio de funcionamiento de la conversin se basa en restarle al nmero a convertir (contenida en la variable NumAConv) la unidad decimal del orden correspondiente al display a activar, en forma sucesiva hasta obtener un resultado negativo. La unidad decimal del orden correspondiente se almacena en la variable sustraen, dentro de Displays. Cada vez que el resultado es positivo, se incrementa en uno la variable contador, se almacena el resultado en NumAConv y se vuelve a realizar la resta, utilizando ahora el resultado de la resta anterior guardado en NumAConv. Cuando el resultado de la operacin sea negativo, se deshace la ltima resta, es decir, se le suma a NumAConv lo que se le haba restado en la ltima operacin (sustraen), sin incrementar contador. Es despus de un resultado negativo que se sale de la subrutina.
inc NEventos+1
NEventos+1=0
Si
No
inc NEventos
Salida
Captura:
f:
Como ya se mencion con anterioridad, la funcin de esta rutina es la de incrementar en uno la variable de 16 bits NEventos cada vez que se produzca un flanco ascendente en el bit 4 del puerto D. De este manera, va almacenando la cantidad de eventos producidos a partir del ltimo Gate. Para realizar esto, se divida a la variable en sus dos partes de 8 bits, incrementndose siempre primero la parte baja (NEventos+1), y luego verificando si se ha hecho cero. En caso de producirse esto ltimo, es que se han contado 16 eventos (F en hexadecimal), y se debe incrementar en uno la parte alta de la variable (NEventos).
Conclusin
La idea fundamental de este ejemplo fue la de permitir la familiarizacin con la programacin de esta nueva lnea de microcontroladores, los HC08. A pesar de ser visiblemente ms potentes que sus antecesores (los HC05), su forma de programacin se ha mantenido prcticamente intacta. Slo existen pequeas diferencias en algunas instrucciones que hacen referencia especficamente a recursos ms potentes. En este programa se intentaron implementar aquellos recursos del micro que aparecen en prcticamente cualquier tipo de aplicacin, como son el Timer Interface Module, los puertos como entradas y salidas, las interrupciones vectorizadas, el manejo de las interrupciones, etc. Esto permiti mostrar la forma en que deben ser programados sus registros, el significado de sus bits ms importante y la forma de calcular los valores de los contadores para obtener las frecuencias deseadas. Cabe destacar que estos puntos son especficos de esta marca de microcontroladores. Por otro lado, se repasaron algunas tcnicas bsicas de programacin. Estas ltimas son, en su mayora, universales para cualquier lnea de microcontroladores. Se destacan dentro de estas tcnicas: el manejo de valores mayores a 8 bits, la multiplexacin de displays, indexacin de tabla, conversin de formato binario a BCD y BCD a 7 segmentos, etc.
Hardware utilizado
E-FLASH 08
Hardware propio
Bibliografa
TECHNICAL DATA - MC68HC908JK1/JK3/JL3 (HCMOS Microcontroller Unit) de MOTOROLA. TIM08 - Timer Interface Module (Reference Manual) de MOTOROLA. CENTRAL PROCESSOR UNIT (Reference Manual) de MOTOROLA. E-FLASH 08 - Manual del usuario de Electrocomponentes S.A. CASM08Z - 68HC08 Assembler Help de P&E Microcomputer Systems.
Agradecimientos
Agradecemos la colaboracin de Motorola por el apoyo ofrecido al Laboratorio y, en este caso, por el aporte de la bibliografa aqu utilizada. Adems, agradecemos a la empresa Electrocomponentes S.A. que nos brind la placa de emulacin en circuito con los programas correspondientes para el uso de la misma, permitindonos as, programar, simular y emular nuestros proyectos. Dichos programas son, respectivamente, WINIDE v1.2, CASM08Z v3.16, ICD08SZ v1.32, ICS08JLZ v1.32 y PROG08SZ, todos de P&E Microcomputer Systems, Inc.
0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
; Interrupt Status
;(C)opywrite P&E Microcomputer Systems, 1999 ; You may use this code freely as long as this copyright notice ; is included.
org RAMStart *************************************************** * Definicin de variables * *************************************************** contador ds 1 sustraen ds 2 dig1 ds 1 dig2 ds 1 dig3 ds 1 dig4 ds 1 dig5 ds 1 NumAConv ds 2 NEventos ds 2 frec ds 2 NInterrup ds 2 NDIsplay ds 1
Contador de Eventos.asm Assembled with CASM08Z 06/08/02 11:31:22 a.m. PAGE 3 F604 [01] 5F F605 [01] 8C F606 [03] 3F83 F608 [03] 3F84 F60A [03] 3F85 F60C [03] 3F86 F60E [03] 3F87 F610 [03] 3F8A F612 [03] 3F8B F614 [03] 3F8C F616 [03] 3F8D 100 101 102 103 104 105 106 107 108 109 110 111 clrx clrh clr dig1. clr dig2 clr dig3 clr dig4 clr dig5 clr NEventos clr NEventos+1 clr frec clr frec+1
***************************************************************** * Rutina de interrupcin del TIM: * * se multiplexan los displays y * * se captura la cuenta de eventos cada 500 entradas * *****************************************************************
Contador de Eventos.asm Assembled with CASM08Z 06/08/02 11:31:22 a.m. PAGE 4 137 MultDisp_&_Gate: 138 F636 [04] 3A8F 139 dec NInterrup+1 F638 [03] 2609 140 bne a F63A [03] B68E 141 lda NInterrup F63C [04] 410004 142 cbeqa #$00,a F63F [04] 3A8E 143 dec NInterrup F641 [04] 3A8F 144 dec NInterrup+1 F643 [03] B68F 145 a: lda NInterrup+1 F645 [03] BA8E 146 ora NInterrup F647 [03] 2610 147 bne Displays 148 149 **************************************************** 150 * Ruitna de Gate: * 151 * se captura la cuenta de los eventos * 152 **************************************************** 153 F649 [05] 4E8A8C 154 Gate: mov NEventos,frec F64C [05] 4E8B8D155 mov NEventos+1,frec+1 F64F [03] 3F8A 156 clr NEventos F651 [03] 3F8B 157 clr NEventos+1 F653 [04] 6E018E 158 mov #$01,NInterrup F656 [04] 6EF48F 159 mov #$F4,NInterrup+1 160 161 **************************************************** 162 * Rutina para multiplexar displays * 163 **************************************************** 164 F659 [04] 3A90 165 Displays: dec NDisplay F65B [03] B690 166 lda NDisplay F65D [04] 41050C 167 cbeqa #!5,Displ5 F660 [04] 410427 168 cbeqa #!4,Displ4 F663 [04] 41033C 169 cbeqa #!3,Displ3
Contador de Eventos.asm Assembled with CASM08Z 06/08/02 11:31:22 a.m. PAGE 6 F6D0 [03] 2010 209 bra Salida_Disp F6D2 [05] 4E8983 210 Displ1: mov NumAConv+1,dig1 F6D5 [03] BE83 211 ldx dig1 F6D7 [04] D6F713 212 lda Tabla7seg,x F6DA [04] 6E8003 213 mov #%10000000,PTD F6DD [03] B701 214 sta PTB F6DF [04] 6E0690 215 mov #!6,NDisplay F6E2 [04] 1F20 216 Salida_Disp:bclr 7,TSC F6E4 [07] 80 217 rti 218 219 ************************************************************ 220 * Rutina de conversin de hexadecimal a BCD * 221 ************************************************************ 222 223 Conversion_BCD: F6E5 [03] 3F80 224 clr contador
F70A [04] 3C8B F70C [03] 2602 F70E [04] 3C8A F710 [04] 1F25
Contador de Eventos.asm Assembled with CASM08Z 06/08/02 11:31:22 a.m. PAGE 7 F712 [07] 80 254 rti 255 256 257 ************************************************************** 258 * Tabla de decodificacion de BCD a 7 segmentos * 259 ************************************************************** 260 261 Tabla7seg: 262 db %01111110 263 db %00001100 264 db %10110110 265 db %10011110 266 db %11001100 267 db %11011010 268 db %11111000 269 db %00001110 270 db %11111110 271 db %11001110 272 db %01111100 273 db %11110010 274 db %11101110 275 db %11100010 276 277 278 ******************************************************** 279 * Rutina de servicio de interrupcin inservible * 280 ******************************************************** 281 282 dummy_isr:
F713 F714 F715 F716 F717 F718 F719 F71A F71B F71C F71D F71E F71F F720
7E 0C B6 9E CC DA F8 0E FE CE 7C F2 EE E2
**************************************************** * Vectores de interrupcin * * permite vectorizar las interrupciones * **************************************************** org VectorStart dw dw dw dw dw dummy_isr dummy_isr dummy_isr dummy_isr dummy_isr
FFDE FFDE FFE0 FFE2 FFE4 FFE6 F721 F721 F721 F721 F721
Contador de Eventos.asm Assembled with CASM08Z 06/08/02 11:31:22 a.m. PAGE 8 FFE8 FFEA FFEC FFEE FFF0 FFF2 FFF4 FFF6 FFF8 FFFA FFFC FFFE F721 F721 F721 F721 F721 F636 F721 F70A F721 F721 F721 F600 298 299 300 301 302 303 304 305 306 307 308 309 310 311 dw dummy_isr dw dummy_isr dw dummy_isr dw dummy_isr dw dummy_isr dw MultDisp_&_Gate dw dummy_isr dw Captura dw dummy_isr dw dummy_isr dw dummy_isr dw Inicio
Symbol Table A ADCLK ADR ADSCR BFCR BRKH BRKL BSCR BSR CAPTURA CONFIG1 CONFIG2 CONTADOR CONVERSION_BCD COPCTL DDRA DDRB DDRD DIG1 DIG2 DIG3 DIG4 DIG5 DISPL1 DISPL2 DISPL3 DISPL4 F643 003E 003D 003C FE03 FE0C FE0D FE0E FE00 F70A 001F 001E 0080 F6E5 FFFF 0004 0005 0007 0083 0084 0085 0086 0087 F6D2 F6BA F6A2 F68A
Contador de Eventos.asm Assembled with CASM08Z 06/08/02 11:31:22 a.m. PAGE 9 FREC GATE INICIO INT1 INT2 INT3 INTKBIER INTKBSR INTSCR KBIER KBSCR LOOP_PRINCIPAL MASSIGNI MULTDISP_&_GATE NDISPLAY NEVENTOS NINTERRUP NUMACONV PDCR PORTA PORTB PORTD PTA PTAUE PTB PTD RAMSTART REPITE ROMSTART RSR SALIDA_DISP SALIDA_RESTA SUSTRAEN TABLA7SEG TCH0H TCH0L TCH1H TCH1L TCNTH TCNTL TMODH TMODL TSC TSC0 TSC1 VECTORSTART FFDE 008C F649 F600 FE04 FE05 FE06 001B 001A 001D 001B 001A F634 F6F1 F636 0090 008A 008E 0088 000A 0000 0001 0003 0000 000D 0001 0003 0080 F6E7 F600 FE01 F6E2 F6FD 0081 F713 0026 0027 0029 002A 0021 0022 0023 0024 0020 0025 0028