// Copyright 2006 Yamane Akira //Proto //ICC-AVR application builder : 2005/12/26 13:19:01 // Target : M168 // Crystal: 8.0000Mhz #include #include #include #define PROGPORT PORTD #define PROGPIN PIND #define PROGCTRL (1<= '0') && (indata<='9')) { send_char(indata); indata = indata - '0'; } else if ((indata >='A') && (indata <= 'F')) { send_char(indata); indata = indata - 0x37; } else { // i=0x0f; return(hexdata); } hexdata = ((hexdata<<4) | indata); } return hexdata; } void send_nbl2ahex(unsigned char char_data) { unsigned char hexchar; char_data = char_data & 0x0F; if (char_data <= 9) hexchar = char_data + '0'; else hexchar = char_data + 0x37; send_char(hexchar); } void string_out(char *msg_string) { unsigned char i; i=0; while (msg_string[i] !='\0') { send_char(msg_string[i]); i++; } } void send_int(unsigned int int_no) { send_nbl2ahex((char)(int_no>>12)); send_nbl2ahex((char)(int_no>>8)); send_nbl2ahex((char)(int_no>>4)); send_nbl2ahex((char)(int_no)); } void main(void) { void (*funcptr)( void ) = 0x0000; // Set up function pointer unsigned int adr; unsigned int data; unsigned char command,indata; unsigned char page,i,j; init_devices(); PROGPORT |= PROGCTRL; //enable pull-up on PROGCTRL line on PROGPORT if (PROGMODE) //If PROGPIN is pulled low: programmingmode. { while(1) { string_out(Start_msg); for (adr=0; adr<64; adr++) buffer[adr]=0xFF; adr = 0x00; while (adr < 64) { send_int(adr); send_char('-'); buffer[adr] = in_hex(); string_out(Query_msg); command = rec_char(); if (command =='A') ; else if (command =='N') adr++; else adr=64; send_char(0x0d); send_char(0x0a); } string_out(Prompt_PgNo); page=in_hex(); adr=page*128; string_out(Prompt_Op); command=rec_char(); if ((command) == 'Y') write_page(adr,buffer); } } }