/[H9]/trunk/Embedded/main.c
ViewVC logotype

Annotation of /trunk/Embedded/main.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 139 - (hide annotations) (download)
Mon Dec 3 17:19:35 2007 UTC (16 years, 6 months ago) by hedin
File MIME type: text/plain
File size: 3627 byte(s)
Serial connection is initialized, and it can send a sms, but still WIP.
1 hedin 82 #include <pic18.h>
2     #include <stdio.h>
3     #include <string.h>
4     #include "lcd.h"
5 hedin 137 #include "Delay.h"
6 hedin 109 // Delay.h is included inside lcd.c
7 hedin 82
8 hedin 109 #define LCD_LENGTH 16
9     #define LCD_ROWS 2
10 hedin 139 #define SEND_BUFFER 128
11 hedin 109
12    
13 hedin 137 unsigned char global_Pot_Hi, global_Pot_Lo;
14 hedin 109 unsigned char global_LCD_Buffer[LCD_ROWS][LCD_LENGTH];
15 hedin 139 unsigned char global_serial_send[SEND_BUFFER];
16 hedin 137 unsigned char global_serial_recieve_buffer[LCD_LENGTH];
17     bit global_recieve_done = 0;
18     int global_serial_byte_counter = 0;
19    
20     void serial_recieved(void);
21 hedin 139 void serial_send(void);
22     void update_lcd(void);
23 hedin 137
24 hedin 109 // Nicked from H7
25     void ad_init(void)
26     {
27     // AD Conversion clock
28     ADCS0 = 0;
29     ADCS1 = 0;
30     ADCS2 = 0;
31 hedin 82
32 hedin 109 //Select AN0/RA0 for AD source
33     // In this (000) setup, it's only RA0/AN0 that does ad convertion.
34     CHS0=0;
35     CHS1=0;
36     CHS2=0;
37    
38     //Only AN0 is selected for AD and with Vdd/Vss as limits
39     PCFG0=0;
40     PCFG1=1;
41     PCFG2=1;
42     PCFG3=1;
43    
44 hedin 112 //Result is left justified
45     ADFM=0;
46 hedin 109
47     //Fire up for A/D converter module
48     ADON=1;
49     }
50    
51 hedin 82 void rs232_init(void)
52     {
53     SPEN = 0; // Serial Port Enable Bit... 0 = disabled
54 hedin 137 TRISC6 = 0;
55 hedin 82 TRISC7 = 1;
56 hedin 137
57     SPBRG = 207; // 1200 baud rate... 25 = 9600
58     // x = (Fosc / (16*[baud rate]) )-1
59     TXSTA = 0x24; // Enables BRGH and TXEN inthe TXSTA register
60     RCSTA = 0x90; // 0x90 enables SPEN and CREN in the RCSTA register
61 hedin 82 }
62    
63     void interrupt_init(void)
64     {
65     // Assumes that all interrupts default is 0
66     PEIE = 1;
67     GIE = 1;
68 hedin 137 RCIE = 1; // Recieve interrupt enable.
69     IPEN = 0; // Nfo interrupt priority
70     TXIE = 0; // Serial interrupt enabled
71 hedin 82 }
72    
73     void pic18_io_init(void)
74     {
75 hedin 109 TRISA0 = 1; // analog input
76     TRISB1 = 1; // TRISB1-4 Digital input
77 hedin 82 TRISB2 = 1;
78     TRISB3 = 1;
79     TRISB4 = 1;
80     }
81    
82 hedin 137 void sms_init(void)
83 hedin 82 {
84 hedin 139 int i = 1;
85     sprintf(global_serial_send,"%s", "at+cpin=8043\r");
86     serial_send();
87     DelaySek(60);
88    
89     update_lcd();
90     DelaySek(5);
91    
92     sprintf(global_serial_send,"%s%s", "at+cmgs=","\"22337617\"\r");
93     serial_send();
94     DelayMs(5000);
95    
96     sprintf(global_serial_send,"%s%d%c","Dette er test nr: ", i, 0x1A);
97     serial_send();
98     DelayMs(5000);
99     i++;
100    
101 hedin 82 }
102    
103     void interrupt interrupt_handler(void)
104     {
105 hedin 109 // Finds out what interrupt have been trigged, and starts the respective function.
106 hedin 137 if(RCIF == 1) // Serial recieve interrupt
107 hedin 82 {
108 hedin 137 serial_recieved();
109 hedin 82 RCIF = 0;
110     }
111     }
112 hedin 109
113 hedin 137
114    
115     void serial_send(void)
116     {
117     int i;
118 hedin 139 // char tosend[3];
119 hedin 137 char data;
120 hedin 139 // sprintf(tosend,"%s", "at\r");
121     for(i = 0; i < SEND_BUFFER; i++)
122 hedin 109 {
123 hedin 139 data = global_serial_send[i];
124     if( data == '\r')
125     i = (SEND_BUFFER - 1);
126 hedin 137 TXREG = data;
127 hedin 139 while(TRMT==0) ;
128 hedin 137 DelayMs(1000);
129 hedin 109 }
130 hedin 137 }
131    
132     void serial_recieved(void)
133     {
134     char data, saved_data[LCD_LENGTH];
135    
136     data = RCREG;
137    
138     global_serial_recieve_buffer[global_serial_byte_counter] = data;
139     if(data == '\r')
140     {
141     global_recieve_done = 1;
142     global_serial_byte_counter = 0;
143     }
144 hedin 109 else
145     {
146 hedin 137 global_serial_byte_counter++;
147 hedin 109 }
148    
149 hedin 137 }
150 hedin 139 void update_lcd(void)
151     {
152     if( global_recieve_done == 1 )
153     {
154     lcd_clear();
155     lcd_goto(0x00);
156     lcd_puts(global_serial_recieve_buffer);
157     global_recieve_done = 0;
158     }
159     }
160 hedin 109
161 hedin 82 void main()
162     {
163 hedin 109 /////////////////////////////////////////////
164     // Running Init's
165    
166     // Running init for various components.
167     //AD_init();
168     ad_init();
169 hedin 82 rs232_init();
170     pic18_io_init();
171 hedin 109 lcd_init(0);
172 hedin 139 lcd_clear();
173 hedin 137 interrupt_init();
174 hedin 139 sms_init();
175 hedin 109 /////////////////////////////////////////////
176     // Main loop
177    
178     while(1)
179 hedin 100 {
180 hedin 109 // Checking if A/D convertion is done, and save the data in global_Pot_??
181     if(GODONE==0)
182     {
183     global_Pot_Hi = ADRESH;
184     global_Pot_Lo = ADRESL;
185 hedin 112 GODONE = 1;
186 hedin 109 }
187 hedin 139 update_lcd();
188 hedin 100 }
189 hedin 82 }

  ViewVC Help
Powered by ViewVC 1.1.20