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

📄 demo.c

📁 《AVR单片机GCC程序设计》
💻 C
字号:
/*
	LuckyProg Mega8 BootLoader 引导程序 V1.0	
		
	文件名	:	demo.c
	作    者: 	芯 艺
	更新时间:	2004-08-30
	
	CPU 	:	ATMEGA8
	时    钟:	4MHz
	编    译:	WinAVR-20040720	
	
	E-mail	:	changfutong@sina.com
	MSN		:	changfutong@hotmail.com
	OICQ	:	27796915
	欢迎访问: http://BitFu.yeah.net
	

	注:本程序在硬件上调试通过,
	与计算机程序LuckyProg Mega8 BootLoader(LuckyProg M8BL)V1.0配合使用。

*/

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/boot.h>

#define uchar unsigned char
#define uint unsigned int

#define FREQ 4
#define UART_ACK 0XAA

#define PAGE_SIZE 64

uint g_wPageIndex=0;		//
uchar g_aPageTemp[PAGE_SIZE];

void (*reset)(void)=0x0000;

void uart_putc(uchar c)
{
	while( !(UCSRA & (1<<UDRE)) );
	UDR=c;
}

uchar uart_getc(void)
{
	while( !(UCSRA & (1<<RXC)) );	
	return UDR;
}

void WritePage(void)
{
	uchar i;
	
	//	接收当前页面数据
	for(i=0;i<PAGE_SIZE;i++)
		g_aPageTemp[i]=uart_getc();
	
	//	页擦除操作
    boot_page_erase(g_wPageIndex<<6);
    while(boot_rww_busy())
        boot_rww_enable();

	//	填充缓冲页
    for(i = 0; i < PAGE_SIZE; i += 2)
        boot_page_fill((unsigned long)i,*((uint *)(g_aPageTemp +i)));

    //	页写入操作
    boot_page_write(g_wPageIndex<<6);
    while(boot_rww_busy())
        boot_rww_enable();
    
    g_wPageIndex++;
}

void ReadPage(void)
{
    uchar i;
    
    for(i=0;i<PAGE_SIZE;i++)
    	uart_putc(pgm_read_byte(i+(g_wPageIndex*PAGE_SIZE)));

	g_wPageIndex++;
}

int  main(void) 
{
	uchar tmp;
	

	//uart 初始化
	UBRRH=0;
	UBRRL=25;//9600 baud 6MHz:38  4MHz:25
	UCSRB=(1<<RXEN)|(1<<TXEN);
	
	while(1)
	{
		tmp=uart_getc();//recv command
		
		
		switch(tmp)
		{
			case 0xB0://设置页地址
				g_wPageIndex=uart_getc();
				uart_putc(g_wPageIndex);
				break;
				
			case 0xBF://运行用户程序
				reset();
				break;
				
			case 0xAF://写一页
				WritePage();
				uart_putc(UART_ACK);//应答
				break;
				
			case 0xA0://读一页
				ReadPage();
				break;
				
			case UART_ACK://回应检测命令
				uart_putc(UART_ACK);
				break;
			
			default:
				break;
		}
	
	}	
}	


⌨️ 快捷键说明

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