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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? avr235.asm

?? AVR單片機(jī)CRC校驗(yàn)子程序
?? ASM
字號(hào):
;**** A P P L I C A T I O N   N O T E   A V R 236 ************************
;*
;* Title:		CRC check of program memory
;* Version:		1.0
;* Last updated:	98.06.15
;* Target:		AT90Sxxxx (All AVR Devices with LPM instr, not AT90S1200)
;*
;* Support E-mail:	avr@atmel.com
;*
;* NOTE: Always check out Atmels web site, www.atmel.com for the latest and updated 
;* version of the software.
;*
;* DESCRIPTION
;* This application note describes how to perform CRC computation 
;* of code memory contents using a simple algoritm. 
;* To generate CRC checksum load the register "status" with 00 and call the routine 
;* "crc_gen". The resulting checksum is placed in the registers
;* byte2(low byte) and byte3(high byte).
;*
;* To check the CRC checksum load the register "status" with FF and call the routine 
;* "crc_gen". The resulting checksum is placed in the registers
;* byte2(low byte) and byte3(high byte). If the checksum is 00 the program code is
;* correct, if the checksum is non-zero an error has been introduced in the program code
;**************************************************************************


.include "..\8515def.inc"
.device AT90S8515

;***** Constants

.equ 	PROGSIZE 	= 0x1FFF	; Size of program memory(bytes)
.equ	CR		= 0x8005	; CRC divisor value

;**************************************************************************
;*
;*      PROGRAM START - EXECUTION STARTS HERE
;*
;**************************************************************************

;        .cseg

        .org $0000
        rjmp RESET      ;Reset handle


;***************************************************************************
;*
;* "crc_gen" - Generation and checking of CRC checksum
;*
;* This subroutine generates the checksum for the program code.
;* 32 bits are loaded into 4 register, the upper 16 bits are XORed
;* with the divisor value each time a 1 is shifted into the carry flag 
;* from the MSB.
;*
;* If the status byte is 0x00,the routine will generate new checksum:
;* After the computing the code 16 zeros are
;* appended to the code and the checksum is calculated. 
;* 
;* If the status byte is different from 0X00, the routine will check if the current checksum is valid.
;* After the computing the code the original checksum are
;* appended to the code and calculated. The result is zero if no errors occurs
;* The result is placed in registers byte2 and byte3
;*  
;* Number of words	:44 + return
;* Number of cycles	:program memory size(word) * 175(depending on memory contens)
;* Low registers used	:6 (byte0,byte1,byte2,byte3)
;* High registers used  :7 (sizel,sizeh,crdivl,crdivh,count,status,zl,zh)	
;*
;***************************************************************************

;***** Subroutine Register Variables

.def	byte0	= r0		; Lower byte of lower word
.def	byte1	= r1		; Upper byte of lower word
.def	byte2	= r2		; Lower byte of upper word
.def	byte3	= r3		; Upper byte of upper word
.def	crc	= r4		; CRC checksum low byte
.def	crch	= r5		; CRC checksum high byte
.def	sizel 	= r17		; Program code size register
.def	sizeh 	= r18
.def	crdivl	= r19		; CRC divisor register
.def	crdivh	= r20
.def 	count	= r21		; Bit counter 
.def	status	= r22		; Status byte: generate(0) or check(1)

crc_gen:ldi 	sizel,low(PROGSIZE) 	;Load end of program memory address
	ldi 	sizeh,high(PROGSIZE)	
	clr 	zl			;Clear Z pointer
	clr 	zh				
	ldi 	crdivh,high(CR)		;Load divisor value
	ldi	crdivl,low(CR)
	lpm				;Load first memory location
	mov	byte3,byte0		;Move to highest byte
	adiw 	zl,0x01			;Increment Z pointer
	lpm				;Load second memory location
	mov	byte2,byte0		

