Primero como dice tanque, para el ultimo diseño esta mal el TRISA, ponele 0xFF y listo, lo tenes todos como entradas al puerto A. Te aconsejo q te manejes con binarios o hexadecimales, el numero decimal no es muy practico en esto :S
Ya hice todo lo q m sugirieron pero nada es nada...sigo con el mismo problema y este es el codigo q tengo..
dim con as integer
dim num as byte
main:
cmcon = 7 'convierte todo el puerto A en Digital
Trisb=0 ' hace todos los pines del puerto B como salidas
TRISA=1
num= 0 'carga el valor inicial de 0 a la variable num
pulsar:
portb=num 'indica sacar el valor de num a través del puerto B
IF porta.1=0 then
goto contar
end if
contar:
if porta.1=1 then
delay_ms(200)
num=num+1
end if
GOTO pulsar ' volver al principio del programa
END.
No se donde puede estar mal...pero creo q es al momento de leer el puerto de entrada supongo q me hace falta algo por ahi x eso parace q nunca entrada nada por el porta1, ya que todo siempre esta en cero, y si cambie en ultimo if q seria este
if porta.1=1 then
delay_ms(200)
num=num+1
end if
por este...
if porta.1=0 then
delay_ms(200)
num=num+1
end if
es cuando empieza a contar solo sin tocar el pulsante(claro logico porq el puerto esta en cero...) espero me puedan ayudar a darle solucion...
Primero que nada:
IF porta.1=0 then
goto contar
end if
Eso esta de mas, por que si esta en cero o en uno va entrar igual a contar.
Otro tema es el siguiente y no se como lo maneja el Basic pero:
CMCON , TRISB y TRISA se encuentran en el banco 1
Mientras que PORTA y PORTB en el banco 0
Deberias cambiar de banco imagino. Al principio para elegir el banco 1, y antes de declarar num, ponerlo en el banco 0 nuevamente.
Otra, el registro CMCON es para el comparador. No entiendo por q lo estas usando.
El registro ANSEL ubicado en el banco1, es para seleccionar si son digitales o analogicos:
Bits select input function on corresponding AN<6:0> pins.
1 = Analog I/O (see notes below)
0 = Digital I/O
On a Power-on Reset, the pins
PORTA<4:0> are configured as analog
inputs and read as ‘0’.
En resumen tenes que poner a 0 el registro ANSEL.
Y para cambiar los bancos podrias setear o pone a cero los siguientes bits del registro STATUS:
bit 6-5 RP<1:0>: Register Bank Select bits (used for direct addressing)
11 = Bank 3 (180h - 1FFh)
10 = Bank 2 (100h - 17Fh)
01 = Bank 1 (80h - FFh)
00 = Bank 0 (00h - 7Fh)
Con respecto a las resistencias de pull-up creo que no hacen falta, por que no pude encontrar nada que dijera que son OPEN COLECTOR, pero le haria un antirebote en hardaware, aunque mucho sentido no tiene para este programa, ya que tiene un delay de 200ms.
Pero de todas formas te aconsejo poner una resistencia aunque sea de 1k en serie con el pin... por esto:
Maximum current sunk by PORTA...100 mA