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

Annotation of /trunk/Embedded/main.lst

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20