new_word:cp	zl,sizel		;Loop starts here
	cpc	zh,sizeh		;Check for end of code
	brge	end			;Jump if end of code
	adiw 	zl,0x01			
	lpm				;Load high byte
	mov	byte1,byte0		;Move to upper byte
	adiw	zl,0x01			;Increment Z pointer
	lpm				;Load program memory location
	rcall 	rot_word		;Call the rotate routine
	rjmp 	new_word

end:	;ret	;uncomment this line if checksum is stored in last flash memory address.
	ldi    	count,0x11		
	cpi    	status,0x00		
	brne   	check
        clr    	byte0			;Append 16 bits(0x0000) to
        clr    	byte1			;the end of the code for CRC generation
	rjmp   	gen	
check:	mov    	byte0,crc		;Append the original checksum to
        mov    	byte1,crch    		;the end of the code for CRC checking
gen:	rcall  	rot_word		;Call the rotate routine
	mov    	crc,byte2		
	mov    	crch,byte3
	ret				;Return to main prog
	
rot_word:ldi	count,0x11
rot_loop:dec 	count			;Decrement bit counter
	breq	stop			;Break if bit counter = 0
	lsl	byte0			;Shift zero into lowest bit
	rol	byte1			;Shift in carry from previous byte
	rol	byte2			;Preceede shift
	rol	byte3			
	brcc	rot_loop		;Loop if MSB = 0			
	eor 	byte2,crdivl
	eor 	byte3,crdivh		;XOR high word if MSB = 1
	rjmp	rot_loop
stop:	ret

;***************************************************************************
;* 
;* EERead_seq
;*
;* This routine reads the 
;* EEPROM into the global register variable "temp".
;*
;* Number of words	:4+ return
;* Number of cycles	:8 + return 
;* High Registers used	:4 (temp,eeadr,eeadrh,eedata)
;*
;***************************************************************************

.def	temp    = r16 
.def	eeadr	= r23
.def	eeadrh	= r24
.def	eedata	= r25

;***** Code

eeread:
	out	EEARH,eeadrh	;output address high byte
	out	EEARL,eeadr	;output address low byte
	sbi	EECR,EERE	;set EEPROM Read strobe
	in	eedata,EEDR	;get data
	ret

;***************************************************************************
;* 
;* EEWrite
;*
;* This subroutine waits until the EEPROM is ready to be programmed, then
;* programs the EEPROM with register variable "EEdwr" at address "EEawr"
;*
;* Number of words	:7 + return
;* Number of cycles	:13 + return (if EEPROM is ready)
;* Low Registers used	:None
;* High Registers used:	;4 (temp,eeadr,eeadr,eedata)
;*
;***************************************************************************

.def	temp    = r16 
.def	eeadr	= r23
.def	eeadrh	= r24
.def	eedata	= r25

eewrite:sbic	EECR,EEWE	;If EEWE not clear
	rjmp	EEWrite		;    Wait more
	out	EEARH,eeadrh	;Output address high byte
	out	EEARL,eeadr	;Output address low byte
	out	EEDR,eedata	;Output data
	sbi	EECR,EEMWE
	sbi	EECR,EEWE	;Set EEPROM Write strobe
	ret


;************************************************************************
;*
;*  Start Of Main Program
;*
.cseg
.def	crc     = r4		;Low byte of checksum to be returned
.def	crch	= r5		;High byte of checksum to be returned
.def	temp    = r16  
.def	status	= r22		;Status byte: generate(0) or check(1)
.def	eeadr	= r23
.def	eeadrh	= r24
.def	eedata	= r25

RESET:	ldi	r16,high(RAMEND) ;Initialize stack pointer	
	out	SPH,r16	         ;High byte only required if 
	ldi	r16,low(RAMEND)	 ;RAM is bigger than 256 Bytes
	out	SPL,r16

	ldi 	temp,0xff	
	out 	DDRB,temp	;Set PORTB as output
	out 	PORTB,temp	;Write 0xFF to PORTB
	clr 	status		;Clear status register, prepare for CRC generation
	rcall 	crc_gen
	
	ldi 	eeadr,0x01	;Set address low byte for EEPROM write
	ldi 	eeadrh,0x00	;Set address high byte for EEPROM write
	mov 	eedata,crc	;Set CRC low byte in EEPROM data
	rcall	eewrite		;Write EEPROM

	ldi 	eeadr,0x02	;Set address low byte for EEPROM write
	ldi 	eeadrh,0x00	;Set address high byte for EEPROM write
	mov 	eedata,crch	;Set CRC high byte in EEPROM data
	rcall	eewrite		;Write EEPROM

	out 	PORTB,crc	;Output CRC low value to PORTB
	
