--- trunk/Embedded/main.lst 2007/11/28 17:00:45 82 +++ trunk/Embedded/main.lst 2007/12/03 17:19:35 139 @@ -1,56 +1,189 @@ 1: #include 2: #include 3: #include - 4: - 5: #include "lcd.h" - 6: + 4: #include "lcd.h" + 5: #include "Delay.h" + 6: // Delay.h is included inside lcd.c 7: - 8: void rs232_init(void) - 9: { - 10: SPEN = 0; // Serial Port Enable Bit... 0 = disabled - 11: TRISC6 = 0; - 12: TRISC7 = 1; - 13: SYNC = 0; // SYNC switches between async(0) and sync(1) mode. - 14: SPBRG = 25; - 15: TXSTA = 0x24; - 16: RCSTA = 0x90; - 17: SPEN = 1; - 18: } + 8: #define LCD_LENGTH 16 + 9: #define LCD_ROWS 2 + 10: #define SEND_BUFFER 128 + 11: + 12: + 13: unsigned char global_Pot_Hi, global_Pot_Lo; + 14: unsigned char global_LCD_Buffer[LCD_ROWS][LCD_LENGTH]; + 15: unsigned char global_serial_send[SEND_BUFFER]; + 16: unsigned char global_serial_recieve_buffer[LCD_LENGTH]; + 17: bit global_recieve_done = 0; + 18: int global_serial_byte_counter = 0; 19: - 20: void interrupt_init(void) - 21: { - 22: // Assumes that all interrupts default is 0 - 23: PEIE = 1; - 24: GIE = 1; - 25: RCIE = 1; - 26: } - 27: - 28: void pic18_io_init(void) - 29: { - 30: TRISA0 = 1; - 31: TRISB1 = 1; - 32: TRISB2 = 1; - 33: TRISB3 = 1; - 34: TRISB4 = 1; - 35: } - 36: - 37: void interrupt_recieve_handler(void) - 38: { - 39: // Handle recieve inputs... - 40: } - 41: - 42: void interrupt interrupt_handler(void) - 43: { - 44: if(RCIF == 1) - 45: { - 46: interrupt_recieve_handler(); - 47: RCIF = 0; - 48: } - 49: } - 50: - 51: - 52: void main() - 53: { - 54: rs232_init(); - 55: pic18_io_init(); - 56: } + 20: void serial_recieved(void); + 21: void serial_send(void); + 22: void update_lcd(void); + 23: + 24: // Nicked from H7 + 25: void ad_init(void) + 26: { + 27: // AD Conversion clock + 28: ADCS0 = 0; + 29: ADCS1 = 0; + 30: ADCS2 = 0; + 31: + 32: //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: //Result is left justified + 45: ADFM=0; + 46: + 47: //Fire up for A/D converter module + 48: ADON=1; + 49: } + 50: + 51: void rs232_init(void) + 52: { + 53: SPEN = 0; // Serial Port Enable Bit... 0 = disabled + 54: TRISC6 = 0; + 55: TRISC7 = 1; + 56: + 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: } + 62: + 63: void interrupt_init(void) + 64: { + 65: // Assumes that all interrupts default is 0 + 66: PEIE = 1; + 67: GIE = 1; + 68: RCIE = 1; // Recieve interrupt enable. + 69: IPEN = 0; // Nfo interrupt priority + 70: TXIE = 0; // Serial interrupt enabled + 71: } + 72: + 73: void pic18_io_init(void) + 74: { + 75: TRISA0 = 1; // analog input + 76: TRISB1 = 1; // TRISB1-4 Digital input + 77: TRISB2 = 1; + 78: TRISB3 = 1; + 79: TRISB4 = 1; + 80: } + 81: + 82: void sms_init(void) + 83: { + 84: 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: } + 102: + 103: void interrupt interrupt_handler(void) + 104: { + 105: // Finds out what interrupt have been trigged, and starts the respective function. + 106: if(RCIF == 1) // Serial recieve interrupt + 107: { + 108: serial_recieved(); + 109: RCIF = 0; + 110: } + 111: } + 112: + 113: + 114: + 115: void serial_send(void) + 116: { + 117: int i; + 118: // char tosend[3]; + 119: char data; + 120: // sprintf(tosend,"%s", "at\r"); + 121: for(i = 0; i < SEND_BUFFER; i++) + 122: { + 123: data = global_serial_send[i]; + 124: if( data == '\r') + 125: i = (SEND_BUFFER - 1); + 126: TXREG = data; + 127: while(TRMT==0) ; + 128: DelayMs(1000); + 129: } + 130: } + 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: else + 145: { + 146: global_serial_byte_counter++; + 147: } + 148: + 149: } + 150: 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: + 161: void main() + 162: { + 163: ///////////////////////////////////////////// + 164: // Running Init's + 165: + 166: // Running init for various components. + 167: //AD_init(); + 168: ad_init(); + 169: rs232_init(); + 170: pic18_io_init(); + 171: lcd_init(0); + 172: lcd_clear(); + 173: interrupt_init(); + 174: sms_init(); + 175: ///////////////////////////////////////////// + 176: // Main loop + 177: + 178: while(1) + 179: { + 180: // 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: GODONE = 1; + 186: } + 187: update_lcd(); + 188: } + 189: }