Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

HI-TECH PICC18 external interrupt doesn't work

Status
Not open for further replies.

khaled ragab

Junior Member level 1
Joined
Feb 15, 2012
Messages
19
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,442

Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include<htc.h>
#include"lcd_fns_4bit_hitech_roll.h"
#define _XTAL_FREQ 20000000
 
 
#pragma config PBADEN = OFF
#pragma config FOSC = HS
#pragma config BOR = OFF
#pragma config WDT = OFF
 
 
unsigned int count=0;
 
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
 
void init_interrupt_ports()
{
 
PEIE=1;
GIE=1;
INT0IE=1;
INT1IE=1;
ei();
TRISB=255;
PORTB=0;
 
TRISC=0;
PORTC=0;
 
}
 
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
 
void tmr1_start (unsigned char sampling_freq)
{
//--------------------------------
//note : max sampling time (timer) = 520 ms => min sampling freq = 2
//max sampling time (unsigned char) = 255 => min sampling freq = 4
//--------------------------------
 
unsigned char sampling_time_ms;
unsigned int set_value;
float req_value;
 
T1CON=0b00110001;
 
sampling_time_ms = (1000/sampling_freq);
 
//--------------------------------
//fosc:20mhz ---fosc/4---> 5mhz ---1:8prescaler---> 625khz ==> time of a single colck tick = 1000/750000 = 1.6*(10^-3)msec
//1.3*(10^-3)msec * (2^16-1(no of tmr1 ticks)) = 87ms(timer max capacity) 
//--------------------------------
//to determine what value to set in the timers regs to count a certain time
//max value = 2^16-1 = 65535
//required value = sampling_time_ms/(8*10^-3)
//set_value = max value - required valuue
//--------------------------------
req_value = ((sampling_time_ms*1000) / (1.6));
set_value = (int)(((2^16)-1)- req_value);
 
TMR1L=set_value;
TMR1H=(set_value>>8);
}
 
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
 
void interrupt ISR(void)
{
    if(INT0IF==1)
    {
        count++;
        INT0IF=0;
    }
}
 
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
 
void main()
{
init_lcd();
init_interrupt_ports();
tmr1_start(20);
while(1)
{
    if(TMR1IF==1)
    {
    TMR1IF=0;
    gotorc(0,0);
    show_number(count);
    tmr1_start(20);
    }
}
}



this is the code i don't know where is the problem the intif is always zero never goes high
 
Last edited by a moderator:

Code:
#pragma config PBADEN = OFF
#pragma config FOSC = HS
#pragma config BOR = OFF
#pragma config WDT = OFF

comes in mplab c 18 code. Are you sure it is hitech c code?

I think INT0IE and INT0IF should be written as INCONbits.INT0IE and INCONbits.INT0IF
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top