mainloop:sbic	EECR,EEWE	;If EEWE not clear
	rjmp	mainloop	;    Wait more

;********** Insert program code here *************



	ldi 	eeadr,0x01	;Set address low byte for EEPROM read
	ldi 	eeadrh,0x00	;Set address high byte for EEPROM read
	rcall	eeread		;Read EEPROM
	mov 	crc,eedata	;Read CRC low byte from EEPROM

	ldi 	eeadr,0x02	;Set address low byte for EEPROM read
	ldi 	eeadrh,0x00	;Set address high byte for EEPROM read
	rcall	eeread		;Read EEPROM
	mov 	crch,eedata	;Read CRC low byte from EEPROM

	ser	status		;Set status register, prepare for CRC checking
	rcall 	crc_gen

loop:	out	PORTB,crc	;Output CRC low value to PORTB
	rjmp 	loop

.exit

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草热8精品视频在线观看| 免费看欧美美女黄的网站| 制服丝袜亚洲精品中文字幕| 国产成人午夜精品5599 | 亚洲欧洲日产国码二区| 欧美久久久久久久久中文字幕| 成人激情免费视频| 日本色综合中文字幕| 亚洲老妇xxxxxx| 久久久久一区二区三区四区| 欧美精品自拍偷拍动漫精品| 一本到一区二区三区| 国产传媒一区在线| 久久精品国产精品亚洲红杏| 亚洲图片欧美色图| 亚洲欧美一区二区三区久本道91| 欧美videofree性高清杂交| 欧美在线你懂得| av激情综合网| 国产精品一二三四区| 理论片日本一区| 性欧美疯狂xxxxbbbb| 一区二区三区在线观看欧美| 国产精品成人免费在线| 欧美激情中文不卡| 欧美激情一区二区三区四区| 欧美精品一区二区久久久| 日韩欧美资源站| 欧美一二三区在线| 日韩写真欧美这视频| 欧美一卡在线观看| 91精品国产综合久久小美女| 欧美日韩一级片网站| 欧美日韩亚洲高清一区二区| 欧美无砖砖区免费| 欧美日韩一区二区三区在线 | 6080午夜不卡| 欧美久久高跟鞋激| 日韩亚洲欧美一区| 日韩三级视频在线看| 欧美电视剧免费观看| 精品三级av在线| 亚洲精品一区在线观看| 久久人人97超碰com| 久久久不卡网国产精品一区| 中文久久乱码一区二区| 中文字幕亚洲一区二区va在线| 国产精品久久看| 亚洲免费观看高清| 日日骚欧美日韩| 免费成人美女在线观看| 国产精品原创巨作av| 成人动漫在线一区| 欧美性猛片aaaaaaa做受| 欧美日韩国产天堂| 欧美不卡视频一区| 国产精品日日摸夜夜摸av| 最近中文字幕一区二区三区| 亚洲精品写真福利| 午夜精品视频一区| 精品制服美女丁香| 99久久婷婷国产综合精品| 91最新地址在线播放| 欧美午夜影院一区| 精品美女一区二区三区| 中文字幕一区不卡| 亚洲国产精品一区二区www在线| 日韩国产精品久久| 国产精品88av| 欧美视频一区二区三区| 精品动漫一区二区三区在线观看| 亚洲国产高清不卡| 亚洲女爱视频在线| 麻豆精品在线播放| 99久久综合国产精品| 欧美精品一二三区| 国产调教视频一区| 午夜精品免费在线| 成人黄色777网| 欧美一区二区三区免费视频| 中文字幕欧美国产| 一道本成人在线| 精品久久久久香蕉网| 亚洲精品第一国产综合野| 久久99精品国产麻豆婷婷洗澡| 91麻豆国产香蕉久久精品| 日韩精品自拍偷拍| 亚洲欧美一区二区三区极速播放| 免费观看日韩电影| 在线这里只有精品| 国产欧美日韩激情| 色偷偷88欧美精品久久久 | 亚洲一二三四区| 国产精品一区二区在线观看网站| 欧美羞羞免费网站| 亚洲欧洲成人精品av97| 另类人妖一区二区av| 在线日韩国产精品| 国产精品午夜免费| 久久国产三级精品| 欧美色图免费看| 亚洲欧美国产三级| 成人午夜电影久久影院| 日韩欧美一区二区三区在线| 一区二区欧美视频| 不卡的电影网站| 久久先锋影音av鲁色资源 | 91捆绑美女网站| 久久综合久色欧美综合狠狠| 丝袜美腿亚洲一区二区图片| 日本乱人伦一区| 国产精品伦理在线| 国产电影一区二区三区| 欧美成人vps| 免费av成人在线| 在线成人免费视频| 亚洲一区二区三区小说| 91视频www| 中文字幕一区二区三| 福利一区福利二区| 国产丝袜在线精品| 国产精品一区在线观看乱码| 精品免费国产二区三区| 麻豆精品在线播放| 精品国产髙清在线看国产毛片 | 国产一区二区精品久久91| 6080yy午夜一二三区久久| 亚洲国产一二三| 91麻豆精品在线观看| 亚洲欧洲色图综合| www.亚洲国产| 亚洲欧洲日韩在线| 91在线看国产| 亚洲精品一二三区| 欧美四级电影网| 亚洲bdsm女犯bdsm网站| 8v天堂国产在线一区二区| 日韩不卡一区二区三区| 欧美一区二区三区日韩| 久久成人免费电影| 久久亚洲欧美国产精品乐播| 国产成人免费在线观看不卡| 欧美国产一区视频在线观看| aaa国产一区| 亚洲欧美日韩电影| 欧美三级在线看| 蜜臀精品久久久久久蜜臀| 欧美电影精品一区二区| 国v精品久久久网| 亚洲美女电影在线| 欧美精品久久一区二区三区| 久久电影网站中文字幕| 中文字幕乱码久久午夜不卡| 99re成人精品视频| 亚洲成年人影院| 欧美一级久久久久久久大片| 精品一区二区三区在线观看 | 久久成人免费日本黄色| 久久久精品日韩欧美| 成人av一区二区三区| 亚洲国产精品麻豆| 精品国产乱码91久久久久久网站| 成人激情小说乱人伦| 亚洲国产精品久久艾草纯爱| 日韩欧美国产综合| 9i在线看片成人免费| 五月激情丁香一区二区三区| 精品欧美黑人一区二区三区| 91在线视频官网| 免费久久99精品国产| 国产精品久久久久久户外露出| 欧美日韩你懂得| 国产一区视频导航| 亚洲综合色区另类av| 日韩欧美高清在线| 色综合久久综合网| 精品夜夜嗨av一区二区三区| 国产精品久久久久久福利一牛影视 | 中文字幕久久午夜不卡| 欧美日韩精品福利| 成人开心网精品视频| 青青草国产成人99久久| 国产精品初高中害羞小美女文| 51久久夜色精品国产麻豆| 国产99久久久久| 婷婷中文字幕综合| 亚洲丝袜另类动漫二区| 日韩免费看网站| 日本黄色一区二区| 国产乱淫av一区二区三区| 亚洲影院久久精品| 国产精品理论片在线观看| 日韩精品自拍偷拍| 欧美最猛性xxxxx直播| 成人午夜视频免费看| 久久国产综合精品| 亚洲成人av中文| 亚洲人妖av一区二区| 久久久国际精品| 日韩欧美综合在线|