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

📄 protocol.c

📁 用ATMAGE16写的对AVR进行仿真和下载的程序
💻 C
字号:
#include "Include.H"


const struct devinfo_t stDevInfo[] = 
{
	//Devices which support Page Programming.
	{M8515	, DEV_TWD3 | DEV_POLL | PAGE0X20},
//	{M8515B	, DEV_TWD0 | DEV_POLL | PAGE0X20},
	{M103	, DEV_TWD2 | DEV_POLL | PAGE0X80},
	{M603	, DEV_TWD2 | DEV_POLL | PAGE0X80},
	{M128	, DEV_TWD3 | DEV_POLL | PAGE0X80},
//	{M128B	, DEV_TWD0 | DEV_POLL | PAGE0X80},
//	{M64	, DEV_TWD0 | DEV_POLL | PAGE0X80},
//	{M64B	, DEV_TWD0 | DEV_POLL | PAGE0X80},
	{TN26	, DEV_TWD3 | DEV_POLL | PAGE0X10},
	{M161	, DEV_TWD1 | DEV_POLL | PAGE0X40},
//	{M161B	, DEV_TWD0 | DEV_POLL | PAGE0X40},
	{M163	, DEV_TWD1 | DEV_POLL | PAGE0X40},
	{M83	, DEV_TWD1 | DEV_POLL | PAGE0X20},
//	{M163B	, DEV_TWD0 | DEV_POLL | PAGE0X40},
//	{M83B	, DEV_TWD0 | DEV_POLL | PAGE0X20},
//	{M8535	, DEV_TWD0 | DEV_POLL | PAGE0X20},
	{M32	, DEV_TWD3 | DEV_POLL | PAGE0X40},
//	{M32B	, DEV_TWD0 | DEV_POLL | PAGE0X40},
	{M16	, DEV_TWD3 | DEV_POLL | PAGE0X40},
//	{M16B	, DEV_TWD0 | DEV_POLL | PAGE0X40},
	{M8		, DEV_TWD3 | DEV_POLL | PAGE0X20},
//	{M8B	, DEV_TWD0 | DEV_POLL | PAGE0X20},
//	{M169	, DEV_TWD0 | DEV_POLL | PAGE0X40},
//	{M169B	, DEV_TWD0 | DEV_POLL | PAGE0X40},

//	{S1200A	, DEV_TWD0},
//	{S1200B	, DEV_TWD0},
//	{S1200C	, DEV_TWD0},
	{S1200	, DEV_TWD0},
	{S2313	, DEV_TWD0 | DEV_POLL},
	{S4414	, DEV_TWD0 | DEV_POLL},
	{S4433	, DEV_TWD0 | DEV_POLL},
	{S2333	, DEV_TWD0 | DEV_POLL},
	{S8515	, DEV_TWD0 | DEV_POLL},
	{S2323	, DEV_TWD0 | DEV_POLL},
	{S2343	, DEV_TWD0 | DEV_POLL},
//	{TN11	, DEV_TWD0 | DEV_POLL},
//	{TN10	, DEV_TWD0 | DEV_POLL},
	{TN12	, DEV_TWD0 | DEV_POLL},
	{TN15	, DEV_TWD0 | DEV_POLL},
//	{TN19	, DEV_TWD0 | DEV_POLL},
//	{TN28	, DEV_TWD0 | DEV_POLL},
	{S8535	, DEV_TWD0 | DEV_POLL},
	{S4434	, DEV_TWD0 | DEV_POLL},
//	{C8534	, DEV_TWD0 | DEV_POLL},
//	{C8544	, DEV_TWD0 | DEV_POLL},
//	{C1051	, DEV_TWD0 | DEV_POLL},
//	{C2051	, DEV_TWD0 | DEV_POLL},
//	{S8252	, DEV_TWD0 | DEV_POLL},
//	{S53	, DEV_TWD0 | DEV_POLL},
	
	{0x00	, 0x00}
};


const struct devtwd_t stDevTwd[] = 
{
	{TWD_FLASH		, TWD_EEPROM},
	{TWD_FLASH_MEGA	, TWD_EEPROM_MEGA},
	{TWD_FLASH_M103	, TWD_EEPROM_M103},
	{TWD_FLASH_NEW	, TWD_EEPROM_NEW}
};

void SendDevCode(void)
{
	uint08 code, i;

	for (i = 0; code = stDevInfo[i].code; i++)
	{
		putchar(code);
	}
	putchar(0x00);
}


uint08 GetDeviceFlag(uint08 device)
{
	uint08 code, flag, i;

	flag = 0;
	for (i = 0; code = stDevInfo[i].code; i++)
	{
		if (code == device)
		{
			flag = stDevInfo[i].flag;
			break;
		}
	}
	return(flag);
}


void EnterProgramMode(uint08 device)
{
	DDRB  = MASK(RST) | MASK(SCK) | MASK(MOSI) | MASK(SSn);
	PORTB = MASK(MISO);
	//释放复位,51系列高电平复位,AVR 系列低电平复位
	if (device > 0x7f)					//S89 device
	{
		CLRB(PORTB, RST);
	}
	else								//AVR device
	{
		SETB(PORTB, RST);
	}
	Delay1mS(50);
	PORTB ^= MASK(RST);					//复位器件
	Delay1mS(50);
	
	#ifdef SYNFIX
	
	if ((device >= 0x20) && (device <= 0x7F))
	{
		uint08 i;
		
		for (i = 0; i < 32; i++)
		{
			SPIWrite(0xAC);
			SPIWrite(0x53);
			if (SPIWrite(0x00) == 0x53)
			{
				SPIWrite(0x00);
				break;
			}
			SPIWrite(0x00);
			SPIClock();					//SPI Synchronization (fix!)
		}
	}
	else
	{
		SPIWrite(0xAC);
		SPIWrite(0x53);
		SPIWrite(0x00);
		SPIWrite(0x00);
	}
	
	#else
	
	SPIWrite(0xAC);
	SPIWrite(0x53);
	SPIWrite(0x00);
	SPIWrite(0x00);
	
	#endif
	
	Delay1mS(5);
}

#if 1

void SetLed(uint08 u08Data)
{
	u08Data &= 0x03;
	if (u08Data == 0x00)
	{
		SETB(PORTA, LED0);
	}
	if (u08Data == 0x01)
	{
		SETB(PORTA, LED1);
	}
	if (u08Data == 0x02)
	{
		SETB(PORTA, LED2);
	}
}

void ClrLed(uint08 u08Data)
{
	u08Data &= 0x03;
	if (u08Data == 0x00)
	{
		CLRB(PORTA, LED0);
	}
	if (u08Data == 0x01)
	{
		CLRB(PORTA, LED1);
	}
	if (u08Data == 0x02)
	{
		CLRB(PORTA, LED2);
	}
}

#else

void SetLed(uint08 u08Data)
{
	u08Data &= 0x03;
	switch (u08Data)
	{
		case 0x00:
		SETB(PORTA, LED0);
		break;
		
		case 0x01:
		SETB(PORTA, LED1);
		break;
		
		case 0x02:
		SETB(PORTA, LED2);
		break;
		
		default:
		break;
	}
}

void ClrLed(uint08 u08Data)
{
	u08Data &= 0x03;
	switch (u08Data)
	{
		case 0x00:
		CLRB(PORTA, LED0);
		break;
		
		case 0x01:
		CLRB(PORTA, LED1);
		break;
		
		case 0x02:
		CLRB(PORTA, LED2);
		break;
		
		default:
		break;
	}
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -