⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 avricp.c

📁 AVR ICP 支持AVR器件编程
💻 C
📖 第 1 页 / 共 4 页
字号:
/* +-----------------------------------+-----+-------+------+-----+------+  */ 
/* |                                   | 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 + -