📄 复件 avricp.c
字号:
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Write fuse bits | 'f' | dd | | 13d | 11 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Write_fuse_bits(void)
{
//G_pgmode == TRUE;
unsigned char data;
data = getc();
SPIWrite(0xAC);
SPIWrite(0xA0);
SPIWrite(0x00);
SPIWrite(data); //atmega16
wait_1ms(g_deviceSupported[G_index].twd_fuse);
putc(0x0D);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Read fuse bits | 'F' | | dd | | 11 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Read_fuse_bits(void)
{
//G_pgmode == TRUE;
SPIWrite(0x50);
SPIWrite(0x00);
SPIWrite(0x00);
putc(SPIRead());
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Leave programming mode | 'L' | | | 13d | 5 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Leave_programming_mode(void)
{
//G_pgmode == TRUE;
InitPortForIdle();
SetReset();
//G_index = 0xff;
//G_pgmode = FALSE;
putc(0x0D);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Select device type | 'T' | dd | | 13d | 6 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Select_device_type(void)
{
unsigned char code;
unsigned char i;
G_device=getc();
G_index = 0xff;
i = 0;
do
{
code = g_deviceSupported[i++].code;
if (code == 0)
{
break;
}
if (code == G_device)
{
G_index = i;
break;
}
} while(i < 0xff);
putc(13);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Read signature bytes | 's' | | 3*dd | | | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
//多功能函数5
void Read_signature_bytes(void)
{
//G_pgmode == TRUE;
if(G_device == AT89C51)
{
SetVPP5V();
PORTA|= _BV(PA6); //RST=H
OutCONBit(PSEN,0); //PSEN=L
OutCONBit(PROG,1); //PROG=H
VPP(1);
OutP2Bit(P26,0);
OutP3Bit(P36,0);
OutP3Bit(P37,0);
OutP2Bit(P27,0);
putc(ParaReadByte(0,0x32));
putc(ParaReadByte(0,0x31));
putc(ParaReadByte(0,0x30));
//VPP(0);
}
else
{
char i;
for (i = 2; i >= 0; i--)
{
SPIWrite(0x30);
SPIWrite(0x00);
SPIWrite(i);
putc(SPIRead());
}
}
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Return supported device codes | 't' | | n*dd | 00d | 7 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Return_supported_device_codes(void)
{
unsigned char code;
unsigned char i;
i=0;
while((code=g_deviceSupported[i++].code) != 0)
{
putc(code);
if(i==0xff)break;
}
//for(i=0x50;i<0x60;i++)putc(i);
putc(0x00);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Return software identifier | 'S' | | s[7] | | 8 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Return_software_identifier(void)
{
putcstr("AVR ISP");
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Return sofware version | 'V' | |dd dd | | 9 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Return_software_version(void)
{
putc(SW_MAJOR);
putc(SW_MINOR);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Return hardware version | 'v' | |dd dd | | 9 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Return_hardware_version(void)
{
putc(HW_MAJOR);
putc(HW_MINOR);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Return programmer type | 'p' | | dd | | 10 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Return_programmer_type(void)
{
putc('S');
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Set LED | 'x' | dd | | 13d | 12 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Set_LED(void)
{
getc();
Host_LED_On();
putc(13);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Clear LED | 'y' | dd | | 13d | 12 | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Clear_LED(void)
{
getc();
Host_LED_Off();
putc(13);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Universial command | ':' | 3*dd | dd | 13d | | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Universal_command(void)
{
//G_pgmode == TRUE;
unsigned char cmd1;
unsigned char cmd2;
unsigned char cmd3;
unsigned char cmd4;
unsigned char cmdr;
cmd1 = getc();
cmd2 = getc();
cmd3 = getc();
cmd4 = 0x00;
SPIWrite(cmd1);
SPIWrite(cmd2);
SPIWrite(cmd3);
cmdr = SPIWrite(cmd4);
putc(cmdr);
delay(120);
putc(13);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | New universal command | '.' | 4*dd | dd | 13d | | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void New_universal_command(void)
{
//G_pgmode == TRUE;
unsigned char cmd1;
unsigned char cmd2;
unsigned char cmd3;
unsigned char cmd4;
unsigned char cmdr;
cmd1 = getc();
cmd2 = getc();
cmd3 = getc();
cmd4 = getc();
SPIWrite(cmd1);
SPIWrite(cmd2);
SPIWrite(cmd3);
cmdr = SPIWrite(cmd4);
putc(cmdr);
delay(120);
putc(13);
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Special test command | 'Z' | 2*dd | dd | | | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | ID | host | programer | Note | */
/* | Read lock bits | 'r' | | dd | | | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Read_lock_bits(void)
{
//G_pgmode == TRUE;
SPIWrite(0x58);
SPIWrite(0x00);
SPIWrite(0x00);
putc(SPIRead());
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Read high fuse bits | 'N' | | dd | | | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Read_high_fuse_bits(void)
{
//G_pgmode == TRUE;
SPIWrite(0x58);
SPIWrite(0x08);
SPIWrite(0x00);
putc(SPIRead());
return;
}
/* +-----------------------------------+-----+-------+------+-----+------+ */
/* | | ID | host | programer | Note | */
/* | Read extended fuse bits | 'Q' | | dd | | | */
/* +-----------------------------------+-----+-------+------+-----+------+ */
void Read_extended_fuse_bits(void)
{
//G_pgmode == TRUE;
SPIWrite(0x50);
SPIWrite(0x08);
SPIWrite(0x00);
putc(SPIRead());
return;
}
/*--------------------------------------------------------------------------*/
/* int main(void) */
/*--------------------------------------------------------------------------*/
int main(void)
{
InitUART();
InitPortForIdle();
G_device = 0;
G_index = 0xff;
G_pgmode = FALSE;
G_pgaddrh = 0;
G_pgaddrl = 0;
Programer_LED_On();
wait_1ms(500);
Programer_LED_Off();
wait_1ms(500);
Programer_LED_On();
wait_1ms(500);
Programer_LED_Off();
do{
char c;
c = getc();
switch (c)
{
case 0x1b: /* ESC received */ break;
case 'T': Select_device_type(); break;
case 'S': Return_software_identifier(); break;
case 'V': Return_software_version(); break;
case 'v': Return_hardware_version(); break;
case 't': Return_supported_device_codes(); break;
case 'p': Return_programmer_type(); break;
case 'a': Report_autoincrement_address(); break;
case 'x': Set_LED(); break;
case 'y': Clear_LED(); break;
default:
if (G_index == 0xff) { putc('?'); }
else switch (c) {
case 'P': Enter_programming_mode(); break;
case 'C': Write_program_memory_high_byte(); break;
case 'c': Write_program_memory_low_byte(); break;
case 'R': Read_program_memory(); break;
case 'A': Set_address(); break;
case 'D': Write_data_memory(); break;
case 'd': Read_data_memory(); break;
case 'L': Leave_programming_mode(); break;
case 'e': Chip_erase(); break;
case 'l': Write_lock_bits(); break;
case 'r': Read_lock_bits(); break;
case 's': Read_signature_bytes(); break;
case 'm': Issue_Page_Write(); break;
case ':': Universal_command(); break;
case '.': New_universal_command(); break;
case 'f': Write_fuse_bits(); break;
case 'F': Read_fuse_bits(); break;
case 'N': Read_high_fuse_bits(); break;
case 'Q': Read_extended_fuse_bits(); break;
default: /* Command Error */ putc('?'); }
}
} while (TRUE);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -