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

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

?? usbtiny2313.asm

?? AVR的USB開發源代碼 USB-RS232轉換
?? ASM
?? 第 1 頁 / 共 5 頁
字號:
CRC16End:
		ret				;otherwise finish (in temp0 and temp1 is result)
;------------------------------------------------------------------------------------------
LoadDescriptorFromROM:
		lpm				;load from ROM position pointer to R0
		st	Y+,R0			;R0 save to buffer and increment buffer
		adiw	ZH:ZL,1			;increment index to ROM
		dec	ByteCount		;till are not all bytes
		brne	LoadDescriptorFromROM	;then load next
		rjmp	EndFromRAMROM		;otherwise finish
;------------------------------------------------------------------------------------------
LoadDescriptorFromROMZeroInsert:
		lpm				;load from ROM position pointer to R0
		st	Y+,R0			;R0 save to buffer and increment buffer

		bst	RAMread,3		;if bit 3 is one - don't insert zero
		brtc	InsertingZero		;otherwise zero will be inserted
		adiw	ZH:ZL,1			;increment index to ROM
		lpm				;load from ROM position pointer to R0
		st	Y+,R0			;R0 save to buffer and increment buffer
		clt				;and clear
		bld	RAMread,3		;the third bit in RAMread - for to the next zero insertion will be made
		rjmp	InsertingZeroEnd	;and continue
InsertingZero:
		clr	R0			;for insertion of zero
		st	Y+,R0			;zero save to buffer and increment buffer
InsertingZeroEnd:
		adiw	ZH:ZL,1			;increment index to ROM
		subi	ByteCount,2		;till are not all bytes
		brne	LoadDescriptorFromROMZeroInsert	;then load next
		rjmp	EndFromRAMROM		;otherwise finish
;------------------------------------------------------------------------------------------
LoadDescriptorFromSRAM:
		ld	R0,Z			;load from position RAM pointer to R0
		st	Y+,R0			;R0 save to buffer and increment buffer
		inc	ZL			;increment index to RAM
		dec	ByteCount		;till are not all bytes
		brne	LoadDescriptorFromSRAM  ;then load next
		rjmp	EndFromRAMROM		;otherwise finish
;------------------------------------------------------------------------------------------
LoadDescriptorFromEEPROM:
		out	EEAR,ZL			;set the address EEPROM
		sbi	EECR,EERE		;read EEPROM to register EEDR
		in	R0,EEDR			;load from EEDR to R0
		st	Y+,R0			;R0 save to buffer and increment buffer
		inc	ZL			;increment index to EEPROM
		dec	ByteCount		;till are not all bytes
		brne	LoadDescriptorFromEEPROM;then load next
		rjmp	EndFromRAMROM		;otherwise finish
;------------------------------------------------------------------------------------------
LoadXXXDescriptor:
		ldi	temp0,SOPbyte			;SOP byte
		sts	OutputBufferBegin,temp0		;to begin of tramsmiting buffer store SOP
		ldi	ByteCount,8			;8 byte store
		ldi	USBBufptrY,OutputBufferBegin+2	;to transmitting buffer

		and	RAMread,RAMread			;if will be reading from RAM or ROM or EEPROM
		brne	FromRAMorEEPROM			;0=ROM,1=RAM,2=EEPROM,4=ROM with zero insertion (string)
FromROM:
		rjmp	LoadDescriptorFromROM		;load descriptor from ROM
FromRAMorEEPROM:
		sbrc	RAMread,2			;if RAMREAD=4
		rjmp	LoadDescriptorFromROMZeroInsert	;read from ROM with zero insertion
		sbrc	RAMread,0			;if RAMREAD=1
		rjmp	LoadDescriptorFromSRAM		;load data from SRAM
		rjmp	LoadDescriptorFromEEPROM	;otherwise read from EEPROM
EndFromRAMROM:
		sbrc	RAMread,7			;if is most significant bit in variable RAMread=1
		clr	RAMread				;clear RAMread
		rcall	ToggleDATAPID			;change DATAPID
		ldi	USBBufptrY,OutputBufferBegin+1	;to transmitting buffer - position of DATA PID
		ret
;------------------------------------------------------------------------------------------
PrepareUSBOutAnswer:	;prepare answer to buffer
		rcall	PrepareUSBAnswer		;prepare answer to buffer
