Perdona que os moleste, es la primera vez que pregunto en el foro, pero he leido muchos mensajes y he aprendido mucho. Felicidades.
El caso es que tengo una dudilla sobre como usar timer"s con basic. Es más, quisiera saber como se debe programar para usar el timer0 y el timer1 al mismo tiempo, para diferentes aplicaciones, con el mismo pic (pe. el16f876). Por más que busco info no encuentro para basic.
Lo más que encontré fue un código ejemplo del pic simulator ide que usa el timer0 para el refresco de displays, pero si este código lo entiendo a duras penas, cuando intento usar tambien el timer1 acabo como una...aún me queda mucho por saber...
A continuación os expongo el código, a ver si me podeis ayudar para usar además un segundo timer en el código.
Muchisimas gracias de antemano
Dim digit As Byte
Dim digit1 As Byte
Dim digit2 As Byte
Dim mask As Byte
Dim mask1 As Byte
Dim mask2 As Byte
Dim i As Byte
Dim phase As Bit
Symbol d1enable = PORTA.0 "habilita el display de la parte alta del digito
Symbol d2enable = PORTA.1 "habilita el display de la parte baja del digito
TRISB = %00000000 "PORTB y A0, A1, A2 pins como salida
TRISA.0 = 0
TRISA.1 = 0
TRISA.2 = 0
d1enable = False
d2enable = False
mask1 = 0
mask2 = 0
phase = 0
INTCON.T0IE = 1 "habilito interrupcion del timer0
INTCON.GIE = 1 "habilito el registro de interrupciones globales
OPTION_REG.T0CS = 0 "no se, pero necesario
loop:
For i = 0 To 99
digit1 = i / 10 "consigue la parte alta del digito
digit2 = i Mod 10 "consigue la parte baja
TMR0 = 0 "resetea el timer0 para que este no interrumpa antes de conseguir las mascaras
digit = digit1
Gosub getmask "consigue mascara de la parte alta
mask1 = mask
digit = digit2
Gosub getmask "consigue mascara parte baja
mask2 = mask
Gosub show1 "muestra parte alta
Gosub show2 "muestra parte baja
WaitMs 500
Next i
Goto loop
End
On Interrupt "interrupcion del timer0
"el timer0 cuenta 0-255, cuando acaba ejecuta esta rutina
If phase = 0 Then
phase = 1
Gosub show1
Else
phase = 0
Gosub show2
Endif
INTCON.T0IF = 0 "hbilita todas las interrupciones
Resume
getmask:
mask = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), digit "activacion a nivel alto, catodo comun
"(0,1,2,3,4,5,6,7,8,9) dado un digito (0-9) devuelve en un tipo byte el hex que seria
"2 --> 0x5b --> 0111 1011 --> hgfe dcba
" mask = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), digit "activacion a nivel bajo, anodo comun
Return
show1:
d2enable = False
PORTB = mask1
d1enable = True
Return
show2:
d1enable = False
PORTB = mask2
d2enable = True
Return