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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? f51mble2.a51

?? iap_sst89c58.zip:--------SST89C58/54單片機的iap在線編程/在線下載監控程序源程序(KC51)
?? A51
?? 第 1 頁 / 共 2 頁
字號:
;************************************************************************
;*									*
;*	       	  BOOTCODE (run-code) SUBROUTINES			*
;*									*
;************************************************************************ 

;************************************************************************ 
;
; Name:	SECTOR ERASE ROUTINE (IAP CMD: 0Bh)
;
;	ENTRY:   (1) Starting Address (on a Sector Boundary)
;			R4 = Address Byte High
;			R5 = Address Byte Low
;		 (2) Sector Count (in R6)
;
;	RETURNS:	FLAGS
;		 
;	DESTROYED:	R0, R4, R5, R6
;
; This routine erases the sector(s) requested, beginning from the 
; starting address provided.  Notification is returned to the PC indicating 
; success (FLAFS.2 = 0) or failure (FLAGS.2 = 1) of this operation.
;
;************************************************************************ 
			
sector_e:
	mov a, r4		; check if starting address in blk 0 or 1
	anl a, #11110000b	; mask for upper 4 bits
	cjne a, #0f0h, se_1	; jump if blk 1 sector
	mov r0, #SM_SIZE	; load small sector size for future use
       	sjmp se_st		; start sector erase

se_1:
	mov r0, #LG_SIZE	; load large sector size for future use

se_st:
	mov a, SFCF		; get SFCF
        orl a, #MC0             ; set VIS & IAPEN bits = 1
	mov SFCF, a		; ret. to SFCF, which enables 4K block & IAP
	mov SFAH, r4		; load high order address byte
	mov SFAL, r5		; load low order address byte

	clr EA			; disable all interrupts before sector erase
        
	mov SFCM, #SFCM_SE	; issue sector erase command

	nop
	nop
	nop

	acall done?		; wait for the sector erase operation
				;  to finish

	setb EA			; enable all interrupts
        
	jb err, se_e		; if timeout err detected, terminate
				;  the sector erase operation
        
	djnz COUNT, se_nxt	; check if all sectors processed
	
se_e:
	jnb TX, $
	clr TX
	mov a, FLAGS
	mov SBUF, a		; send FLAGS byte to PC
	nop

	ret			; return to calling routine
	
se_nxt:				; configure for next sector
	clr c
	mov a, r5
	add a, r0
	mov r5, a		; low-byte address updated for next sector
	mov a, r4
	addc a, #00h
	mov r4, a		; high-byte address updated for next sector
	sjmp se_st		; go erase next sector
		
;************************************************************************ 
;
; Name:	PROGRAM BYTE ROUTINE (IAP CMD: 0Eh)
;
;	INPUTS: (1) Starting Address
;			R4, DPH = AdrHi
;			R5, DPL = AdrLo
;		(2) Byte Count (in R6)
;
;	RETURNS: (1) Send FLAGS to PC after each byte been programmed
;		 (2) Send FLAGS to PC after count of sector byte completed
;		 
; This routine receives the Starting Address and Length of Bytes to 
; Write from the main loop.  It then writes the data bytes received 
; into the FlashFlex51 Block 0 flash memory program space. Notification  
; is returned to the PC indicating success (FLAFS.2 = 0) or failure  
; (FLAGS.2 = 1) of this operation.
;
;************************************************************************ 
	
program_b:	
       	jnb  RX, $		; wait for command from PC
        clr  RX			; clear receive flag
        mov  a, B		; get command from B register
        mov  PCDATA, a		; get next data byte from PC

	mov  a, SFCF		; get SFCF
        orl  a, #MC0            ; set VIS & IAPEN bits = 1
	mov  SFCF, a		; ret. to SFCF, which enables 4K block & IAP       
        mov  SFAH, DPH		; set address to write
        mov  SFAL, DPL
        mov  SFDT, PCDATA	; set data 
        mov  SFCM, #SFCM_PB	; issue program-byte cmd
        nop
        nop
        nop

        acall done?		; wait for command to complete
	jb   ERR, pb_e		; stop processing if error occurs

        inc  DPTR       	; point to next byte address to be written
        
	mov  a, FLAGS
	jnb  TX, $
        clr  TX
	mov  SBUF, a 		; tell PC via the FLAGS byte  
        nop
	djnz COUNT, program_b	; repeat loop until all data written

