y este es el bas
"****************************************************************
"*
"*
Author : BATMAN123
"* Notice : Copyright (c) 2005 Tecnico Superior en Electronica
"* : Todos los Deechos Reservados
"* Date : 14/OCTUBRE/2005
"* Version : 1.0
"* Notes : CONTADOR DE PULSOS CON PIC16F84A UTILIZANDO 1
"* : TECLADO MATRICIAL 4X4 Y LCD
"****************************************************************
DEFINE LCD_DREG PORTB " Setea el puertos de datos del LCD por el puerto B
DEFINE LCD_DBIT 0 " Setea el bit de comienzo de datos (0 o 4)
DEFINE LCD_RSREG PORTB " Setea el port LCD Register Select
DEFINE LCD_RSBIT 4 " Setea el bit LCD Register Select
DEFINE LCD_EREG PORTA " Setea el port LCD Enable
DEFINE LCD_EBIT 0 " Setea el bit LCD Enable
DEFINE LCD_BITS 4 " Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 " Setea el numero de lineas en el LCD
tecla var byte " definicion de variables
n1 var byte
n2 var byte
n3 var byte
n4 var byte
n5 var byte
n6 var byte
unidad1 var byte
decena1 var byte
centena1 var byte
unidad2 var byte
decena2 var byte
centena2 var byte
E1 var byte
E2 var byte
numero1 var byte
numero2 var byte
n1=0 " asigno valor a las variables
n2=0 " el valor es equivalente en asccII
n3=0
n4=0 " asigno valor a las variables
n5=0 " el valor es equivalente en asccII
n6=0
numero1=0
numero2=0
read 10, numero1 " Leo el ultimo numero guardado en E1
READ 11, numero2 " Leo el ultimo numero guardado en E2
READ 6, E1 " Leo el valor del tope en E1
READ 7, E2 " Leo el valor del tope en E2
if numero1=0 and numero2=0 then goto inicio "Comapra con 0 sino es salta
pause 200 " Pausa para estabilizar LCD
LCDOUT $FE,1,dec3 numero1,dec3 numero2 " Muestra el numero en que va E1
LCDOUT $FE,$C0,dec3 E1 " Muestra el numero del tope E1
LCDOUT $FE,$C5,dec3 E2 " Muestra el numero del tope E2
goto mirar " Salta a la rutina mirar para esca
" near los puertos de los pilsadores.
inicio: " Inicia el progrma desde cero
LCDOUT $FE,1,"#1 #2 #3 #4" " Mensajes maricos
LCDOUT $FE,$C0,"000 000 000 000" " Mensaje para mostrar valores
pause 1000 " iniciales y pausa para verlos
arrancar: " RUTINA PARA ACTIVAR EL CIRCUITO
OPTION_REG=0 " Activo resistencias full-up
TRISB = %11111110 " Declaro el puerto B como salida
IF portb= $7e then goto clave " SI PRESIONO * PUEDO INTRODUCIR LOS
" VALORES PARA LOS TOPES #1, #2,#3,#4
goto arrancar " Si no presiono asterisco el circu-
" ito no deja hacer nada....jajaja
clave: " RUTINA PARA INTRODUCIR LOS VALORES DE E1, E2, E3
pause 500 " Pausa para estavilizar el sistema
gosub teclado " Llamado de la rutina teclado
SWAP tecla, n1 " Asigno a n1 el valor de la tecla pulsada
LCDOUT $FE,$C0,dec n1 " Muestra en el LCD la tecla pulsada
pause 500 " Pausa para ver la tecla pausada
gosub teclado " Llamado para traer el siguiente valor
SWAP tecla, n2 " DE AQUI EN ADELANTE PARA CADA #
LCDOUT $FE,$C1,dec n2 " EL PROCEDIMIENTO ES EL MISMO....
pause 500
gosub teclado
SWAP tecla, n3
LCDOUT $FE,$C2,dec n3
pause 500
gosub teclado
SWAP tecla, n4
LCDOUT $FE,$C4,dec n4
pause 500
gosub teclado
SWAP tecla, n5
LCDOUT $FE,$C5,dec n5
pause 500
gosub teclado
SWAP tecla, n6
LCDOUT $FE,$C6,dec n6
pause 500
iniciar_conteo:
OPTION_REG=0
TRISB = %11111011
IF portb= $7B then goto contar
pause 20
TRISB = %11111011
IF portb= $7e then goto inicio
pause 20
goto iniciar_conteo
contar
unidad1= n3 * 1
decena1= n2 * 10
centena1= n1 * 100
unidad2= n6 * 1
decena2= n5 * 10
centena2= n4 * 100
E1=centena1 + decena1 + unidad1
E2=centena2 + decena2 + unidad2
write 6, E1
write 7, E2
pause 100
LCDOUT $FE,1,"SCANEANDO PUERTO"
pause 500
mirar:
IF porta.2= 0 then goto led1
IF porta.1= 0 then goto led2
goto mirar
led1:
numero1 = numero1 + 1
write 10, numero1
pause 50
LCDOUT $FE,1,dec3 numero1," ", dec3 numero2
LCDOUT $FE,$C0,dec3 E1," ", dec3 E2
if numero1=>E1 then prender_led
pause 20
goto mirar
led2:
numero2 = numero2 + 1
write 11, numero2
pause 50
LCDOUT $FE,1,dec3 numero1, dec3 numero2
LCDOUT $FE,$C5,dec3 E1, dec3 E2
if numero2=>E2 then prender_led
pause 10
goto mirar
prender_led
high porta.3
pause 3000
low porta.3
numero1=0
numero2=0
write 10, numero1
write 11, numero2
goto inicio
"************************************************************************
" RUTINA PARA LEER EL TECLADO: devuelve el valor de la tecla pulsada
"en el teclado .
"************ PUEDE SER USADA EN CUALQUIER PROGRAMA PBP *************
" PARA LEER UN TECLADO MATRICIAL 4 X 4
"************************************************************************
teclado:
OPTION_REG=0
TRISB = %11111110
low portb.0
if portb = $EE then uno
if portb = $DE then cuatro
if portb = $BE then ciete
if portb = $7E then asterisco
TRISB = %11111101
low portb.1
if portb = $ED then dos
if portb = $DD then cinco
if portb = $BD then ocho
if portb = $7D then cero
TRISB = %11111011
low portb.2
if portb = $EB then tres
if portb = $DB then seis
if portb = $BB then nueve
if portb = $7B then numeral
goto teclado
asterisco
tecla="*"
return
ciete:
tecla=7
return
cuatro:
tecla=4
return
uno:
tecla=1
return
dos:
tecla=2
return
cinco:
tecla=5
return
ocho:
tecla=8
return
cero:
tecla=0
return
tres:
tecla=3
return
seis:
tecla=6
return
nueve:
tecla=9
return
numeral:
tecla="#"
return
end
FALTA MEJORARLO UN POCO....PERO YA CASI