--- trunk/Embedded/main.c 2007/11/30 13:47:05 109 +++ trunk/Embedded/main.c 2007/12/03 17:19:35 139 @@ -2,20 +2,25 @@ #include #include #include "lcd.h" +#include "Delay.h" // Delay.h is included inside lcd.c #define LCD_LENGTH 16 #define LCD_ROWS 2 +#define SEND_BUFFER 128 -unsigned char global_Pot_Hi; -unsigned char global_Pot_Lo; +unsigned char global_Pot_Hi, global_Pot_Lo; unsigned char global_LCD_Buffer[LCD_ROWS][LCD_LENGTH]; -/*void AD_init(void) -{ - ADON = 1; -} -*/ +unsigned char global_serial_send[SEND_BUFFER]; +unsigned char global_serial_recieve_buffer[LCD_LENGTH]; +bit global_recieve_done = 0; +int global_serial_byte_counter = 0; + +void serial_recieved(void); +void serial_send(void); +void update_lcd(void); + // Nicked from H7 void ad_init(void) { @@ -36,8 +41,8 @@ PCFG2=1; PCFG3=1; - //Result is right justified - ADFM=1; + //Result is left justified + ADFM=0; //Fire up for A/D converter module ADON=1; @@ -46,13 +51,13 @@ void rs232_init(void) { SPEN = 0; // Serial Port Enable Bit... 0 = disabled - TRISC6 = 0; + TRISC6 = 0; TRISC7 = 1; - SYNC = 0; // SYNC switches between async(0) and sync(1) mode. - SPBRG = 25; - TXSTA = 0x24; - RCSTA = 0x90; - SPEN = 1; + + SPBRG = 207; // 1200 baud rate... 25 = 9600 + // x = (Fosc / (16*[baud rate]) )-1 + TXSTA = 0x24; // Enables BRGH and TXEN inthe TXSTA register + RCSTA = 0x90; // 0x90 enables SPEN and CREN in the RCSTA register } void interrupt_init(void) @@ -60,7 +65,9 @@ // Assumes that all interrupts default is 0 PEIE = 1; GIE = 1; - RCIE = 1; + RCIE = 1; // Recieve interrupt enable. + IPEN = 0; // Nfo interrupt priority + TXIE = 0; // Serial interrupt enabled } void pic18_io_init(void) @@ -72,49 +79,85 @@ TRISB4 = 1; } -void interrupt_recieve_handler(void) +void sms_init(void) { - // Handle recieve inputs... + int i = 1; + sprintf(global_serial_send,"%s", "at+cpin=8043\r"); + serial_send(); + DelaySek(60); + + update_lcd(); + DelaySek(5); + + sprintf(global_serial_send,"%s%s", "at+cmgs=","\"22337617\"\r"); + serial_send(); + DelayMs(5000); + + sprintf(global_serial_send,"%s%d%c","Dette er test nr: ", i, 0x1A); + serial_send(); + DelayMs(5000); + i++; + } void interrupt interrupt_handler(void) { // Finds out what interrupt have been trigged, and starts the respective function. - if(RCIF == 1) + if(RCIF == 1) // Serial recieve interrupt { - interrupt_recieve_handler(); + serial_recieved(); RCIF = 0; } } -void update_lcd(void) + + +void serial_send(void) { - int i = 0, horizontal = 0, vertical = 0; - char alfa[2][LCD_LENGTH]; + int i; +// char tosend[3]; + char data; +// sprintf(tosend,"%s", "at\r"); + for(i = 0; i < SEND_BUFFER; i++) + { + data = global_serial_send[i]; + if( data == '\r') + i = (SEND_BUFFER - 1); + TXREG = data; + while(TRMT==0) ; + DelayMs(1000); + } +} + +void serial_recieved(void) +{ + char data, saved_data[LCD_LENGTH]; + data = RCREG; - static char current_row = 0; - static char current_char = 0; - char toLCD0[LCD_LENGTH], toLCD1[LCD_LENGTH]; - char B1[16]; - lcd_goto(0x00); - sprintf(toLCD0, "%s", "Ejdesgaard"); - if(RB1) + global_serial_recieve_buffer[global_serial_byte_counter] = data; + if(data == '\r') { - sprintf(B1, "Pwr%s", "True"); - } + global_recieve_done = 1; + global_serial_byte_counter = 0; + } else { - sprintf(B1, "%s", "False"); + global_serial_byte_counter++; } - lcd_puts(B1); - - lcd_goto(0x40); -// sprintf(toLCD1, "%s", "Test"); - lcd_puts("Test1"); } - +void update_lcd(void) +{ + if( global_recieve_done == 1 ) + { + lcd_clear(); + lcd_goto(0x00); + lcd_puts(global_serial_recieve_buffer); + global_recieve_done = 0; + } +} + void main() { ///////////////////////////////////////////// @@ -126,7 +169,9 @@ rs232_init(); pic18_io_init(); lcd_init(0); - + lcd_clear(); + interrupt_init(); + sms_init(); ///////////////////////////////////////////// // Main loop @@ -137,9 +182,8 @@ { global_Pot_Hi = ADRESH; global_Pot_Lo = ADRESL; - GODONE = 0; + GODONE = 1; } - - update_lcd(); + update_lcd(); } }