MakeOutBitStuff:
		inc	BitStuffInOut			;transmitting buffer - insertion of bitstuff bits
		ldi	USBBufptrY,OutputBufferBegin	;to transmitting buffer
		rcall	BitStuff
		mov	OutputBufferLength,ByteCount	;length of answer store for transmiting
		clr	BitStuffInOut			;receiving buffer - deletion of bitstuff bits
		ret
;------------------------------------------------------------------------------------------
PrepareUSBAnswer:	;prepare answer to buffer
		clr	RAMread				;zero to RAMread variable - reading from ROM
		lds	temp0,InputBufferBegin+2	;bmRequestType to temp0
		lds	temp1,InputBufferBegin+3	;bRequest to temp1
		cbr	temp0,0b10011111		;if is 5 and 6 bit zero
		brne	VendorRequest			;then this isn't  Vendor Request
		rjmp	StandardRequest			;but this is standard Request
;--------------------------
DoSetInfraBufferEmpty:
		rjmp	OneZeroAnswer			;confirm receiving with one zero
;--------------------------
DoSetRS232Baud:
		lds	temp0,InputBufferBegin+4	;first parameter - RS232 baudrate value
		out	UBRRL,temp0			;set UART speed
		rjmp	OneZeroAnswer			;confirm receiving with one zero
;--------------------------
DoGetRS232Baud:
		in	R0,UBRRL			;return UART speed in R0
		rjmp	DoGetIn				;and finish
;--------------------------
DoRS232Send:
		lds	temp0,InputBufferBegin+4	;first parameter - value transmitted to RS232
		out	UDR,temp0			;transmit data to UART
WaitForRS232Send:
		sbis	UCSRB,TXEN			;if disabled UART transmitter
		rjmp	OneZeroAnswer			;then finish - protection because loop lock in AT90S2323/2343
		sbis	UCSRA,TXC			;wait for transmition finish
		rjmp	WaitForRS232Send
		rjmp	OneZeroAnswer			;acknowledge reception with single zero
;--------------------------
DoRS232Read:
		rjmp	TwoZeroAnswer			;only acknowledge reception with two zero
;--------------------------
VendorRequest:
		clr	ZH				;for reading from RAM or EEPROM

		cpi	temp1,1				;
		breq	DoSetInfraBufferEmpty		;restart infra receiving (if it was stopped by reading from RAM)

		cpi	temp1,2				;
		breq	DoGetInfraCode			;transmit received infra code (if it is in buffer)

		cpi	temp1,3				;
		breq	DoSetDataPortDirection		;set flow direction of datal bits
		cpi	temp1,4				;
		breq	DoGetDataPortDirection		;detect of flow direction of data bits

		cpi	temp1,5				;
		breq	DoSetOutDataPort		;set data bits (if they are inputs, then pull-ups)
		cpi	temp1,6				;
		breq	DoGetOutDataPort		;detect settings of data out bits (if they are input, then pull-ups)

		cpi	temp1,7				;
		breq	DoGetInDataPort			;return value of input data port

		cpi	temp1,8				;
		breq	DoEEPROMRead			;return contents of EEPROM from given address
		cpi	temp1,9				;
		breq	DoEEPROMWrite			;write to EEPROM to given address given data

		cpi	temp1,10			;
		breq	DoRS232Send			;transmit byte to serial line
		cpi	temp1,11			;
		breq	DoRS232Read			;returns received byte from serial line(if some was received)

		cpi	temp1,12			;
		breq	DoSetRS232Baud			;set line speed of of serial line
		cpi	temp1,13			;
		breq	DoGetRS232Baud			;return line speed of serial line
		cpi	temp1,14			;
		breq	DoGetRS232Buffer		;return RS232 buffer

		cpi	temp1,USER_FNC_NUMBER+0		;
		breq	DoUserFunction0			;execute of user function0
		cpi	temp1,USER_FNC_NUMBER+1		;
		breq	DoUserFunction1			;execute of user function1
		cpi	temp1,USER_FNC_NUMBER+2		;
		breq	DoUserFunction2			;execute of user function2

		rjmp	ZeroDATA1Answer			;if that it was something unknown, then prepare zero answer

;----------------------------- USER FUNCTIONS --------------------------------------

;------------------------------TEMPLATE OF YOUR FUNCTION----------------------------
;------------------ BEGIN: This is template how to write own function --------------

;free of use are registers:
	;temp0,temp1,temp2,temp3,ACC,ZH,ZL
	;registers are destroyed after execution (use push/pop to save content)

