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

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

?? iicmstr.asm

?? Adsp的FFT編程
?? ASM
字號(hào):
        LIST P=16C74A
	TITLE "I2C interface PICmicro to serial EEPROM"
;
;
;*****************************************************************************
;**  Two wire/I2C Bus READ/WRITE Sample Routines of Microchip's
;**  24Cxx / 85Cxx serial CMOS EEPROM interfacing to a 
;**  PIC16C74 8-bit CMOS single chip microcomputer
;**  Revised Version  (3/1/94).
;**
;**  Note:  1) All timing is based on a reference crystal frequency of 4MHz
;**            which is equivalent to an instruction cycle time of 1 usec.
;**         2) Address and literal values are read in hexidecimal unless 
;**            otherwise specified.
;*****************************************************************************
;
;-----------------------------------------------------------------------------
;       Register File Assignment
;-----------------------------------------------------------------------------
;
	#include <P16C74a.INC>
;
FLAG    equ     20              ; Common flag bits register
EEPROM  equ     21              ; Bit buffer
ERCODE  equ     22              ; Error code (to indicate bus status)
ADDR    equ     23              ; Address register
DATAI   equ     24              ; Stored data input register
DATAO   equ     25              ; Stored data output register
SLAVE   equ     26              ; Device address (1010xxx0)
TXBUF   equ     27              ; TX buffer
RXBUF   equ     28              ; RX buffer
COUNT   equ     29              ; Bit counter
TEMP	equ	2A		; Temporary storage
TEMP1	equ	2B		; More Temporary storage
;
;-----------------------------------------------------------------------------
;                     Bit Assignments
;-----------------------------------------------------------------------------
;
; FLAG Bits
;
ERRORFLG EQU     0               ; Error flag
;
; EEPROM Bits
;
DI      EQU     7               ; EEPROM input
DO      EQU     6               ; EEPROM output
;
; I2C Device Bits
;
SDA     EQU     4               ; RB7, data in/out
SCL     EQU     3               ; RB6, serial clock

;------------------------------------------------------------------------------
;			Vector Assignment
;------------------------------------------------------------------------------

	ORG	00h		; Reset Vector
	goto	Start
;
	ORG	04h		; Interrupt Vector
	goto	Service_int	; Not actually used by this program
;
	ORG	10h		; Begining of Program space

;------------------------------------------------------------------------------
;			Main Program
;------------------------------------------------------------------------------
Start
	clrf	FLAG
	clrf	ERCODE
	bsf	STATUS,RP0	; Select Page 1
	clrf	TRISB		; Set PORT_B as all outputs
	movlw	0FFh		; Set PORT_B as all inputs
	movwf	TRISC
	bcf	STATUS,RP0	; Select Page 0
	movlw	01h		
	movwf	PORTB		; Light first LED
 	movlw	B'00111011'	; I2C master mode enabled
 	movwf	SSPCON
	movlw	B'00000000'	; Disable interrupts
	movwf	INTCON
	movlw	B'00000000'	; Disable all interrupts
	movwf	PIE1
	clrf 	PORTC		; Set SCL, SDA to low when not in tri-state
Bigloop
	movf    PORTB,W	
	movwf	DATAO		; Output Data
;	movlw	00h		; EEPROM data address
;	movwf	ADDR
;	movlw	B'10100000'	; EEPROM I2C address
	movlw	B'00001110'
	movwf	SLAVE
Wrtloop
	call 	WRBYTE		; Output byte to EEPROM
	btfsc	FLAG,ERRORFLG	; Check for error
	goto	Errorloop
	call	Delay		; 10mS Delay for 24LC01 EEPROM write delay
;	incf	ADDR, F   	; Point to next address
;	btfss	ADDR,7		; Check if at end of EEPROM
;	goto	Wrtloop

	bcf	STATUS,RP0	; Address page 1
;	movlw	00h		; EEPROM data address
;	movwf	ADDR		
;	movlw	B'10100000'	; EEPROM I2C address
	movlw	B'00001111'
	movwf	SLAVE
Rdloop
	call	RDBYTE		; Input byte from EEPROM
	btfsc	FLAG,ERRORFLG	; Check for error
	goto	Errorloop	
	movf	DATAI,W		; Get received byte
	xorlw	B'11111111'	; Add by Steven Lin 032099
	subwf	PORTB,W	        ; Make sure correct data read
	btfss	STATUS,Z
	goto	Errorloop