pb_1: 
	mov  a, SFST
        mov  STATUS, a
        jb   FBUSY, pb_1	; wait for last byte to be written
	sjmp pb_2

pb_e:
        mov  a, FLAGS
	jnb  TX, $
        clr  TX
	mov  SBUF, a 		; send error to PC 
        ret
pb_2:
	mov  a, FLAGS
	jnb  TX, $
        clr  TX
	mov  SBUF, a 		; send status after last byte
        nop
	nop

        ret			; return to calling routine


;************************************************************************ 
;
; Name:	VERIFY BYTE ROUTINE (IAP CMD: 0Ch)
;
;	INPUTS:	 (1) Starting Address
;			R4, DPH = Address Byte High
;			R5, DPL = Address Byte Low
;		 (2) Sector Byte Length (in R6)
;
;	RETURNS: SFDT = Last Data Read
;		
;	DESTROYED:  	R4, R5, R6
;		 
; This routine reads the code bytes beginning at the flash memory location
; requested, and sends each data byte read immediately to the PC.
;
; Note: No error message is returned to PC if a timeout error because 
; the PC knows the value to expect from the returned data, and it will
; perform its own processing on the data received.
;  
;************************************************************************ 

verify_b:
	mov a, SFCF		; get SFCF
        orl a, #MC0             ; set VIS & IAPEN bits = 1

	mov SFCF, a		; ret. to SFCF, which enables 4K block & IAP
       	mov SFAH, DPH		; load sfah with high address byte
	mov SFAL, DPL		; load sfal with low address byte

        mov SFCM, #SFCM_VB	; send verify byte command
	nop
	nop
	nop

	acall done?		; wait for command to complete
	mov a, SFDT			
	jnb TX, $
	clr TX			
	mov SBUF, a 		; send data byte to PC 

	inc DPTR		; point to next data byte
	djnz COUNT, verify_b	; next byte until count reaches zero

	ret			; return to calling routine

;************************************************************************ 
;
; Name:	BLOCK ERASE ROUTINE (IAP CMD: 0Dh)
;
;	ENTRY:   (1) Selecting lower block (block 0) Only
;			R4 = Address Byte High
;			R5 = Address Byte Low
;		 (2) Sector Count (in R6, not been used)
;
;	RETURNS:	FLAGS
;		 
;	DESTROYED:	R0, R4, R5, R6
;
; This routine erases block 0 Only. If a timeout condition is detected 
; during erase operation, then the FLAGS byte will be forwarded to the PC
; as notification of the error condition.
;
;************************************************************************ 
			
block_e:
	mov a, SFCF		; get SFCF
        orl a, #MC0             ; set VIS & IAPEN bits = 1
	mov SFCF, a		; ret. to SFCF, which enables 4K block & IAP

	mov a, r4		; check if starting address in blk 0 
	jz be_0			; jump if blk 0 needs to be erased
	sjmp be_er              ;  else jump to error routine
be_0:
	mov SFAH, #00h	
	mov SFDT, #55h		
	clr EA			; disable all interrupts before sector erase        
	mov SFCM, #SFCM_BE	; issue block erase command
	nop
	nop

	acall done?		; wait for the sector erase operation
				;  to finish
	setb EA			; enable all interrupts		
				
be_er:                          ; if timeout err detected, terminate
	jnb TX, $               ;  the sector erase operation
	clr TX                  ; send FLAGS byte to PC no matter detect
	mov a, FLAGS            ; error or not
	mov SBUF, a		
	nop
	nop

	ret			; return to calling routine

