Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
goto INITIALIZE
DEFINE INTHAND Int_Vector ' Handler de Interrupcion
;disable
ASM
Int_Vector
MOVWF wsave ; Guardamos el registro W
MOVF STATUS,W
CLRF STATUS ; Guardamos el registro STATUS
MOVWF ssave
MOVF PCLATH,W ; Guardamos el registro PCLATH
MOVWF psave
CLRF PCLATH
ENDASM
;############ INTERRUPT CODE ###############
if INTCON.2 = 1 then ;######## TIMER ########
INTCON.2 = 0 ;Borra la bandera TMR0
TMR0 = 226 ;(226) cada 100us a 20mhz y con 1/16 227
;Hace lo ke kieras
RESUME
endif
Resume
ASM ;****** Fin de Interrupcion ***********
End_Int
CLRF STATUS
MOVF psave,W
MOVWF PCLATH ; Restauramos el registro PCLATH
MOVF ssave,W
MOVWF STATUS ; Restauramos el registro STATUS
SWAPF wsave,F
SWAPF wsave,W ; Restauramos el registro W
RETFIE
ENDASM
;################ REGISTROS ######################
INITIALIZE:
OPTION_REG = %10000011 ;pull-up off ;flanco descendente ; temporizador ;inc flanco ascendente
;Divisor TMR0 ;1/16
INTCON = %10100000 ;Activa interrupcion Global, y TMR0
Si bueno me iluminaste, ASM y ENDASM....pero sigo pensando, no habrá algo mas sencillo sin usar asembler?....
Si bueno me iluminaste, ASM y ENDASM....pero sigo pensando, no habrá algo mas sencillo sin usar asembler?....
Un pequeño ejemplo de interrupción externa por Hardware (PBP) con un 16F628A
Y otro de un reloj usando el TMR0 (Nada preciso pero sirve de ejemplo) 16F877A![]()
Si note que no tenia precisión el ejemplo.(Nada preciso pero sirve de ejemplo) 16F877A![]()
No lo escribi yo.Darkbytes deberías darle precisión a los segundos, o está bien?
Si, efectivamente tienes razón. Yo no suelo trabajar con interrupciones,Esa es una interrupcion por "Hardware" porque se activa con un boton, pero internamente el pic no la realiza por hardware porque por ejemplo si pones una pausa de 5 segundos y apretas el boton de la interrupcion, esta no se va a ejecutar inmediatamente, sino hasta que pasen los 5 segundos de la pausa. En proton o ASM esto no pasa, se ejecuta inmediatamente.
Saludos.alguien tiene un tutorial en español sobre el uso de timer 0 en pic basic, le agradecería mucho si lo comparte
El registro TMR0 almacena el conteo, este registro está en la memoria RAM y no tiene ninguna relación con la EEPROM. El TMR0 es un registro de 8 bits por lo que la cuenta va de 0 a 255 y vuelve a empezar.pregunto de ignorante, ¿ese registro de la memoria lo guarda en al eprom y lo puedo leer con el comando READ?
define osc 10
define lcd_dreg porta
define lcd_bits 4
define lcd_dbit 0
define lcd_rsreg portb
define lcd_rsbit 1
define lcd_ereg portb
define lcd_ebit 3
TOCK var byte
X var byte
on interrupt goto rpm
symbol toif = intcon.2
symbol gie = intcon.7
symbol B = tmr0
option_reg = %00110111
intcon = %10100100
a:
high porta.2
pause 500
low porta.2
pause 500
goto a
rpm:
disable
lcdout $fe,1
lcdout $fe,2
lcdout B
toif = 0
gie = 1
tmr0 = 0
enable
resume
end