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

📄 main.c

📁 脱机ISP编程器
💻 C
字号:
/*------------------------------------------------------
Function:	Offline Downloader
Author:		avenbbs(8785116@qq.com)
Version:	1.0
Date:		2008-10-1~2008-10-5
--------------------------------------------------------*/
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "main.h"
#include "common.h"
#include "usart.h"
#include "spi_soft.h"
//#include "AT45DB041D.h"
#include "AT45.h"
#include "xmodem.h"
#include "isp.h"
#include "command.h"


//定义波特率
#define BAUDRATE 19200

//计算波特率值
#define BAUD ((unsigned int)((F_CPU*10)/(16UL*BAUDRATE)-5)/10)

//检查波特率误差
//下面的定义在不同的C编译器之间可能会有差异
#define FreqTemp (16UL * BAUDRATE * (((F_CPU * 10) / (16 * BAUDRATE) + 5)/ 10))
#if ((FreqTemp * 50) > (51 * F_CPU) || (FreqTemp * 50) < (49 * F_CPU))
#error "BaudRate error > 2% ! Please check BaudRate and F_CPU value."
#endif

extern unsigned char buf[];
extern unsigned char fuse[2];
extern char fuse_ascii[9];
extern unsigned char chip_id[3];
extern unsigned char chip_id_ascii[9];

volatile unsigned char error_flag=0;
unsigned char section;
unsigned char keylock=0;

//-------------------------------------------------------
unsigned char hex2ascii(unsigned char data)
{
	if ((data>=0) && (data<=9))return(data+0x30);
	else if ((data>=10)&&(data<=15))return(data+0x37);
	else return 1;
}

void hex2send(unsigned char data)
{
	usart_tsmt(hex2ascii(data>>4));
	usart_tsmt(hex2ascii(data&0x0f));
	usart_tsmt(0x0d);
	usart_tsmt(0x0a);
}

void led_alarm(void)
{
	LED_1_OFF();
	//static unsigned char keycnt=0;
	LED_2_ON();
	_delay_ms(100);
	//if(KEY_PROG==0x00)error_flag=0;
	LED_2_OFF();
	_delay_ms(100);
	
	if (KEY_PROG==0x00)
	{
		error_flag=0;
		LED_2_ON();
		keylock=0;
		_delay_ms(300);
	}
}

int main(void)
{
	usart_init(BAUD);
	spiSW_init();
	isp_init();
	LED_1_OFF();
	LED_2_ON();
	LED_PORT_INIT();
	KEY_PORT_INIT();
	sei();
	
	for(int i=0;i<512;i++)buf[i]=0xff;
	//DF_write_page(0);
	//for(int i=0;i<512;i++)buf[i]=0x00;
	//DF_read_page(0);
	//for(int i=0;i<512;i++)usart_tsmt(buf[i]);
	do
	{
		unsigned char keytmp;
		static char keycnt=0;
		
		if (keylock==0)
		{
			section=0;
			if (KEY_1==0x00)section+=1;
			if (KEY_2==0x00)section+=2;
			if (KEY_3==0x00)section+=4;
			if (KEY_4==0x00)section+=8;
			//if (KEY_5==0x00)section+=16;
			if(section>0)section-=1;
			
			keytmp=KEY_PROG;
			
			if ((keytmp==0x00)&&(keycnt++>15))
			{
				if (!error_flag)
				
				{
					//if(KEY_6==0x00)
					//	;//xmodem_transmit();
					//else
					//{
						com_process('p');
						com_process('a');
						com_process('l');
						com_process(0x0d);
						//for(int i=0;i<512;i++)usart_tsmt(buf[i]);
					//}
				}
				
				keycnt=0;
			}
			
			_delay_ms(2);
		}
		
		if (error_flag)led_alarm();
		//hex2send(DF_read_reg());
		//_delay_ms(500);
	}
	
	while (1);
	
	return 0;
}

⌨️ 快捷键说明

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