;	incf	ADDR, F		; Point to next address
;	btfss	ADDR,7		; Check if at end of EEPROM;
;	goto	Rdloop	
	incf	PORTB, F	; Increment value displayed on LEDs
	goto	Bigloop

Errorloop
	clrf	PORTB		; Turn off all LEDs
Errloop1
	call	Delay		; Delay so that flashing of LEDs 
	call	Delay		;	is apparent
	call	Delay
	call	Delay
	call	Delay
	call	Delay
	comf	PORTB, F	; Change state of all LEDs
	goto	Errloop1

Service_int			; Interrupts are not used
	return


;-----------------------------------------------------------------------------
;       BYTE-WRITE, write one byte to EEPROM device
;-----------------------------------------------------------------------------
;       Input   :       DATAO   = data to be written
;                       ADDR    = EEPROM data address
;                       SLAVE   = device address (1010xxx0)
;       Output  :       Data written to EEPROM device
;-----------------------------------------------------------------------------
 
WRBYTE
	bcf	STATUS,RP0
	movf    SLAVE,W         ; Put SLAVE address
	movwf   TXBUF           ;  in xmit buffer
	call    BSTART          ; Generate START bit
	call    TX              ; Output SLAVE address
;	bcf	STATUS,RP0
;	movf    ADDR,W          ; Put WORD address
;	movwf   TXBUF           ;  in xmit buffer
;	call    TX              ; Output WORD address
	bcf	STATUS,RP0
	movf    DATAO,W         ; Move DATA 
	movwf   TXBUF           ; into buffer
	call    TX              ; Output DATA and detect acknowledgement
	call    BSTOP           ; Generate STOP bit
	return

;-----------------------------------------------------------------------------
;       TRANSMIT 8 data bits subroutine
;-----------------------------------------------------------------------------
;       Input   :       TXBUF
;       Output  :       Data transmitted to EEPROM device
;-----------------------------------------------------------------------------
 
TX
	bcf	STATUS,RP0
	movlw   .8		; Set counter for eight bits
	movwf   COUNT

TXLP
	bcf     EEPROM,DO       ; Default 0 bit out
	btfsc   TXBUF,7         ; If shifted bit = 0, data bit = 0
	bsf     EEPROM,DO       ;  otherwise data bit = 1
	call    BITOUT          ; Send bit
	bcf	STATUS,RP0
	rlf     TXBUF, F        ; Rotate TXBUF left
	skpc                    ; f(6) ---> f(7)
	bcf     TXBUF,0         ; f(7) ---> carry
	skpnc                   ; carry ---> f(0)
	bsf     TXBUF,0
	decfsz  COUNT, F        ; 8 bits done?
	goto    TXLP            ; No.
	call    BITIN           ; Read acknowledge bit
	bcf	STATUS,RP0
	movlw   3
	btfsc   EEPROM,DI       ; Check for acknowledgement
	call    ERR             ; No acknowledge from device
	bcf	STATUS,RP0
	retlw   0


;-----------------------------------------------------------------------------
;       Single bit data transmit from PIC to serial EEPROM 
;-----------------------------------------------------------------------------
;       Input   :       EEPROM register, bit DO
;       Output  :       Bit transmitted over I2C
;			Error bits set as necessary
;-----------------------------------------------------------------------------

BITOUT
	btfss   EEPROM,DO
	goto    BIT0
	bsf	STATUS,RP0
	bsf     TRISC,SDA	; Output bit 0
	nop
	movlw   2
	bcf	STATUS,RP0
	btfsc   PORTC,SDA	; Check for error code 2
	goto    CLK1
	call	ERR
	goto    CLK1		; SDA locked low by device

BIT0
	bsf	STATUS,RP0
	bcf	TRISC,SDA	; Output bit 0
	nop			; Delay
CLK1
	bsf	STATUS,RP0
	bsf     TRISC,SCL	; Attempt to set SCL high
	NOP			;STEVEN LIN
	NOP
	NOP
	NOP			
	NOP
	NOP
	movlw   1         	; Error code 1
	bcf	STATUS,RP0
	btfsc    PORTC,SCL	; SCL locked low?
	goto    BIT2		; No.
	call 	ERR		; Yes, set error
BIT2
	nop			; Timing delay
	nop
	bsf	STATUS,RP0
	bcf     TRISC,SCL      ; Return SCL to low
	nop
	bcf	STATUS,RP0
	retlw   0

