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

📄 main.c

📁 c8051f310xmodembootloader.rar
💻 C
字号:
//
//
//	CPU:   STC89C52RC
//  FOSC:  22.1184MHz
//  XRAM:  32K   @0x8000
//  FLASH: 512K  @0x2000
//
#include<reg52.h>
#include <string.h>
#include <intrins.h>
#include <stdio.h>
#include <absacc.h>
#include"FlashRam.h"
#include"xmodem.h"

extern unsigned char data FlashType;

int TimeTick;	// 定时计数器
int TimeSec;	// 秒
bit busy;

//STC89C52RC
sfr P4    = 0xE8;
//sfr AUXR  = 0x8E;
sfr WDTCR = 0xE1;

sbit led  = P1^4;
sbit rst_pin = P1^5;
							// -,-,EN_WDT,CLR_WDT,IDLE_WDT,PS2,PS1,PS0
//#define WDTCR_VAL	0x34	//       1      1        0       1  0   0
#define WDTCR_VAL   0x14


#define BAUD_128000_22118400	0xFFFB
#define BAUD_115200_22118400	0xFFFA

void dog(void)
{
	WDTCR = WDTCR_VAL;
}

void init(void)
{
	IE = 0;
	P0 = 0xFF;
	P1 = 0xFF;
	P2 = 0xFF;
	P3 = 0xFF;
	P4 = 0xFF;

	AUXR = 0x02;		// 禁用内部扩展RAM
	WDTCR = WDTCR_VAL; 	// 打开内部看门狗

	PCON = 0x80 | PCON;
						//RCAP2=65535 - Fosc/(32*Baud)
	RCAP2H=0xFF;		//115200BPS @ 22.1184MHz
	RCAP2L=0xFA;
	T2CON=0x34;
	SCON = 0x52;
//	ES = 1;
	TCON = 0x05;

	TMOD &= 0xf0;
	TMOD |= 0x01;
	//TH0 = (65535 - 36864)>>8;
	//TL0 = 65535 - 36864;
	TH0=TL0=0;
	//ET0 = 1;
	//TR0 = 1;

	//EA = 1;
}

void delay(int n)
{
	int a,b,c;
	for (a=0; a<n; a++)
	{
		for (b=0; b<5; b++)
		{
			led = 0;
			for(c=0; c<800; c++)dog();
			led = 1;
			for(c=0; c<8000; c++)dog();
		}
	}
}

void Mon_RstPin(void)
{
	rst_pin = 1;
	rst_pin = 1;
	if (!rst_pin)
	{
		IE = 0;
		for(;;);
	}
}


void main(void)
{
	unsigned char ctmp;
	init();

	delay(3);
	puts("\n\nFlash Programmer 1.00  <1K-xmodem>\n");

	puts("Test Flash.....");

	if (eepGetChipId())	// 检测FLASH存储器
	{
		switch(FlashType)
		{
			case SST28SF040A:
				puts("SST28SF040A\n");
				break;
			case SST29SF040:
				puts("SST29SF040");
				break;
			default:
				printf("UnKnow=%02bx\n",FlashType);
				break;
		}
	}
	else
	{
		puts("None Flash\n");
	}

	puts("\n \"s\" --- write a file to FLASH");
	puts("\n \"C\" --- read file from FLASH\n\n");
	delay(3);
	if(!led)
	{
		eepEraseChip();
		eepEraseSector(0);
		eepProgramByte(0,0);
		eepReadByte(0);
		eepWriteRam(0,0);
		Mon_RstPin();
	}

	while(1)
	{
		dog();
		ctmp = serial_get_char();
		if (ctmp == 'C')
		{
			led=0;
			xmodem_tx();
			fclose();
			led=1;
		}
		else if (ctmp == 's')
		{
			led=0;
			xmodem_rx();
			led=1;
		}
	}

	((void (code *)(void)) 0)();
}

//
void isr_ext0(void) interrupt 0
{
}

void isr_timer0(void) interrupt 1
{
	++TimeTick;

	if (TimeTick > 28 )
	{
		TimeTick=0;
		++TimeSec;
//		if(TimeSec>=60)
//		{
//			TimeSec=0;
//		}
		if (!busy)led = !led;
	}
	TF0=0;
}

void isr_ext1(void) interrupt 2
{

}

void isr_timer1(void) interrupt 3
{
}

void isr_uart(void) interrupt 4
{
}

⌨️ 快捷键说明

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