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