;-----------------------------------------------------------------------------
;       BYTE-READ, read one byte from serial EEPROM device
;-----------------------------------------------------------------------------
;       Input   :       ADDR    = source address
;                       SLAVE   = device address (1010xxx0)
;       Output  :       DATAI   = data read from serial EEPROM
;-----------------------------------------------------------------------------
;
RDBYTE
	bcf	STATUS,RP0
	movf    SLAVE,W         ; Move SLAVE address 
	movwf   TXBUF           ;  into xmit buffer (R/W = 0)
	call    BSTART          ; Generate START bit
	call    TX              ; Output SLAVE address. Check ACK.
;	bcf	STATUS,RP0
;	movf    ADDR,W          ; Move WORD address
;	movwf   TXBUF		;  into xmit buffer
;	call    TX              ; Output WORD address. Check ACK.
;	call    BSTART          ; START READ (if only one device is
;	bcf	STATUS,RP0	; connected to the I2C bus)
;	movf    SLAVE,W         
;	movwf   TXBUF
;	bsf     TXBUF,0         ; Specify READ mode (R/W = 1)
;	call    TX              ; Output SLAVE address
	call    RX              ; READ in data and acknowledge
	call    BSTOP           ; Generate STOP bit
	bcf	STATUS,RP0
	movf    RXBUF,W         ; Save data from buffer
	movwf   DATAI           ; to DATAI file register.
	return

;
;-----------------------------------------------------------------------------
;       RECEIVE eight data bits subroutine
;-----------------------------------------------------------------------------
;       Input   :       None
;       Output  :       RXBUF = 8-bit data received
;-----------------------------------------------------------------------------
;
RX
	bcf	STATUS,RP0
	movlw   .8              ; 8 bits of data
	movwf   COUNT
	clrf    RXBUF
;
RXLP
	rlf     RXBUF, F        ; Shift data to buffer
	skpc
	bcf     RXBUF,0         ; carry ---> f(0)
	skpnc
	bsf     RXBUF,0
	call    BITIN
	bcf	STATUS,RP0
	btfsc   EEPROM,DI
	bsf     RXBUF,0         ; Input bit =1
	decfsz  COUNT, F        ; 8 bits?
	goto    RXLP
	bsf     EEPROM,DO       ; Set acknowledge bit = 1
	call    BITOUT          ; to STOP further input
	retlw   0

;
;-----------------------------------------------------------------------------
;       Single bit receive from serial EEPROM to PIC
;-----------------------------------------------------------------------------
;       Input   :       None
;       Output  :       Data bit received
;-----------------------------------------------------------------------------
;
BITIN
	bsf	STATUS,RP0
	bsf     TRISC,SDA  	; Set SDA for input
	nop
	bcf	STATUS,RP0
	bcf     EEPROM,DI
	bsf	STATUS,RP0
	bsf     TRISC,SCL  	; Clock high
	nop
	movlw   1
	bcf	STATUS,RP0
	btfsc   PORTC,SCL   	; Skip if SCL  is high
	goto    BIT1
	call 	ERR
BIT1
	bcf	STATUS,RP0
	nop			;by steven Lin
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	btfss   PORTC,SDA       ; Read SDA pin, for ACK low
	goto 	ACKOK
	bsf     EEPROM,DI       ; DI = 1
ACKOK
	bsf	STATUS,RP0
	nop                     ; Delay
	bcf     TRISC,SCL       ; Return SCL to low
	nop     
	bcf	STATUS,RP0
	retlw   0

;-----------------------------------------------------------------------------
;       DELAY, Provide a 10.78mS delay
;-----------------------------------------------------------------------------
;       Input   :       None
;       Output  :       None
;-----------------------------------------------------------------------------

Delay
	bcf	STATUS,RP0
	movlw	7
	movwf	TEMP1
	clrf    TEMP            ;clear last location
dly1
	nop
	nop
	nop
	decfsz  TEMP, F         ;reduce count
	goto    dly1            ;Inner loop time = 1.54mS
	decfsz	TEMP1, F
	goto	dly1		;Total time = 10.78mS
	retlw   0
 
;-----------------------------------------------------------------------------
;       START bit generation routine
;-----------------------------------------------------------------------------
;       input   : none
;       output  : initialize bus communication
;-----------------------------------------------------------------------------
;
;Generate START bit (SCL is high while SDA goes from high to low transition)
;and check status of the serial clock.
BSTART
	bsf	STATUS,RP0
	bsf     TRISC,SDA	; Make sure SDA is high
	nop
	bsf     TRISC,SCL	; Set clock high
	nop
	movlw   1               ; Ready error status code 1
	bcf	STATUS,RP0
	btfss   PORTC,SCL 	; Locked?
	call    ERR             ; SCL locked low by device, flag error
	bsf	STATUS,RP0
	bcf     TRISC,SDA 	; SDA goes low during SCL high
	nop                     ; Timing adjustment, 1uS @4MHz
	bcf     TRISC,SCL	; Start clock train
	nop
	bcf	STATUS,RP0
	RETLW   0
 
