亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bootldr.c

?? Hitech microchip PIC C18 Compiler
?? C
字號:
/* * 18Fxxx BOOT LOADER Copyright (C) 2002 HI-TECH Software *	This software is freely distributable and may be used *	for any purpose. No warranty of any kind is provided *	and all use is entirely at your own risk. *	 */#pragma psect text=bootldr #include <pic18.h>#include "bootldr.h"#if defined(MPLAB_ICD)__CONFIG(4,DEBUGEN & LVPDIS);	// required ICD2 settings__CONFIG(6,UNPROTECT);		// enable writing to flash#else__CONFIG(6,WPB & UNPROTECT);	// bootloader self protection#endif#if _ERRATA_TYPES & ERRATA_4000  #error Command line option --errata=default,-4000 must be specified when compiling this code for this device.#endif/* Function prototypes */void checksum(void);void putch(unsigned char);void puts(const char *s);unsigned char gx(void);unsigned char g2x(void);void zap(void);void table_write(void);void flash8(void);void clear_buffer(void);persistent near unsigned char buff[_FLASH_WRITE_SIZE];	/* Internal buffer used for writing to program memory */persistent near unsigned char DO_NOT_INCREMENT;persistent near unsigned char cksum,rectype,bcount;persistent near unsigned char delay_time;persistent near unsigned char index;persistent near unsigned short erase;#ifdef VERBOSEpersistent near unsigned char START_MSG[] = "HI-TECH Software (C)2002\n";persistent near unsigned char DOWNLOAD_MSG[] = "\rDownload-";#endif#asmpsect intcode	// redirect interrupts to new routine addresses	goto	PROG_START+8	#ifndef VERBOSE/* Sqeeze the checksum function in between the ISR redirection * instructions for even tighter code! * Will not fit if VERBOSE mode is enabled, in which case * the C version will be used. */global _checksum_checksum:	call	_g2x		// read the checksum byte	movf	_cksum,w	btfss	status,2,c	// if it doesn't add up...	reset			// reset	return#endif	psect intcodelo	// redirect low priority interrupts to new routine addresses	goto	PROG_START+0x18#endasm/* putch() - outputs 1 byte to the serial port */#ifdef VERBOSEvoidputch(unsigned char byte){	while(!TRMT);	/* set when register is empty */	TXREG = byte;	/* output one byte */}/* Output a string via the serial port */voidputs(const char *s){		while(s && *s)				putch(*s++);	}/* check the checksum  * NOTE: if not in verbose mode, the code will use the even more compact * assembler version of the checksum() function defined above. */voidchecksum(void){	g2x();	if(cksum)	// if checksum does not add to zero, bad check, reset		RESET();	putch('\r');	// echo each hex record on a new line}	#endif/* Get a 4 bit HEX number from the serial port */unsigned chargx(void){	while(!RCIF);	EEDATA=RCREG;#ifdef VERBOSE	if(!TRMT)		// Echo RX nibbles to output. If high speed RX, some 		TXREG=EEDATA;	// nibbles mightn't be TXed but will still be programmed.#endif	if(EEDATA>='A')		return ((EEDATA - (unsigned char)'A')+10);	return (EEDATA - '0');}/* recieve a hexadecimal byte, add it to the checksum */unsigned char g2x(void){	unsigned char temp = (gx()<<4);	temp += gx();	cksum+=temp;	return temp;}/* Initiate a write to memory */voidzap(void){	WREN=1;	EECON2=0x55;	EECON2=0xAA;	WR=1;	NOP();	while(WR);	WREN=0;}/* transfer a byte from RAM to internal flash register(s) */voidtable_write(void){	if(DO_NOT_INCREMENT)	// address is already loaded in TBLPTR, no pre-increment needed		asm("tblwt*");	else		asm("tblwt+*");	// otherwise TBLPTR must be pre-incremented	DO_NOT_INCREMENT=0;}/* Commit the internal buffer to flash */voidflash8(void){	if(DO_NOT_INCREMENT)		TBLPTRL&= ~(_FLASH_WRITE_SIZE-1);	// point to start of flash panel	for(index=0;index<_FLASH_WRITE_SIZE;)	{			TABLAT = buff[index++];		table_write();	}	zap();}voidclear_buffer(void){	unsigned char x;	for(x=sizeof(buff);x--;){		buff[x]=FILL_BYTE;	// initialize buffer with known values	}}voidmain(void){#if _ERRATA_TYPES & ERRATA_TBLWTINT 	PIE1=0;	// as per the errata document for these parts#endif	init_comms();	// sets up the serial port for communication/* Bootloader waits for a specified time. If the serial port gets no response in *//* this time, execution of existing program begins. */#ifdef VERBOSE	puts(START_MSG);#else	TXREG='\n';#endif	// Some devices' errata require these registers to be cleared	INTCON3=0;	// Also serves to disable interrupts	PIE2=0;	INTCON=0;	T0CON = 0x94;	// use timer to give ~1 second delays	for(delay_time=BOOT_TIMEOUT; delay_time ; --delay_time)	{		if (RCIF)			break;#ifdef VERBOSE	/* display a countdown for user response */		puts(DOWNLOAD_MSG);		putch('0'+delay_time);#else		TXREG=('0'+delay_time);		while(!TRMT);		TXREG='\r';#endif		while(!TMR0IF);	// pause for timer 0 timeout		TMR0IF=0;	}	T0CON=0xFF;	// disable timer again	if (!RCIF)	/* if no hex file to download, resume normal program */	{		(*((void(*)(void))PROG_START))();	}	TXREG=':';	// the prompt to invite you to download a new program	TBLPTRU=0;	erase=PROG_START;	/* Clear program memory prior to program download */	while(1)	{		TBLPTRL=(unsigned char)erase;		TBLPTRH=(unsigned char)(erase>>8);		EECON1=0x90;	// set up for flash erasure		zap();		erase+=_FLASH_ERASE_SIZE;#if defined(UPPER_ADDRESS_BYTE)	// cases where top of memory greater than 10000h		if(erase==0)			TBLPTRU++;		if(TBLPTRU==UPPER_ADDRESS_BYTE)	// continues to next "if" or "break"#endif#if !defined(UPPER_ADDRESS_BYTE) || (MEM_TOP!=0)		if(erase==MEM_TOP)	// for MEM_TOPs like 20000h, don't need to test lower 0000h#endif			break;	}#ifdef UPPER_ADDRESS_BYTE	TBLPTRU=0;#endif/* receive a hex file via the serial port and write it to program memory */	for(;;)		// loop until end of file	{		while (RCREG!=':');		// wait for start of hex file line #ifdef VERBOSE		putch(':');#endif				cksum = bcount = g2x();		// get the byte count #if _EEPROMSIZE > 256		EEADRH = TBLPTRH = g2x();		// get the address#else		TBLPTRH = g2x();#endif		TBLPTRL = EEADR = g2x();				DO_NOT_INCREMENT = 1;		rectype = g2x();	// get the record type 				switch(rectype)		{			case DATA:	// data record #if (PROG_START > 0x200) || defined(__PIC18FX520)	// to protect bootloader from being overwritten				if( (FLASH) && (TBLPTRU==0) && (TBLPTRH < (unsigned char)(PROG_START>>8)) )	// to protect bootloader from being overwritten					break;		// if bootloader address range is threatened, skip this record#endif			clear_buffer();				while(bcount--)				{						TABLAT = EEDATA = buff[(EEADR&(_FLASH_WRITE_SIZE-1))] = g2x();	// get the data					if((CONFIG)||(EEPROM))					{						if(CONFIG)	// EEPROM/config. bytes are written one byte at a time							table_write();						zap();					}					else						if((EEADR & (_FLASH_WRITE_SIZE-1)) == (_FLASH_WRITE_SIZE-1))	// program/IDLOCs are flashed x bytes at a time						{							flash8();							clear_buffer();						}					EEADR++;				}					if(((EEADR&(_FLASH_WRITE_SIZE-1))!=0)&&(FLASH))                                        flash8();				checksum();				break;			case END:	// end of hex file				checksum();				TXREG=')';				(*((void(*)(void))PROG_START))(); // jump to new program 				break;			case EXTEND_ADDRESS:	// extended address record				while(bcount--)				{					EEADR=g2x();	// this byte determines whether EE, Config or ID data				}								EEPGD=1;				if(EEADR==0xF0)					EEPGD=0;	// select for EEPROM									CFGS=0;				if((EEADR&0xF0)==0x30)					CFGS=1;		// select for config write									TBLPTRU=EEADR;				checksum();				break;		}	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
正在播放亚洲一区| 免费xxxx性欧美18vr| 国产a久久麻豆| 欧美一级在线观看| 午夜电影一区二区三区| 波多野结衣中文字幕一区 | 一区二区三区四区在线播放| 福利91精品一区二区三区| 精品盗摄一区二区三区| 免费视频一区二区| 精品久久久久久久人人人人传媒| 亚洲国产综合色| 在线视频你懂得一区二区三区| 国产精品久久久久7777按摩| 成人av在线资源| 综合欧美一区二区三区| 91官网在线观看| 日本中文字幕一区| 日韩欧美不卡一区| 国产乱码精品1区2区3区| 国产人成一区二区三区影院| 99视频国产精品| 蜜桃一区二区三区在线| 欧美日韩亚洲综合在线| 国产视频一区二区三区在线观看 | 色先锋资源久久综合| 亚洲精品老司机| 91麻豆免费看| 麻豆高清免费国产一区| 国产精品视频一二| 欧美一区三区二区| 成人福利视频在线| 日本欧美在线观看| 中文字幕一区二区三| 日韩一区二区高清| 成a人片亚洲日本久久| 奇米888四色在线精品| 国产精品久久一级| 2024国产精品| 欧美精品第1页| 91网站最新网址| 国产精品1024| 国产一区二三区好的| 午夜欧美在线一二页| 欧美一级黄色录像| 欧美怡红院视频| 福利一区福利二区| 老司机一区二区| 午夜精品福利视频网站| 欧美国产国产综合| 国产精品免费aⅴ片在线观看| 欧美私模裸体表演在线观看| 99精品桃花视频在线观看| 九色|91porny| 国产一区视频网站| 久久99精品国产麻豆婷婷| 秋霞电影网一区二区| 日精品一区二区三区| 首页亚洲欧美制服丝腿| 日日摸夜夜添夜夜添国产精品| 亚洲一区视频在线| 日产精品久久久久久久性色| 日本不卡一区二区| 亚洲欧美视频一区| 亚洲第一二三四区| 日韩成人午夜电影| 久久av资源网| 成人性生交大片免费看中文| 91女人视频在线观看| 欧美体内she精高潮| 91精品国产欧美一区二区成人| 日韩一区二区在线看| 国产精品无遮挡| 亚洲超丰满肉感bbw| 久色婷婷小香蕉久久| 成人成人成人在线视频| 欧美一a一片一级一片| 精品乱码亚洲一区二区不卡| 国产精品欧美久久久久无广告| 国产精品成人在线观看| 日韩高清一区二区| 成人免费视频视频| 日韩欧美国产一二三区| 1000部国产精品成人观看| 奇米影视一区二区三区小说| 成人短视频下载| 欧美一级黄色片| 亚洲图片自拍偷拍| 99综合电影在线视频| 欧美一区欧美二区| 精品一区二区三区欧美| 成人污污视频在线观看| 欧美精品欧美精品系列| 洋洋av久久久久久久一区| 国产精品第四页| 国产成人免费视频精品含羞草妖精| 在线免费观看视频一区| 最新高清无码专区| 波多野结衣欧美| 久久久亚洲午夜电影| 国产一区二区主播在线| 日韩午夜在线观看| 看国产成人h片视频| 91精品视频网| 日本在线播放一区二区三区| 欧美丝袜第三区| 午夜精品福利在线| 欧美日本在线观看| 久久精品99国产精品日本| 日韩一区二区三区高清免费看看| 日本在线观看不卡视频| 精品国产三级电影在线观看| 麻豆国产精品一区二区三区| 欧美一级高清大全免费观看| 日本免费在线视频不卡一不卡二| 日韩免费观看高清完整版在线观看| 欧美a一区二区| 国产亚洲一本大道中文在线| fc2成人免费人成在线观看播放 | 久久综合999| 91在线视频播放地址| 亚洲综合偷拍欧美一区色| 91麻豆精品国产| 国产suv精品一区二区883| 亚洲在线视频网站| 2021国产精品久久精品| 在线影视一区二区三区| 麻豆视频一区二区| 一区二区三区四区激情| 精品久久一二三区| 欧美性色aⅴ视频一区日韩精品| 日本不卡123| 亚洲午夜免费视频| 国产女人18毛片水真多成人如厕| 欧美三级中文字| 成人网页在线观看| 另类专区欧美蜜桃臀第一页| 最近中文字幕一区二区三区| 久久九九99视频| 日韩免费成人网| 欧美精品国产精品| 在线观看亚洲一区| 色综合av在线| 97久久超碰国产精品| 国产精品99久久久久久有的能看| 亚洲一区二区三区中文字幕在线| 中文字幕在线视频一区| 日韩免费视频一区二区| 精品欧美黑人一区二区三区| 7878成人国产在线观看| 欧美区视频在线观看| 欧美老人xxxx18| 91精品久久久久久久91蜜桃| 欧美剧情电影在线观看完整版免费励志电影| 成人污视频在线观看| 97久久精品人人做人人爽| jlzzjlzz欧美大全| 欧美日韩国产天堂| 日韩亚洲欧美在线观看| 26uuu国产一区二区三区| 久久精品一区二区| 亚洲人成精品久久久久| 亚洲综合一区二区三区| 天天影视涩香欲综合网| 麻豆一区二区三| 99久久er热在这里只有精品15| 91国产免费观看| 日韩欧美黄色影院| 国产精品毛片大码女人| 亚洲午夜在线电影| 国产一区二区看久久| 国产精品18久久久久久久久 | 制服丝袜亚洲网站| 欧美一区二区三区婷婷月色 | www.日韩在线| 99国产一区二区三精品乱码| 在线日韩国产精品| 欧美一级日韩免费不卡| 精品捆绑美女sm三区| 亚洲欧美一区二区三区极速播放 | 亚洲柠檬福利资源导航| 蜜桃免费网站一区二区三区| 国产福利一区二区三区| 色欲综合视频天天天| 欧美精选午夜久久久乱码6080| 日韩三级免费观看| 综合久久综合久久| 午夜精品久久久久久久蜜桃app| 亚洲高清免费视频| 成人黄色电影在线 | 精品乱人伦一区二区三区| 亚洲一区二三区| 成人激情免费网站| 精品国精品国产| 久久99在线观看| 欧美日韩综合在线| 中文字幕一区免费在线观看| 国产精品中文字幕日韩精品| 欧美日韩精品免费观看视频| 欧美极品美女视频|