;at the end of routine you must correctly set registers:
	;RAMread - 0=reading from ROM, 1=reading from RAM, 2=reading from EEPROM
	;temp0 - number of transmitted data bytes
	;ZH,ZL - pointer to buffer of transmitted data (pointer to ROM/RAM/EEPROM)

;to transmit data (preparing data to buffer) :
	;to transmit data you must jump to "ComposeEndXXXDescriptor"
	;to transmit one zero byte you can jump to "OneZeroAnswer"  (commonly used as confirmation of correct processing)
	;to transmit two zero byte you can jump to "TwoZeroAnswer"  (commonly used as confirmation of error in processing)

DoUserFunctionX:
DoUserFunction0:  ;send byte(s) of RAM starting at position given by first parameter in function
		lds	temp0,InputBufferBegin+4	;first parameter Lo into temp0
		;lds	temp1,InputBufferBegin+5	;first  parameter Hi into temp1
		;lds	temp2,InputBufferBegin+6	;second parameter Lo into temp2
		;lds	temp3,InputBufferBegin+7	;second parameter Hi into temp3
		;lds	ACC,InputBufferBegin+8		;number of requested bytes from USB host (computer) into ACC

		;Here add your own code:
		;-------------------------------------------------------------------
		nop					;example of code - nothing to do
		nop
		nop
		nop
		nop
		;-------------------------------------------------------------------

		mov	ZL,temp0			;will be sending value of RAM - from address stored in temp0 (first parameter Lo of function)
		inc	RAMread				;RAMread=1 - cita sa z RAM-ky
		ldi	temp0,RAMEND+1			;send max number of bytes - whole RAM
		rjmp	ComposeEndXXXDescriptor		;a prepare data
DoUserFunction1:
		rjmp	OneZeroAnswer			;only confirm receiving by one zero byte answer
DoUserFunction2:
		rjmp	TwoZeroAnswer			;only confirm receiving by two zero bytes answer
;------------------ END: This is template how to write own function ----------------

;----------------------------- USER FUNCTIONS --------------------------------------

DoGetInfraCode:
		rjmp	OneZeroAnswer			;acknowledge reception with single zero

DoEEPROMRead:
		lds	ZL,InputBufferBegin+4		;first parameter - offset in EEPROM
		ldi	temp0,2
		mov	RAMread,temp0			;RAMREAD=2 - reading from EEPROM
		ldi	temp0,E2END+1			;number my byte answers to temp0 - entire length of EEPROM
		rjmp	ComposeEndXXXDescriptor		;otherwise prepare data
DoEEPROMWrite:
		lds	ZL,InputBufferBegin+4		;first parameter - offset in EEPROM (address)
		lds	R0,InputBufferBegin+6		;second parameter - data to store to EEPROM (data)
		rjmp	EEPROMWrite			;write to EEPROM and finish this command
DoSetDataPortDirection:
		lds	ACC,InputBufferBegin+4		;first parameter - direction of data bits
		rcall	SetDataPortDirection
		rjmp	OneZeroAnswer			;acknowledge reception with single zero
DoGetDataPortDirection:
		rcall	GetDataPortDirection
		rjmp	DoGetIn

DoSetOutDataPort:
		lds	ACC,InputBufferBegin+4		;first parameter - value of data bits
		rcall	SetOutDataPort
		rjmp	OneZeroAnswer			;acknowledge reception with single zero
DoGetOutDataPort:
		rcall	GetOutDataPort
		rjmp	DoGetIn

DoGetInDataPort:
		rcall	GetInDataPort
 DoGetIn:
		ldi	ZL,0				;sending value in R0
		ldi	temp0,0x81			;RAMread=1 - reading from RAM
		mov	RAMread,temp0			;(highest bit set to 1 - to zero RAMread immediatelly)
		ldi	temp0,1				;send only single byte
		rjmp	ComposeEndXXXDescriptor		;and prepare data

DoGetRS232Buffer:
		mov	temp0,RS232BufferFull		;obtain buffer length of RS232 code
		cpi	temp0,0				;if is RS232 Buffer empty
		breq	OneZeroAnswer			;then nothing send and acknowledge reception with single zero

		lds	ACC,InputBufferBegin+8		;number of requiring bytes to ACC
		inc	temp0				;number of possible bytes (plus word of buffer length)
		cp	ACC,temp0			;if no requested more that I can send
		brcc	NoShortGetRS232Buffer		;transmit as many as requested
		mov	temp0,ACC
