--- trunk/Embedded/main.lst 2007/11/30 13:47:05 109 +++ trunk/Embedded/main.lst 2007/12/03 17:19:35 139 @@ -2,143 +2,188 @@ 2: #include 3: #include 4: #include "lcd.h" - 5: // Delay.h is included inside lcd.c - 6: - 7: #define LCD_LENGTH 16 - 8: #define LCD_ROWS 2 - 9: - 10: - 11: unsigned char global_Pot_Hi; - 12: unsigned char global_Pot_Lo; - 13: unsigned char global_LCD_Buffer[LCD_ROWS][LCD_LENGTH]; - 14: /*void AD_init(void) - 15: { - 16: ADON = 1; - 17: } - 18: */ - 19: // Nicked from H7 - 20: void ad_init(void) - 21: { - 22: // AD Conversion clock - 23: ADCS0 = 0; - 24: ADCS1 = 0; - 25: ADCS2 = 0; - 26: - 27: //Select AN0/RA0 for AD source - 28: CHS0=0; - 29: CHS1=0; - 30: CHS2=0; - 31: - 32: //Only AN0 is selected for AD and with Vdd/Vss as limits - 33: PCFG0=0; - 34: PCFG1=1; - 35: PCFG2=1; - 36: PCFG3=1; + 5: #include "Delay.h" + 6: // Delay.h is included inside lcd.c + 7: + 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 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: //Result is right justified - 39: ADFM=1; - 40: - 41: //Fire up for A/D converter module - 42: ADON=1; - 43: } - 44: - 45: void rs232_init(void) - 46: { - 47: SPEN = 0; // Serial Port Enable Bit... 0 = disabled - 48: TRISC6 = 0; - 49: TRISC7 = 1; - 50: SYNC = 0; // SYNC switches between async(0) and sync(1) mode. - 51: SPBRG = 25; - 52: TXSTA = 0x24; - 53: RCSTA = 0x90; - 54: SPEN = 1; - 55: } + 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: void interrupt_init(void) - 58: { - 59: // Assumes that all interrupts default is 0 - 60: PEIE = 1; - 61: GIE = 1; - 62: RCIE = 1; - 63: } - 64: - 65: void pic18_io_init(void) - 66: { - 67: TRISA0 = 1; // analog input - 68: TRISB1 = 1; // TRISB1-4 Digital input - 69: TRISB2 = 1; - 70: TRISB3 = 1; - 71: TRISB4 = 1; - 72: } - 73: - 74: void interrupt_recieve_handler(void) - 75: { - 76: // Handle recieve inputs... - 77: } - 78: - 79: void interrupt interrupt_handler(void) - 80: { - 81: // Finds out what interrupt have been trigged, and starts the respective function. - 82: if(RCIF == 1) - 83: { - 84: interrupt_recieve_handler(); - 85: RCIF = 0; - 86: } - 87: } - 88: - 89: void update_lcd(void) - 90: { - 91: int i = 0, horizontal = 0, vertical = 0; - 92: char alfa[2][LCD_LENGTH]; - 93: - 94: - 95: static char current_row = 0; - 96: static char current_char = 0; - 97: char toLCD0[LCD_LENGTH], toLCD1[LCD_LENGTH]; - 98: char B1[16]; - 99: lcd_goto(0x00); - 100: sprintf(toLCD0, "%s", "Ejdesgaard"); - 101: if(RB1) - 102: { - 103: sprintf(B1, "%s", "True"); - 104: } - 105: else - 106: { - 107: sprintf(B1, "%s", "False"); - 108: } - 109: lcd_puts(B1); - 110: - 111: lcd_goto(0x40); - 112: // sprintf(toLCD1, "%s", "Test"); - 113: lcd_puts("Test1"); - 114: - 115: } - 116: - 117: void main() - 118: { - 119: ///////////////////////////////////////////// - 120: // Running Init's - 121: - 122: // Running init for various components. - 123: //AD_init(); - 124: ad_init(); - 125: rs232_init(); - 126: pic18_io_init(); - 127: lcd_init(0); - 128: - 129: ///////////////////////////////////////////// - 130: // Main loop + 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: while(1) - 133: { - 134: // Checking if A/D convertion is done, and save the data in global_Pot_?? - 135: if(GODONE==0) - 136: { - 137: global_Pot_Hi = ADRESH; - 138: global_Pot_Lo = ADRESL; - 139: GODONE = 0; - 140: } - 141: - 142: update_lcd(); - 143: } - 144: } + 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: }