View Full Version : How to set interrupt for Timer 0
chai98a
- 15th November 2006, 12:54
Now have problem with time 0 set interrupt every 34 us
Here is my code ,that is correct or not
Main:
Trisb = %11111111
Trisa = %00000000
'DECLARE SYMBOLS
Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol GIE = INTCON.7 ' Global Interrupt Enable
Symbol PS0 = OPTION_REG.0 ' Prescaler Rate Select
Symbol PS1 = OPTION_REG.1 ' Prescaler Rate Select
Symbol PS2 = OPTION_REG.2 ' Prescaler Rate Select
Symbol PSA = OPTION_REG.3 ' Prescaler Assignment
Symbol TOCS = OPTION_REG.5
'SET REGISTERS
'Below is the prescaler setting you chose....
'---------------------------------------------------------
PS0 = 0
PS1 = 0
PS2 = 0
PSA = 1
'---------------------------------------------------------
TOCS = 0 'set the clock source for internal oscillator
T0IF = 0 'clear the interrupt flag
T0IE = 1 'enable tmr0 interrupt
GIE = 1 'enable Global interrupts
'Below is the offset setting you chose....
TMR0 = 223
'START PROGRAM
On Interrupt goto Int
Strobe = 1 'strobe off
latch = 1 'lactch off
clock = 1 'CLOCK OFF ACTIVE HIGH
Sin3 = 0
Sin2 = 0
SIN1 = 0
Loop:
nap 7
goto loop
mister_e
- 15th November 2006, 13:47
it's not the whole thing you posted right?
It miss the most intereting part... :(
chai98a
- 17th November 2006, 06:47
after i start debug with IDC the code will run and stop at line TMR0 = 223
and still there Now i don't know why ...
Norrmally after we run should run untill sub " loop " and replace there untill TMR0 was over full and then jump to "INT:" sub right
Pls advise too.....
Bruce
- 17th November 2006, 15:14
NAP uses SLEEP which stops the clock, which stops the timer.
mister_e
- 17th November 2006, 16:00
DOH! Seems i miss that line :(
chai98a
- 17th November 2006, 17:31
So , I did change to used ..
'--------------
While 1
wend
'--------------
But still same problem found, Who did have sample of time interrupt TMR0 pls share for me too
chai98a
- 17th November 2006, 18:33
Hi what i am worng why i cannot to simulate or debug on this file
DEFINE LOADER_USED 1
DEFINE OSC 4
'@ Device pic16F877, XT_OSC, BOD_OFF, PWRT_ON, WDT_off, PROTECT_OFF,WRT_On
INCLUDE "modedefs.bas"
Strobe Var Porta.0
Latch var Porta.1
Clock Var Porta.2
Sin3 var Porta.3
Sin2 var Porta.4
Sin1 var Porta.5
Datasin3 var word
Datasin2 var word
Datasin1 var word
Scanrow1 con 0
Scanrow0 con 17
font0 CON 40
font1 CON 57
font2 CON 74
font3 CON 91
COLUM3 VAR BYTE
COLUM2 VAR BYTE
COLUM1 VAR BYTE
COLUM0 VAR BYTE
ROW1 VAR BYTE
ROW0 VAR BYTE
font0X VAR BYTE
font1X VAR BYTE
font2X VAR BYTE
font3X VAR BYTE
S1 var bit
S2 var Bit
S3 Var bit
I var byte
'J Var BYTE
K VAR BYTE
'L VAR BYTE
'N VAR BYTE
X var byte
Z var Byte
'Pause 500
Main:
Trisb = %11111111
Trisa = %00000000
ADCON1 = 7
OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
INTCON = $a0 ' Enable TMR0 interrupts
TMR0 = 0
'START PROGRAM
on interrupt goto int1
Strobe = 1'strobe off
latch = 1'lactch off
clock = 1'CLOCK OFF ACTIVE HIGH
Sin3 = 0
Sin2 = 0
SIN1 = 0
WHILE 1
WEND
end
EEPROM scanrow1,[0,0,0,0,0,0,0,0,1,2,4,8,16,32,64,128]
EEPROM Scanrow0,[1,2,4,8,16,32,64,128,0,0,0,0,0,0,0,0]
EEPROM FONT0,[$00,$00,$00,$00,$00,$7C,$40,$40,$78,$40,$40,$7C,$0 0,$00,$00,$00]
EEPROM FONT1,[$00,$00,$00,$00,$00,$7C,$10,$10,$10,$10,$10,$10,$0 0,$00,$00,$00]
EEPROM FONT2,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0 0,$00,$00,$00]
DISABLE
int1:
T0IF = 0 'clear the interrupt flag
TMR0 = 223
STROBE = 1
FOR K = 0 TO 8
READ (FONT1+K),COLUM2
READ (FONT2+K),COLUM0
READ (SCANROW0+K),ROW0
GOSUB SCANDATASIN8BITLOWBYTE
READ (FONT0+K),COLUM3
READ (FONT1+K),COLUM1
READ (SCANROW1+K),ROW1
GOSUB SCANDATASIN8BITHIGHBYTE
LATCH = 0
PAUSEUS 50
LATCH = 1
STROBE = 0
PAUSEUS 150
STROBE = 1
next k
FOR K = 8 TO 16
READ (FONT1+K),COLUM2
READ (FONT2+K),COLUM0
READ (SCANROW0+K),ROW0
GOSUB SCANDATASIN8BITLOWBYTE
READ (FONT0+K),COLUM3
READ (FONT1+K),COLUM1
READ (SCANROW1+K),ROW1
GOSUB SCANDATASIN8BITHIGHBYTE
LATCH = 0
PAUSEUS 50
LATCH = 1
STROBE = 0
PAUSEUS 150
STROBE = 1
NEXT K
resume
enable
SCANDATASIN8BITLOWBYTE:
FOR I = 0 TO 8
S3 = colum0.0[i]
S2 = colum2.0[i]
S1 = row0.0[i]
Sin3 = S3
Sin2 = S2
SIN1 = S1
clock = 1
PAUSEUS 50
clock = 0
NEXT I
RETURN
SCANDATASIN8BITHIGHBYTE:
FOR I = 0 TO 8
S3 = colum1.0[i]
S2 = colum3.0[i]
S1 = row1.0[i]
Sin3 = S3
Sin2 = S2
SIN1 = S1
clock = 1
PAUSEUS 50
clock = 0
NEXT I
RETURN
sayzer
- 17th November 2006, 19:05
Hi chai98a,
First of all, you should have a clear structure in your programming :)
Here, I have done it for you.
There are couple of things need to be paid attention of.
1. You have EEPROM command to fill up the EEPROM with some values but you use this command with a constant inside the program. EEPROM can not be used inside the program; check the help file.
2. You did not assign any variable to TMR0 interrupt flag, but you use "T0IF"; T0IF VAR INTCON.2
3. You do not have a loop here. I guess you wanted to do something with
WHILE 1
WEND
Describe what you wanted to do.
EEPROM 0, [0,0,0,0,0,0,0,0,1,2,4,8,16,32,64,128]
EEPROM 17,[1,2,4,8,16,32,64,128,0,0,0,0,0,0,0,0]
EEPROM 40,[$00,$00,$00,$00,$00,$7C,$40,$40,$78,$40,$40,$7C,$0 0,$00,$00,$00]
EEPROM 57,[$00,$00,$00,$00,$00,$7C,$10,$10,$10,$10,$10,$10,$0 0,$00,$00,$00]
EEPROM 74,[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0 0,$00,$00,$00]
DEFINE LOADER_USED 1
@ Device pic16F877, XT_OSC, BOD_OFF, PWRT_ON, WDT_OFF, PROTECT_OFF,WRT_ON
INCLUDE "modedefs.bas"
TRISA = %00000000
TRISB = %11111111
ADCON1 = 7
OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
INTCON = $A0 ' Enable TMR0 interrupts
T0IF VAR INTCON.2
on interrupt goto int1
Strobe Var Porta.0
Latch var Porta.1
Clock Var Porta.2
Sin3 var Porta.3
Sin2 var Porta.4
Sin1 var Porta.5
Datasin3 var word
Datasin2 var word
Datasin1 var word
Scanrow1 con 0
Scanrow0 con 17
font0 CON 40
font1 CON 57
font2 CON 74
font3 CON 91
COLUM3 VAR BYTE
COLUM2 VAR BYTE
COLUM1 VAR BYTE
COLUM0 VAR BYTE
ROW1 VAR BYTE
ROW0 VAR BYTE
font0X VAR BYTE
font1X VAR BYTE
font2X VAR BYTE
font3X VAR BYTE
S1 var bit
S2 var Bit
S3 Var bit
I var byte
K VAR BYTE
X var byte
Z var Byte
Main:
TMR0 = 0
Strobe = 1'strobe off
latch = 1'lactch off
clock = 1'CLOCK OFF ACTIVE HIGH
Sin3 = 0
Sin2 = 0
SIN1 = 0
' WHILE 1
' WEND
'What will happen here? What is it you wanted to do? And where is the loop?
DISABLE
int1:
T0IF = 0 'clear the interrupt flag
' TMR0 = 223
' ????
STROBE = 1
FOR K = 0 TO 8
READ (FONT1+K),COLUM2
READ (FONT2+K),COLUM0
READ (SCANROW0+K),ROW0
GOSUB SCANDATASIN8BITLOWBYTE
READ (FONT0+K),COLUM3
READ (FONT1+K),COLUM1
READ (SCANROW1+K),ROW1
GOSUB SCANDATASIN8BITHIGHBYTE
LATCH = 0
PAUSEUS 50
LATCH = 1
STROBE = 0
PAUSEUS 150
STROBE = 1
next k
FOR K = 8 TO 16
READ (FONT1+K),COLUM2
READ (FONT2+K),COLUM0
READ (SCANROW0+K),ROW0
GOSUB SCANDATASIN8BITLOWBYTE
READ (FONT0+K),COLUM3
READ (FONT1+K),COLUM1
READ (SCANROW1+K),ROW1
GOSUB SCANDATASIN8BITHIGHBYTE
LATCH = 0
PAUSEUS 50
LATCH = 1
STROBE = 0
PAUSEUS 150
STROBE = 1
NEXT K
resume
enable
SCANDATASIN8BITLOWBYTE:
FOR I = 0 TO 8
S3 = colum0.0[i]
S2 = colum2.0[i]
S1 = row0.0[i]
Sin3 = S3
Sin2 = S2
SIN1 = S1
clock = 1
PAUSEUS 50
clock = 0
NEXT I
RETURN
SCANDATASIN8BITHIGHBYTE:
FOR I = 0 TO 8
S3 = colum1.0[i]
S2 = colum3.0[i]
S1 = row1.0[i]
Sin3 = S3
Sin2 = S2
SIN1 = S1
clock = 1
PAUSEUS 50
clock = 0
NEXT I
RETURN
chai98a
- 18th November 2006, 00:14
Hi sayzer
For "while 1" we need the program waiting for time interrupt
Here is picture of ICD UI ,why stop at first lin of main: sub, try to add goto int1 at first line of main : still found the same..
Powered by vBulletin® Version 4.1.7 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.