Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TMR 1
TMR 1
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 = 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