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

📄 programer.cpp

📁 MC6808系列单片机程序下载软件底层,加界面可以使用
💻 CPP
字号:
//Programer 类使用MonitorROM类和MCU通信;
//实现FLASH写入与擦除;

#include "stdafx.h"
#include "MonitorROM.h"
#include "Programer.h"


Programer::Programer(MonitorROM *lpROM)
{
	rom = lpROM;
}


void Programer::SetMCU(int MCUType)//设置FLASH开始地址,大小;
{

	switch(MCUType)
	{
	case MC908J3:
		wFStartAddress = 0xEC00;
        nFLASHSize = 4096;
		break;
	case MC908J1:
		wFStartAddress = 0xF600;
        nFLASHSize = 1536;
		break;
	}

}
int Programer::PageErase(WORD Address)//擦除一页FLASH;
{
	WORD sp; //MCU SP指针;
    DWORD event;
	if(Address<wFStartAddress||Address>wFStartAddress+nFLASHSize)
		return 1;//地址超出范围;

    if(Address%64!=0)return 2;//地址不是边界地址;
	
	if(!rom->Write(0x80,(BYTE)(Address>>8)))
		return 3;//装载代码错误;
	if(!rom->Write(0x81,(BYTE)(Address)))
		return 3;//装载代码错误;

	for(int i=0;i<sizeof(EraseCode);i++)
	{
		if(!rom->IWrite(EraseCode[i]))
		return 3;//装载代码错误;
	}

	rom->ReadSP(&sp);
	rom->Write(sp+1,0);
	rom->Write(sp+4,0);
	rom->Write(sp+5,0x82);

    SetCommMask(rom->hCom,EV_BREAK);
	rom->Run();
    WaitCommEvent(rom->hCom,&event,NULL);	
    PurgeComm(rom->hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
	if(event==EV_BREAK)return 0;//成功
	else return 5;//错误
}


int Programer::PageProgram(WORD Address, BYTE *Data)//写入一页FLASH;
{	
	WORD sp; //MCU SP指针;
    DWORD event;


    if(Address%32!=0)return 2;//地址不是边界地址

	if(!rom->Write(0x82,(BYTE)(Address>>8)))
		return 3;//装载代码错误;
	if(!rom->Write(0x83,(BYTE)(Address)))
		return 3;//装载代码错误;
	for(int i=0;i<32;i++)
	{
		if(!rom->IWrite(Data[i]))
		return 4;//装载数据错误;
	}

	for(i=0;i<sizeof(ProgramCode);i++)
	{
		if(!rom->IWrite(ProgramCode[i]))
		return 3;//装载代码错误;
	}
	
	rom->ReadSP(&sp);
	rom->Write(sp+1,0);
	rom->Write(sp+4,0);
	rom->Write(sp+5,0xA4);

    SetCommMask(rom->hCom,EV_BREAK);
	rom->Run();
    WaitCommEvent(rom->hCom,&event,NULL);
    PurgeComm(rom->hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
	if(event==EV_BREAK)return 0;//成功
	else return 5;//错误

}

int Programer::MassErase(  )//整FLASH擦除;
{
	WORD sp; //MCU SP指针;
    DWORD event;

	if(!rom->Write(0x80,(BYTE)(wFStartAddress>>8)))
		return 3;//装载代码错误;
	if(!rom->Write(0x81,(BYTE)(wFStartAddress)))
		return 3;//装载代码错误;

	for(int i=0;i<sizeof(MassErsCode);i++)
	{
		if(!rom->IWrite(MassErsCode[i]))
		return 3;//装载代码错误;
	}

	rom->ReadSP(&sp);
	rom->Write(sp+1,0);
	rom->Write(sp+4,0);
	rom->Write(sp+5,0x82);

    SetCommMask(rom->hCom,EV_BREAK);
	rom->Run();
    WaitCommEvent(rom->hCom,&event,NULL);
    PurgeComm(rom->hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
	if(event==EV_BREAK)return 0;//成功
	else return 5;//错误
}

int Programer::ProgramFile(HFILE hFile)//写入一个可执行代码文件到FLASH
{
	return 0;//成功
}

⌨️ 快捷键说明

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