NoShortGetRS232Buffer:
		dec	temp0				;substract word length
		lds	temp1,RS232BufferBegin+1	;obtain index of reading of buffer of RS232 code
		add	temp1,temp0			;obtain where is end
		cpi	temp1,RS232BufferBegin+MAXRS232LENGTH+1	;if it would overflow
		brcs	ReadNoOverflow
		subi	temp1,RS232BufferBegin+MAXRS232LENGTH+1	;caculate how many not transfered
		sub	temp0,temp1			;and with this short length of reading
		ldi	temp1,RS232BufferBegin+4	;and start from zero
ReadNoOverflow:
		lds	ZL,RS232BufferBegin+1		;obtain index of reading of buffer of RS232 code: 2.byte of header (code length + reading + writing + reserve)
		sts	RS232BufferBegin+1,temp1	;write new index of reading of buffer of RS232 code : 2.byte of header (code length + reading + writing + reserve)
		dec	ZL				;space for length data - transmitted as first word

		sub	RS232BufferFull,temp0		;decrement buffer length
		st	Z,RS232BufferFull		;save real length to packet
		inc	temp0				;and about this word increment number of transmited bytes (buffer length)
		inc	RAMread				;RAMread=1 reading from RAM
		rjmp	ComposeEndXXXDescriptor		;and prepare data
;----------------------------- END USER FUNCTIONS ----------------------------------

OneZeroAnswer:		;send single zero
		ldi	temp0,1				;number of my bytes answers to temp0
		rjmp	ComposeGET_STATUS2

