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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
| #include "float2ascii.h"
// LCD module connections
sbit LCD_RS at RD0_bit;
sbit LCD_EN at RD1_bit;
sbit LCD_D4 at RD2_bit;
sbit LCD_D5 at RD3_bit;
sbit LCD_D6 at RD4_bit;
sbit LCD_D7 at RD5_bit;
sbit LCD_RS_Direction at TRISD0_bit;
sbit LCD_EN_Direction at TRISD1_bit;
sbit LCD_D4_Direction at TRISD2_bit;
sbit LCD_D5_Direction at TRISD3_bit;
sbit LCD_D6_Direction at TRISD4_bit;
sbit LCD_D7_Direction at TRISD5_bit;
// End LCD module connections
char count = 0;
unsigned long counter = 0;
double litersPerSec = 0, litersFlowed, litersPerMinute = 0, litersPerHour = 0;
char str[30];
//Timer1
//Prescaler 1:8; TMR1 Preload = 3036; Actual Interrupt Time : 500 ms
//Place/Copy this part in declaration section
void InitTimer1() {
T1CON = 0x30;
TMR1IF_bit = 0;
TMR1H = 0x0B;
TMR1L = 0xDC;
TMR1IE_bit = 1;
}
void interrupt() {
if(INTF_bit) {
if(TMR1ON_bit == 0) {
TMR1ON_bit = 1;
}
else counter += 1;
INTF_bit = 0;
}
if(TMR1IF_bit){
TMR1IF_bit = 0;
TMR1H = 0x0B;
TMR1L = 0xDC;
//Enter your code here
if(++count == 2) {
TMR1ON_bit = 0;
count = 0;
INTE_bit = 0;
}
}
}
void main() {
CMCON = 0x07;
ADCON1 = 0x87;
TRISA = 0xC0;
TRISB = 0x01;
TRISC = 0x00;
TRISD = 0x00;
PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
LCD_Init();
LCD_Cmd(_LCD_CURSOR_OFF);
LCD_Cmd(_LCD_CLEAR);
LCD_Out(1,5,"Flow Meter");
INTEDG_bit = 1;
INTE_bit = 1;
PEIE_bit = 1;
GIE_bit = 1;
INTF_bit = 0;
InitTimer1();
while(1) {
while(TMR1ON_bit);
litersPerSec = (double)counter;
litersPerSec /= 330.0;
litersFlowed += litersPerSec;
litersPerMinute = litersPerSec * 60.0;
litersPerHour = litersPerMinute * 60.0;
Float2Ascii(litersFlowed, str, 2);
strcat(str, " Liters");
LCD_Out(2,1,str);
Float2Ascii(litersPerMinute, str, 2);
strcat(str, " Ltr/min");
LCD_Out(3,1,str);
Float2Ascii(litersPerHour, str, 2);
strcat(str, " Ltr/hr");
LCD_Out(4,1,str);
InitTimer1();
counter = 0;
INTE_bit = 1;
}
} |