;************************************************************************ 
;
; Name:	BURST PROGRAM ROUTINE (IAP CMD: 06h)
;
;	INPUTS: (1) Starting Address
;			R4, DPH = AdrHi
;			R5, DPL = AdrLo
;		(2) Byte Count in a row (one-half of a sector)
;
;	RETURNS: FLAGS
;		 
; This routine receives the Starting Address and Length of Bytes to 
; Write from the main loop.  Each burst program can write a row or half
; of a sector.  The status of FLAGS is sent to PC after burst. 
;
;************************************************************************ 

burst_p:
	mov  a, SFCF		; get SFCF
        orl  a, #MC0            ; set VIS & IAPEN bits = 1
	mov  SFCF, a		; ret. to SFCF, which enables 4K block & IAP       
        mov  SFAH, DPH		; set address to write
        mov  SFAL, DPL
bp_1:
       	jnb  RX, $		; wait for command from PC
        clr  RX			; clear receive flag
        mov  a, B		; get command from B register
        mov  PCDATA, a		; get next data byte from PC
        mov  SFDT, PCDATA	; set data 
        mov  SFCM, #SFCM_BP	; issue burst-program cmd

        acall done_byte?	; wait for byte program to complete
        inc  DPTR       	; point to next byte address to be written
	inc  SFAL

	djnz COUNT, bp_1	; repeat loop until all data written
	acall done?		; wait for the burst program operation
				; to finish
					
	mov  a, FLAGS           ; Tell PC via the FLAGS byte. The ERR bit  
	jnb  TX, $              ; will be set if timeout error detected
        clr  TX
	mov  SBUF, a 		   
        nop

	ret

;************************************************************************ 
;       Poll BUSY/READY bit in SFST for every byte programmed		*
;************************************************************************

done_byte?:
	mov  a, SFST		; put SFST into ACC
	anl  a, #00001000b	; AND or masked SFST[3]
	cjne a, #Flash_Ready, done_byte? ; compare to 00h if not
				; equal do again
	ret

;************************************************************************ 
;
; Name:	SET SECURITY BIT ROUTINE (PSEUDO IAP CMD: 04h)
;
;	INPUTS:		PCDATA hold the security bit selection
;			    00h = security bit 1, execute IAP cmd 0Fh
;			    01h = security bit 2, execute IAP cmd 03h
;			    02h = security bit 3, execute IAP cmd 05h
;
;	RETURNS:	Nothing
;
; This routine will set the security bit selected to a logic 1.
;
; Note: No error message is returned to PC because the PC knows the lock
;  states to expect after a successful chip-reset. However, the PC needs 
;  to insert a short time delay between two consecutive routines of 
;  set-security-bit. The "byte-program" time, T-PB, of SSTC54/58 MCU is equal
;  to 110 micro-seconds; therefore, a delay time in PC for at least five 
;  milli-seconds is recommended.
;
;************************************************************************ 

security_lock:

	mov SFDT, #55h		; issue IAP command setup
	mov B, PCDATA		; load bit selection into B
	mov A, #5		; load A with multiplier
	mul AB			; determine jump table offset
	mov dptr, #scmd		; jump to designated security bit command
	jmp @A+dptr		;  based on table offset

scmd:	
	mov SFCM, #SFCM_SB1	; set security bit 1
	sjmp cmd_done

	mov SFCM, #SFCM_SB2	; set security bit 2
	sjmp cmd_done

	mov SFCM, #SFCM_SB3	; set security bit 3

cmd_done:
	mov a, SFST		; get status
	anl a, #M4		; mask for Flash Busy bit
	cjne a, #Flash_Ready, cmd_done	; repeat loop until programming cmd done
	nop

	ret

;************************************************************************
;*									*
;*	     CHECK WHETHER THE FLASH OPERATION IS COMPLETED	 	*
;*									*
;************************************************************************
;
; Maximum time in the done? subroutine = 0.42 seconds at a clock frequency
; of 11.0592 MHz.  For frequencies other than 11.0592 MHZ, the equation 
; for maximum time (in seconds) is 4.690992/f, where f = clock frequency 
; in MHz.
;
done?:  
        mov  r0, #255
      	
loadr1: mov  r1, #255      	
copy:   mov  a, SFST
        mov  STATUS, a
        jnb  FBUSY, ready	; polling SFST[2] for command completion
        djnz r1, copy  
 	
        djnz r0, loadr1
	setb err          	; indicates timeout error of the operation
        ret

