You are on page 1of 4

RE: contador con timer1 Hola denuevo: Pretend enzamblar los dos cdigos mencionados pero no tuve exito,

el contador timer, si funcion, no as el muestrador de display. Como son cdigos distintos realic un puente externo (aunque no es la mejor manera) entre rb1 y rb4.y nada. Pongo dichos cdigos haber si me pueden ayudar. Gracias por vuestra gentileza. Debo mencionar que al primer cdigo lo extraje y adapte a mis necesidades de un ejemplo posteado por Laguer, (creo ) y el segundo casi todo me lo hizo un amigo. Eso habla de mis pobres conocimientos en el tema,.. pero con deseos de aprender . 'primer cdigo: 'Estoy intentando hacer un contador de eventos con interrupciones, ' el cual debe contar 5250 pulsos y mostrar un flag, del cual se 'debera sacar una seal para utilizar en otro contador y presentador en display 7 seg.-- device 16f628 CMCON = 7 'deshabilita las entradas analgicas y las torna digital Symbol led = portb.1 'Led en portb1 Cont var word ' variable de hasta 65536 en valor, (para este caso 'puede ser una variable byte) Trisb= %11010000 'rb6, rb4, rb7, como entradas, los dems como salidas T1CON= %00000111 'habilita timer1, selecciona contador. 'externo entrando en RB6 por flanco ascendente 'no sincroniza la entrada del contador 'inhabilita el oscilador (T1OSC) 'divisor = 1:1 '(bits no implementados, ledos como 0.) PIR1 .0 = 0 'resetea el flag para para contar PIE1= %00000001 'habilita interrupcion PORTB= 0 Cont = 0 INTCON = %11000000 TMR1H=%11101011:TMR1L=%01111110 'inicia tmr1 en 60286, (65536-60286=5250), ' va a contar 5250 veces antes que ' se produzca la interrupcin On interrupt goto ISR 'declaracin de que cuando ocurra la INT, valla a la 'etiqueta ISR(rutina de servicio de interrupcin) Main: ' If cont >= 2 then 'si la variable llego 5250, (2) entonces ,(este 2) 'es para facilitar simulacin toggle led 'cambia el estdo del led, si es uno pasa ' a 0 y viceversa cont= 0 'y volvemos a empezar, ponemos la variable en 0 ENDIF 'si no, seguimos esperando a que la variable llegue a 5250 Goto main 'bucle a la etiqueta de inicio Disable ISR: Cont = cont+1 'en cada paso por interrupcin aumenta la variable TMR1H=%11101011:TMR1L=%01111110 'carga timer1 H y L (60286) PIR1 .0 = 0 'resetea el flag para seguir contando Resume Enable 'segundo cdigo '****************************************************************** '* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2006 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 02/11/2006 * '* Version : 1.0 * '* Notes : Este es un contador de 6 dgitos para odometro de * '* : un vehculo automotor, se inicializ con

kilometraje* '* : de 75432 km, cada 10 kms graba en la eeprom el * '* : kilometraje actual para no perder los datos si falta* '* : la tensin de batera. En su momento * '* : hubo que hacerle un contador independiente, por el * '* : problema del refresh en los display * '* : device 16f628a * '**************************************************************** * CONTA VAR WORD mul var byte i var byte u var byte d var byte c var byte um var byte dm var byte cm var byte flag var bit TRISA.0 = 0 TRISA.1 = 0 TRISA.2 = 0 TRISA.3 = 0 TRISA.4 = 0 TRISA.5 = 0 TRISA.7 = 0 inizero: flag=0 conta=0 mul=0 'u=0 'd=0 'c=0 'um=0 'dm=0 'cm=0 'porta=0 'portb=0 READ 0, u READ 1, d READ 2, c READ 3, um READ 4, dm READ 5, cm goto inicio inicio: if flag = 0 then if PORTB.4 = 0 then 'para cambiar al otro flanco cambiar el 1 por 0 conta = conta+1 'con un 1 sensa en flanco de subida flag = 1 'con 0 sensa en flanco de bajada endif endif if flag = 1 then if PORTB.4 = 1 then 'para cambiar al otro flanco cambiar el 0 por 1 flag = 0 'con un 0 sensa en flanco de subida endif 'con 1 sensa en flanco de bajada endif if conta = 1 then 'aqui empieza a contar pulsos conta=0 'despues de 1 pulsos incrementa cont.en 1

u=u+1 endif if u>9 then ' Cada 10 kilometros graba la eeprom u=0 d=d+1 WRITE 0, u 'grabar en eeprom la dir 0 el valor en la variable u WRITE 1, d 'grabar en eeprom la dir 0 el valor en la variable d WRITE 2, c 'grabar en " la dir 0 el valor en la variable c WRITE 3, um 'grabar en " la dir 0 el valor en la variable um WRITE 4, dm 'grabar en " la dir 0 el valor en la variable dm WRITE 5, cm 'grabar en " la dir 0 el valor en la variable dm endif if d>9 then d=0 c=c+1 endif if c>9 then c=0 um=um+1 endif if um>9 then um=0 dm=dm+1 endif if dm>9 then dm=0 cm=cm+1 endif if cm>9 then cm=0 endif if PORTB.7 = 1 then 'Configuracin de kilometraje inicial, esto es por 'que este vehculo debe llevar un kilometraje x.. '(375432 Kilmetros) WRITE 0, 2 'unidades WRITE 1, 3 'decenas WRITE 2, 4 'centenas WRITE 3, 5 'unidad de mil WRITE 4, 7 'decenas de mil WRITE 5, 3 'centenas de mil READ 0, u READ 1, d READ 2, c READ 3, um READ 4, dm read 5, cm ENDIF

porta = 0 PORTB = u porta = 1 PAUSE 3 porta = 0 PORTB = d porta = 2 PAUSE 3

porta = 0 PORTB = c porta = 4 PAUSE 3 porta = 0 PORTB = um porta = 8 PAUSE 3 porta = 0 PORTB = dm porta = 16 PAUSE 3 porta = 0 PORTB = cm porta = 32 PAUSE 3 goto inicio end