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

📄 e2emu.c

📁 msc1201 编程3
💻 C
字号:
#include "REG1210.H"
#define OneMsConst	(1843-1)
#define OneUsConst	(2-1)
//#define OneMsConst	(22118-1)
//#define OneUsConst	(22-1)
#define FDM				1			// Flash Data Memory
#define FPM				0			// Flash Program Memory
#define CR				0x0a
#define LF				0x0d
#define BS				0x08
extern void autobaud(void);
extern char faddr_data_read(char);
extern void put_string(char code *string);
extern void putcr(void);
extern void tx_byte(char);
extern char rx_byte_echo(void);
extern char page_erase (int faddr, char fdata, char fdm);
extern char write_flash_chk (int faddr, char fdata, char fdm);
sbit P17 = P1^7;
char rmw(unsigned char faddr, unsigned char fdata) //read-modify-write FDM
{  unsigned char i,c;
	unsigned char xdata * ptr;
	unsigned char xdata * bufptr;
	P17=!P17;
	page_erase(0x0400, 0xff, FDM); 	// temp buf 0x400~0x047f
	P17=!P17;
	ptr = 0x0480;							// source page begin adr
	bufptr=0x0400;
	// backup target page to temp buf
	for (i=0; i<128; i++) write_flash_chk(bufptr++,*ptr++,FDM);
	P17=!P17;
	page_erase(0x0480, 0xff, FDM); 	// erase destination page
	P17=!P17;
	write_flash_chk((unsigned int)(0x0480+faddr),fdata,FDM);
	bufptr=0x0400;							// source page
	ptr= 0x0480;							// destination page
	for (i=0; i<128; i++) {
		if (i==faddr)c=fdata; else c=*bufptr;
		write_flash_chk((unsigned int)(0x0480+i),c,FDM); 
		bufptr++;
	}
	P17=!P17;
}
void main(void)
{	
	unsigned char xdata * msgptr;
	unsigned char xdata * ptr;
	char i,c, cursor_ptr;
	CKCON &= 0xf8; 	// 0 MOVX cycle stretch
	PDCON &= 0x0ed;	//turn on tone gen & sys timer
	//Flash Related Timer Setup
	USEC = OneUsConst;
	MSEC = OneMsConst;  
	FTCON=0xa5;
   T2CON  = 0x34;   // T2 as baudrate generator 
   RCAP2  = 65535;  // 57600 Baud @ 1.8432MHz
//   RCAP2  = 65524;  // 57600 Baud @ 22.1184MHz
   SCON   = 0x52;   // Async mode 1, 8-bit UART, enable rcvr, TI=1, RI=0
	put_string("\x1b[46;37m\x1b[25C\x1b[2JMSC1210 E2PROM Emulation\nAny key to start:");
	while(RI==0) {;} // get a key	
	RI=0;	
	put_string("\x1b[2;1HInput message:      ");
	msgptr=0x0480;
	while(1) {
		ptr=msgptr;
		put_string("\x1b[3;1H'"); //set cursor
		for (i=0; i<128; i++) tx_byte(*ptr++);
		put_string("'\x1b[2;15H"); 
		while(RI==0) {;} // get a key		
		c=rx_byte_echo();
		if (c==CR || c==LF) cursor_ptr=0;
		else if (c==BS) {cursor_ptr--; rmw(cursor_ptr,' ');}
		else rmw(cursor_ptr++,c);
		if (cursor_ptr<0) cursor_ptr=0;
	}		
}

⌨️ 快捷键说明

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