StandardRequest:
		cpi	temp1,GET_STATUS		;
		breq	ComposeGET_STATUS		;

		cpi	temp1,CLEAR_FEATURE		;
		breq	ComposeCLEAR_FEATURE		;

		cpi	temp1,SET_FEATURE		;
		breq	ComposeSET_FEATURE		;

		cpi	temp1,SET_ADDRESS		;if to set address
		breq	ComposeSET_ADDRESS		;set the address

		cpi	temp1,GET_DESCRIPTOR		;if requested descriptor
		breq	ComposeGET_DESCRIPTOR		;generate it

		cpi	temp1,SET_DESCRIPTOR		;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本不卡1234视频| 欧美一区二区三区视频| 99精品在线观看视频| 欧美色图免费看| 国产精品网曝门| 久久精品99国产国产精| 欧美性一级生活| 中文字幕在线观看不卡| 国产一区二区免费在线| 欧美肥大bbwbbw高潮| 一区二区三区日本| www.66久久| 中文字幕欧美日本乱码一线二线| 视频一区在线播放| 91久久一区二区| 国产精品久久久久久福利一牛影视 | 精品国产乱码久久久久久久| 欧美日本视频在线| 国产精品911| 日韩三级中文字幕| 午夜精品免费在线| 欧美亚洲国产一区二区三区va| 国产精品欧美一级免费| 国产精品综合久久| 欧美精品一区视频| 久久精品国产成人一区二区三区 | 欧美一区二区视频在线观看2020 | 亚洲国产成人tv| 欧美日韩一区久久| 午夜久久久久久久久久一区二区| 日本女人一区二区三区| 色一情一乱一乱一91av| 亚洲视频你懂的| 96av麻豆蜜桃一区二区| 最新高清无码专区| a美女胸又www黄视频久久| 国产精品久久久久久久久久免费看| 懂色av一区二区三区免费观看| 国产视频一区二区在线| 成人激情小说乱人伦| 最新久久zyz资源站| av亚洲精华国产精华| 亚洲欧美日韩中文播放| 欧美日韩国产不卡| 久久成人羞羞网站| 中文字幕av一区二区三区| av电影在线观看不卡| 亚洲精品国产精品乱码不99| 欧美日韩视频在线一区二区| 色婷婷综合久久久| 婷婷综合五月天| 精品成人一区二区三区| va亚洲va日韩不卡在线观看| 欧美日韩在线三级| 蜜桃视频在线观看一区二区| 宅男噜噜噜66一区二区66| 奇米精品一区二区三区在线观看| 精品少妇一区二区三区| 风流少妇一区二区| 亚洲黄色录像片| 欧美一区二区视频网站| 成人黄色软件下载| 亚洲成a人片综合在线| 精品国产91九色蝌蚪| 99久久亚洲一区二区三区青草| 亚洲激情六月丁香| 精品国产乱码久久| 色域天天综合网| 久草精品在线观看| 亚洲一区免费视频| 久久九九影视网| 欧美女孩性生活视频| 成人综合在线观看| 美女视频网站久久| 亚洲欧洲日韩女同| 欧美大胆一级视频| 欧美亚洲愉拍一区二区| 国产一区二区三区免费看| 亚洲激情校园春色| 中文字幕欧美日韩一区| 5858s免费视频成人| 99国产麻豆精品| 极品美女销魂一区二区三区| 亚洲成人av免费| 亚洲人成精品久久久久| 国产日韩欧美高清| 日韩视频永久免费| 欧美日韩成人综合在线一区二区| 99久久综合精品| 国产一区在线观看视频| 亚洲妇熟xx妇色黄| 亚洲婷婷国产精品电影人久久| 欧美一级午夜免费电影| 欧美日韩精品电影| 在线日韩av片| 色噜噜狠狠色综合中国| 99久久综合99久久综合网站| 国内精品久久久久影院色| 青青国产91久久久久久| 亚洲第一精品在线| 亚洲美女视频在线观看| 欧美国产精品一区| 国产无一区二区| 久久欧美中文字幕| 国产午夜三级一区二区三| 精品成a人在线观看| 日韩欧美你懂的| 日韩亚洲欧美一区二区三区| 欧美伦理视频网站| 5月丁香婷婷综合| 日韩你懂的在线播放| 91精品久久久久久久久99蜜臂| 666欧美在线视频| 91精品黄色片免费大全| 91麻豆精品国产91| 欧美一激情一区二区三区| 欧美一区二区三区色| 欧美成人综合网站| 久久久九九九九| 中文字幕中文在线不卡住| 亚洲图片激情小说| 一区二区三区 在线观看视频| 一区二区三区在线不卡| 亚洲成人资源在线| 免费一级欧美片在线观看| 国内精品国产成人国产三级粉色 | 91美女蜜桃在线| 成人av中文字幕| 色先锋aa成人| 9191精品国产综合久久久久久| 日韩亚洲欧美成人一区| 久久精品人人做| 亚洲特黄一级片| 日韩av在线播放中文字幕| 精品一二三四区| 99国产精品久久久久久久久久久| 欧美午夜精品电影| 久久中文字幕电影| 成人免费在线视频| 午夜精品久久久久久久蜜桃app | 亚洲精品在线观看视频| 中文字幕巨乱亚洲| 亚洲va在线va天堂| 国产精一区二区三区| 一本色道亚洲精品aⅴ| 日韩三级中文字幕| 中文字幕一区二区视频| 视频一区二区国产| 国产成人在线免费| 在线播放视频一区| 欧美国产丝袜视频| 日韩一区精品字幕| 不卡一二三区首页| 日韩一级片在线播放| 国产精品美女久久久久久| 亚洲国产毛片aaaaa无费看| 国产伦精品一区二区三区视频青涩| 91免费小视频| 久久免费精品国产久精品久久久久| 一区二区三区中文字幕电影| 黄一区二区三区| 337p亚洲精品色噜噜噜| 综合久久给合久久狠狠狠97色 | 免播放器亚洲一区| av一区二区久久| xfplay精品久久| 偷拍亚洲欧洲综合| 精品国精品自拍自在线| 亚洲精品中文字幕在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 制服丝袜中文字幕一区| 国产精品不卡视频| 精品一区二区三区在线观看| 欧美在线观看视频在线| 亚洲欧洲另类国产综合| 国产伦理精品不卡| 日韩精品中文字幕在线一区| 亚洲第四色夜色| 在线观看欧美日本| 国产精品家庭影院| 国产一区二区三区四区在线观看| 91精品婷婷国产综合久久性色| 一区二区三区日韩欧美精品| 粉嫩一区二区三区性色av| 久久一区二区视频| 国内精品视频一区二区三区八戒| 日韩欧美综合在线| 日韩av电影天堂| 欧美浪妇xxxx高跟鞋交| 亚洲国产成人tv| 欧美日韩成人一区| 午夜私人影院久久久久| 欧美午夜精品久久久久久超碰 | 成人午夜在线免费| 久久毛片高清国产| 国产一区二区看久久| 久久综合久久鬼色| 国产精品综合视频| 欧美激情一区二区三区蜜桃视频| 国产精品中文有码|