;-----------------------------------------------------------------------------
;       STOP bit generation routine
;-----------------------------------------------------------------------------
;       Input   :       None
;       Output  :       Bus communication, STOP condition
;-----------------------------------------------------------------------------
;
;Generate STOP bit (SDA goes from low to high during SCL high state)
;and check bus conditions.
 
BSTOP
	bsf	STATUS,RP0
	bcf     TRISC,SDA	; Return SDA to low
	nop
	bsf     TRISC,SCL	; Set SCL high
	nop
	movlw   1               ; Ready error code 1
	bcf	STATUS,RP0
	btfss   PORTC,SCL 	; High?
	call    ERR             ; No, SCL locked low by device
	bsf	STATUS,RP0
	bsf     TRISC,SDA  	; SDA goes from low to high during SCL high
	nop
	movlw   4               ; Ready error code 4
	btfss   TRISC,SDA  	; High?
	call    ERR             ; No, SDA bus not release for STOP
	bcf	STATUS,RP0
	retlw   0
;
;-----------------------------------------------------------------------------
;       Two wire/I2C - CPU communication error status table and subroutine
;-----------------------------------------------------------------------------
;  input  :     W-reg   = error code
;  output :     ERCODE  = error code
;           FLAG(ERROR) = 1
;
;         code          error status mode
;       -------         ------------------------------------------------------
;           1   :       SCL locked low by device (bus is still busy)
;           2   :       SDA locked low by device (bus is still busy)
;           3   :       No acknowledge from device (no handshake)
;           4   :       SDA bus not released for master to generate STOP bit
;-----------------------------------------------------------------------------
;
;Subroutine to identify the status of the serial clock (SCL) and serial data
;(SDA) condition according to the error status table. Codes generated are
;useful for bus/device diagnosis.
;
ERR
	bcf	STATUS,RP0
	btfss   FLAG,ERRORFLG   ; If not first error, do not change code
	movwf   ERCODE          ; Save error code
	bsf     FLAG,ERRORFLG   ; Set error flag
	retlw   0

	END

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91污在线观看| 在线一区二区三区| 欧美午夜宅男影院| 日韩av在线免费观看不卡| 亚洲国产精品一区二区尤物区| 中文字幕人成不卡一区| 欧美在线短视频| 毛片不卡一区二区| 99久久精品情趣| 欧美中文字幕一二三区视频| 91精品欧美一区二区三区综合在 | 中文一区二区完整视频在线观看| 日韩码欧中文字| 日韩精品成人一区二区在线| 大胆亚洲人体视频| 欧美日韩夫妻久久| 国产精品久久久久久亚洲毛片 | 69堂国产成人免费视频| 欧美激情一区二区| 天天色综合天天| 成人av网站在线观看免费| 在线不卡一区二区| 国产精品成人在线观看| 蜜臀久久99精品久久久画质超高清| 99天天综合性| 欧美xingq一区二区| 一区二区三区在线免费视频| 国产成人综合网| 欧美一级搡bbbb搡bbbb| 亚洲欧美另类久久久精品| 激情综合色播五月| 欧美夫妻性生活| 狠狠狠色丁香婷婷综合激情| 91黄色小视频| 国产亚洲1区2区3区| 石原莉奈在线亚洲三区| 97超碰欧美中文字幕| 337p日本欧洲亚洲大胆精品| 午夜电影一区二区三区| 色嗨嗨av一区二区三区| 国产日韩亚洲欧美综合| 久久99精品国产麻豆婷婷| 欧美三级韩国三级日本一级| 日韩一区在线看| 国产大陆亚洲精品国产| 亚洲精品一区二区三区福利| 肉丝袜脚交视频一区二区| 色婷婷av一区二区三区大白胸| 久久久精品天堂| 精品一二三四区| 欧美一区二区啪啪| 日韩av中文在线观看| 欧美日韩国产大片| 亚洲精品国产第一综合99久久| 成人高清视频在线| 中文字幕av一区二区三区高| 国产福利一区二区三区在线视频| 精品久久久久久久人人人人传媒 | 欧美视频你懂的| 一区二区三区四区视频精品免费| 波多野洁衣一区| 日本一区二区三区在线不卡| 国产精品一区久久久久| 国产午夜亚洲精品理论片色戒 | 国产网站一区二区三区| 国精产品一区一区三区mba视频| 91精品国产综合久久香蕉麻豆| 一卡二卡欧美日韩| 色婷婷激情综合| 亚洲精品亚洲人成人网| 色老头久久综合| 一区二区三区四区在线| 欧美视频在线观看一区二区| 午夜精品123| 日韩免费观看高清完整版在线观看| 丝袜亚洲精品中文字幕一区| 欧美精品三级在线观看| 日韩电影免费在线观看网站| 日韩一区二区视频| 日本va欧美va瓶| 精品国产1区2区3区| 国产成人在线影院| 中文字幕日韩精品一区| 日本道在线观看一区二区| 一区二区三区成人| 欧美人妖巨大在线| 美脚の诱脚舐め脚责91| 久久老女人爱爱| av激情亚洲男人天堂| 一区二区三区在线看| 欧美日韩高清不卡| 久久99久久精品| 欧美国产日韩a欧美在线观看| av一区二区三区黑人| 亚洲精品久久7777| 欧美一卡二卡三卡| 成人免费视频免费观看| 亚洲老妇xxxxxx| 日韩丝袜美女视频| 欧美一二三四在线| 国产福利一区二区三区视频在线| 国产精品久久久久久久久快鸭| 91久久精品一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 91精品国产欧美日韩| 国产综合色产在线精品| 综合网在线视频| 在线不卡a资源高清| 国产在线观看免费一区| 亚洲欧美综合网| 欧美精品自拍偷拍动漫精品| 国产麻豆视频一区| 亚洲免费av观看| 日韩欧美一级在线播放| 成人永久看片免费视频天堂| 亚洲电影欧美电影有声小说| 久久一夜天堂av一区二区三区| 一本一道波多野结衣一区二区 | 精品国产亚洲一区二区三区在线观看| 丁香激情综合国产| 亚洲国产精品自拍| 国产香蕉久久精品综合网| 欧美日韩在线播| 国产精品资源网站| 亚洲va欧美va人人爽| 国产日韩在线不卡| 欧美精品少妇一区二区三区| 成人一道本在线| 日韩av中文字幕一区二区| 中文字幕中文在线不卡住| 欧美日韩一区 二区 三区 久久精品| 狠狠色综合播放一区二区| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品一区二区三区99| 欧美日韩中文字幕一区二区| 国产精品系列在线播放| 午夜成人在线视频| 国产精品国产三级国产有无不卡| 日韩一区二区在线观看视频| 色婷婷av一区二区三区gif| 国产一区二区三区四区五区美女| 亚洲3atv精品一区二区三区| ●精品国产综合乱码久久久久| 欧美sm极限捆绑bd| 欧美日韩一卡二卡三卡| 97精品电影院| 国产v综合v亚洲欧| 久久精品国产亚洲5555| 午夜精品久久久久久久久久久| 亚洲欧美综合色| 久久精品人人做人人综合 | 欧美aa在线视频| 亚洲精品自拍动漫在线| 国产精品网站在线| 日韩av一区二区三区四区| 一区二区三区资源| 成人欧美一区二区三区白人| 久久嫩草精品久久久精品| 日韩欧美综合一区| 欧美高清视频一二三区| 日本高清不卡在线观看| 成人精品国产福利| 成人午夜视频在线| 成人性生交大片免费 | 国产精品久久三区| 国产欧美日韩不卡| www国产成人| www精品美女久久久tv| 日韩欧美高清在线| 日韩欧美一级特黄在线播放| 91精品国产综合久久香蕉的特点 | 美女视频一区在线观看| 午夜精彩视频在线观看不卡| 亚洲国产成人tv| 亚洲高清免费观看| 亚洲地区一二三色| 五月综合激情婷婷六月色窝| 亚洲一区av在线| 一区二区三区不卡在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 日本大胆欧美人术艺术动态| 婷婷中文字幕一区三区| 日韩国产精品91| 麻豆精品在线播放| 麻豆精品一区二区| 国精产品一区一区三区mba视频| 国模大尺度一区二区三区| 国产成人在线视频免费播放| 成人天堂资源www在线| 顶级嫩模精品视频在线看| 成人福利视频在线看| av电影在线观看完整版一区二区| 99热这里都是精品| 色婷婷av一区二区三区大白胸| 欧洲人成人精品| 欧美一区二区三区视频免费| 日韩欧美国产一二三区| 精品国产免费人成在线观看| 欧美激情一二三区| 一区二区三区日韩在线观看|