ready:  clr  err
        ret

;************************************************************************
;*									*
;*    	      BOOTCODE SERIAL INTERRUPT SERVICE ROUTINE			*
;*									*
;************************************************************************

	org 0F380H

bsl_rs232:
  
       	push ACC
       	jbc  RI, rxdpc
        clr  TI
        setb TX         	; set flag for sent data to PC
        pop  ACC
        reti

rxdpc:  setb RX         	; set flag for received data from PC
        mov  a, SBUF
        mov  B,a        	; save in B register
        clr  TX         	; clear transmit flag
        mov  SBUF,a     	; resend to PC for comparison
       	pop  ACC
        reti
;=======================
        ajmp loop		; software trap
        nop
        nop
        nop
        ajmp loop		; software trap

;************************************************************************
;*                                                                      *
;*  Instruction that changes the re-mapping should be in the portion of *
;*  memory that is not affected by the re-mapping change.               *
;*  The current BSL code reqires 1 Kbyte of flash memory re-mapped.     *
;*                                                                      *
;************************************************************************

	org 0F400h                

usercode:
	anl  SFCF, #0FCh	; Deactivate memory re-mapping and long 
        ljmp USR_SECT0		;  jump to user reboot routine at 0000h 
				:  of block 0 

;=======================
        END


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本电影亚洲天堂一区| 国产精品午夜久久| 国产精品美女久久久久av爽李琼 | 亚洲第一av色| 成人中文字幕电影| 国产精品伦理在线| 久久66热re国产| 欧美日韩成人高清| 亚洲免费av高清| 国产.精品.日韩.另类.中文.在线.播放| 欧美日韩精品一区二区在线播放| 1000部国产精品成人观看| 国产精品88av| 欧美一级片在线看| 亚洲成在人线在线播放| 97久久精品人人澡人人爽| 国产精品色眯眯| 国产91精品入口| 久久免费视频一区| 狠狠久久亚洲欧美| 久久综合色婷婷| 麻豆91精品视频| 精品捆绑美女sm三区| 久久疯狂做爰流白浆xx| 欧美高清精品3d| 日韩福利视频导航| 欧美一区二区视频在线观看2020 | 一区二区三区精品| 一本一本久久a久久精品综合麻豆| 国产亚洲欧美激情| 大陆成人av片| 国产精品久久久久毛片软件| 成人av免费在线| √…a在线天堂一区| 色妞www精品视频| 亚洲国产欧美一区二区三区丁香婷| 99精品国产视频| 日韩av网站免费在线| 日韩精品一区二区三区在线| 国内外成人在线视频| 国产日韩欧美一区二区三区综合| 国产精品91一区二区| 中文字幕一区二区三区不卡在线| 99久久精品免费| 亚洲午夜免费电影| 欧美一区二区三区四区五区| 精品一区二区三区日韩| 国产精品电影院| 欧美久久高跟鞋激| 国产资源精品在线观看| 亚洲欧洲韩国日本视频| 欧美影院精品一区| 六月丁香婷婷久久| 成人免费在线视频观看| 欧美日本高清视频在线观看| 国产一区视频在线看| 亚洲人午夜精品天堂一二香蕉| 色88888久久久久久影院野外| 日韩综合在线视频| 国产欧美va欧美不卡在线| 色一情一伦一子一伦一区| 日本午夜一区二区| 欧美激情一区在线观看| 欧美性猛交xxxxxx富婆| 精品亚洲aⅴ乱码一区二区三区| 国产精品嫩草久久久久| 制服丝袜亚洲精品中文字幕| 欧美日韩卡一卡二| 黑人巨大精品欧美一区| 亚洲自拍另类综合| 久久综合一区二区| 欧美综合一区二区| 国产成人无遮挡在线视频| 亚洲国产综合在线| 国产欧美日韩不卡| 91精品国产一区二区三区| 成人午夜短视频| 奇米一区二区三区av| 一区二区三区毛片| 欧美国产一区在线| 精品久久人人做人人爽| 欧美午夜片在线看| 成人免费毛片a| 蜜桃久久久久久久| 亚洲一区二区三区美女| 国产精品久线在线观看| 久久午夜电影网| 日韩欧美一区二区久久婷婷| 在线观看国产91| 99这里只有久久精品视频| 久久成人综合网| 午夜精品视频一区| 一区二区三区四区国产精品| 中文字幕高清一区| 26uuu国产日韩综合| 3atv在线一区二区三区| 欧洲中文字幕精品| 色综合久久中文字幕综合网| 处破女av一区二区| 欧美伊人久久久久久久久影院| 懂色av一区二区三区免费观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲精品乱码久久久久久| 国产精品人妖ts系列视频| 久久久久亚洲蜜桃| 久久亚洲一级片| 欧美精品一区二区蜜臀亚洲| 欧美一区二区播放| 日韩一区二区三区免费看| 欧美日韩国产一二三| 欧美日韩视频在线一区二区| 欧美在线观看视频一区二区| 9色porny自拍视频一区二区| 成人18视频在线播放| 国产福利一区二区三区视频在线| 国产呦萝稀缺另类资源| 国产成人亚洲综合a∨婷婷图片 | 亚洲国产精品久久久久秋霞影院| 亚洲欧美综合色| 国产精品久久久久四虎| 国产精品卡一卡二卡三| 中文字幕中文字幕一区| 亚洲三级久久久| 亚洲一区二区三区影院| 亚洲第一激情av| 奇米色777欧美一区二区| 国产在线播精品第三| 国产福利91精品一区| 波多野结衣亚洲一区| 在线一区二区三区做爰视频网站| 欧美最猛黑人xxxxx猛交| 91麻豆精品久久久久蜜臀| 日韩欧美另类在线| 欧美激情一区在线观看| 一区二区日韩av| 精品中文字幕一区二区小辣椒| 国产不卡一区视频| 在线观看av不卡| 精品国产一区二区在线观看| 国产精品久久久久久福利一牛影视| 亚洲女女做受ⅹxx高潮| 免费观看成人av| 成人丝袜视频网| 欧美日韩精品欧美日韩精品一综合| 日韩欧美国产综合在线一区二区三区| 国产亚洲欧美中文| 亚洲一区二区在线视频| 精品亚洲国内自在自线福利| 97久久超碰国产精品| 正在播放亚洲一区| 国产精品日产欧美久久久久| 图片区小说区区亚洲影院| 丁香婷婷综合网| 欧美精品在欧美一区二区少妇| 精品久久久久久久久久久久包黑料 | 中文字幕乱码日本亚洲一区二区| 亚洲黄色性网站| 卡一卡二国产精品 | 欧美一级夜夜爽| 国产精品第13页| 久久99久国产精品黄毛片色诱| 91蜜桃网址入口| 久久网这里都是精品| 五月天激情综合网| 成人av电影观看| 精品国产乱码久久久久久牛牛| 一区二区在线免费观看| 国产一二三精品| 91精品欧美一区二区三区综合在 | 欧美久久久久中文字幕| 日韩一区欧美一区| 国产91在线观看| 日韩欧美一级特黄在线播放| 一区二区欧美视频| 成人激情午夜影院| wwwwxxxxx欧美| 日韩av在线发布| 91免费看片在线观看| 国产精品久久久一本精品 | 欧美在线观看视频在线| 国产精品免费丝袜| 国产99久久久久| 精品国产制服丝袜高跟| 美女视频黄免费的久久| 欧美日韩五月天| 午夜精品久久久久久| 日本高清不卡一区| 一区二区三区在线视频观看| 99re免费视频精品全部| 国产欧美日韩在线视频| 韩国精品主播一区二区在线观看| 91精品国产综合久久精品| 亚洲高清中文字幕| 欧美日韩和欧美的一区二区| 亚洲午夜国产一区99re久久| 欧美在线观看一区| 亚洲18影院在线观看| 欧美日韩你懂得| 三级影片在线观看欧美日韩一区二区| 99久久国产综合精品麻豆|