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

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

?? smb_ex1.asm

?? c8051f020 i2c 源碼。對其操作有詳細描述。
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
;---------------------------------------------------------------------------------
;
; Copyright 2001 Cygnal Integrated Products, Inc.
;
; Program: SMBus_EX1.asm
; Created on: 2/21/01
; Last mod  : 27 AUG 03 -- BW
; Created by: JS
;
; Example code to interface a single 256-byte EEPROM to a C8051F00x via the SMBus
; Code assumes a single EEPROM with  slave address 1010000 is connected on 
; the SDA and SCL lines, and no other masters are on the bus.
; 
; The SEND routine performs a 1-byte write to the EEPROM.  This consists of (1) START, 
; (2) slave address + W, (3) memory location byte write, and (4) a data byte write.
; 
; STEPS FOR WRITING TO EEPROM:
;   1) Load slave address into SLA_ADD
;   2) Load memory address into MEM_ADD
;   3) Load data byte into TRANSMIT_BYTE. 
;   4) Call SEND
;
; The RECEIVE routine performs a 1-byte read from the EEPROM. This consists of (1)
; START, (2) slave address + W, (3) memory location byte write, (4) repeated START,
; (5) slave address + R, (6) data byte read.
;
; STEPS FOR RECEIVING DATA:
;   1) Load slave address into SLA_ADD
;   2) Load memory address into MEM_ADD
;   3) Call RECEIVE
;   4) Read RECEIVE_BYTE
;
; The SMBus state table is broken into 8-byte state segments, allowing the SMBus 
; status code (SMB0STA) to be used as a state index.  Note that this leaves only
; 8 bytes of code space per SMBus state definition. As a result, certain tasks
; have been altered to limit state definition lengths:
;
; 1) The SMB_MTDBACK state (Master transmitter, data byte sent, ACK received) is 
; reduced to a bit-check and branch operation.  The branch is outside of the state 
; table, so that a larger code segment may be executed for this state. 
;
; 2) Three data bytes are used for slave address storage: SLA_ADD, WRI_ADD, READ_ADD.
; Rather than using bit-wise operations in the SMBus states, each transfer routine 
; pre-loads the address values.  Since a RECEIVE includes both a WRITE and READ
; transfer, two address bytes are necessary - WRI_ADD and READ_ADD.  SLA_ADD is used
; as a generic slave chip select before a function call. 
;
; Note that SLA_ADD is equivalent to WRI_ADD, since WRI_ADD = SLA_ADD + W (W=0). 
; The two are left separate to clarify the demonstration.
;
;-----------------------------------------------------------------------------------

;-----------------------------------------------------------------------------------
; EQUATES
;-----------------------------------------------------------------------------------

   $include (c8051f000.inc)          ; Include register definition file.

   WRITE           EQU   00h         ; SMBus WRITE command
   READ            EQU   01h         ; SMBus READ command

   CHIP_A          EQU   0A0h        ; EEPROM slave address

   ; SMBus States
   SMB_BUS_ERROR   EQU   00h         ; (all modes) BUS ERROR
   SMB_START       EQU   08h         ; (MT & MR) START transmitted
   SMB_RP_START    EQU   10h         ; (MT & MR) repeated START
   SMB_MTADDACK    EQU   18h         ; (MT) Slave address + W transmitted;
                                     ;  ACK received
   SMB_MTADDNACK   EQU   20h         ; (MT) Slave address + W transmitted;
                                     ;  NACK received
   SMB_MTDBACK     EQU   28h         ; (MT) data byte transmitted; ACK rec'vd
   SMB_MTDBNACK    EQU   30h         ; (MT) data byte transmitted; NACK rec'vd
   SMB_MTARBLOST   EQU   38h         ; (MT) arbitration lost
   SMB_MRADDACK    EQU   40h         ; (MR) Slave address + R transmitted;
                                     ;  ACK received
   SMB_MRADDNACK   EQU   48h         ; (MR) Slave address + R transmitted;
                                     ;  NACK received
   SMB_MRDBACK     EQU   50h         ; (MR) data byte rec'vd; ACK transmitted
   SMB_MRDBNACK    EQU   58h         ; (MR) data byte rec'vd; NACK transmitted


;-----------------------------------------------------------------------------------
; VARIABLES
;-----------------------------------------------------------------------------------

MYDATA      SEGMENT DATA             ; declare DATA segment
            RSEG  MYDATA             ; select DATA segment


   TRANSMIT_BYTE:  DS    1           ; Holds a byte to be transmitted by the SMBus
   RECEIVE_BYTE:   DS    1           ; Holds a byte just received by the SMBus
   SLA_ADD:        DS    1           ; Holds the slave address
   WRI_ADD:        DS    1           ; Holds the slave address + WRITE
   READ_ADD:       DS    1           ; Holds the slave address + READ
   MEM_ADD:        DS    1           ; EEPROM memory location to be accessed
    
    ; Variables used for testing.
   TEST_COUNT:     DS    1           ; Test counter variable
   TEST_BYTE:      DS    1           ; Test data
   TEST_ADDR:      DS    1           ; Test memory location

MYBITS      SEGMENT BIT
            RSEG  MYBITS

   RW:             DBIT  1           ; R/W command bit. 1=READ, 0=WRITE
   SM_BUSY:        DBIT  1           ; SMBus Busy flag (kept in software)
   BYTE_SENT:      DBIT  1           ; Used to indicate what byte was just sent:
                                     ;   1: EEPROM memory address sent
                                     ;   0: Data byte sent
   
;-------------------
; STACK

STACK       SEGMENT IDATA            ; declare STACK segment
            RSEG  STACK
            DS 80h                   ; reserve 128 bytes for stack

;------------------------------------------------------------------------------------
; RESET and INTERRUPT VECTORS
;------------------------------------------------------------------------------------

CSEG
   
; Reset Vector
   org   00h
   ljmp  Reset_Vector
   
; SMBus Interrupt Vector
   org   03Bh
   ljmp  SMBus_ISR

MYCODE      SEGMENT CODE
            RSEG MYCODE
            USING 0
   
;--------------------------------------------------------------------------------------
; Reset Vector
; 
; - Disables Watchdog Timer
; - Routes SDA and SCL to GPIO pins via the crossbar
; - Enables crossbar
; - Jumps to MAIN


Reset_Vector:

   mov   WDTCN, #0DEh                 ; Disable Watchdog Timer
   mov   WDTCN, #0ADh

   mov   SP, #STACK                   ; Initialize Stack Pointer   

   orl   OSCICN, #03h                 ; Set internal oscillator to highest setting
                                      ; (16 MHz)

   mov   XBR0, #01h                   ; Route SMBus to GPIO pins through crossbar
   mov   XBR2, #40h                   ; Enable crossbar and weak pull-ups

   ljmp   MAIN

;------------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------------

MAIN:
   acall SMBus_Init                  ; Initialize SMBus
   setb  EA                          ; Enable global interrupts

   mov   TEST_BYTE, #0ffh            ;   
   mov   TEST_ADDR, #00h             ; Load initial test values
   mov   TEST_COUNT, #0feh           ;

; TEST CODE--------------------------------------------------------------------------


TEST:

   ; Send TEST_BYTE to memory location TEST_ADDR
   mov   SLA_ADD, #CHIP_A            ; Load slave address
   mov   TRANSMIT_BYTE, TEST_BYTE    ; Load transmit data into TRANSMIT_BYTE
   mov   MEM_ADD, TEST_ADDR          ; Load memory address into MEM_ADD
   acall SEND                        ; Call send routine

   ; Read memory location TEST_ADDR into RECEIVE_BYTE
   mov   SLA_ADD, #CHIP_A            ; Load slave address
   mov   MEM_ADD, TEST_ADDR          ; Load memory address into MEM_ADD
   acall RECEIVE                     ; Call receive routine

   ; Compare byte received to byte sent
   mov   A, RECEIVE_BYTE             ; Load received byte into accumulator
   cjne  A, TEST_BYTE, END_TEST      ; Compare sent byte to received byte
                                     ; Jump to END_TEST if not equal

   ; Change test variables
   dec   TEST_BYTE                   ; If sent=received, change test variables
   inc   TEST_ADDR                   ; and cycle through again.
   
   ; Cycle through again if TEST_COUNTER not zero   
   djnz  TEST_COUNT, TEST            ; Decrement counter, loop back to beginning
   mov   A, #99h                     ; Load accumulator with 99h if test successful.
   
END_TEST:

   jmp   $                           ; Spin
;---------------------------------------------------------------------------------------
; SUBROUTINES
;---------------------------------------------------------------------------------------

;---------------------------------------------------------------------------------------
; SEND subroutine.  Assumes that the slave address, memory location, and transmit
; data have all been loaded into their associated variables. This routine manages
; the SM_BUSY bit, sets RW=WRITE, loads the WRI_ADD, and initiates the transfer.
;
SEND:

   push   ACC                        ; Preserve accumulator
   jb     SM_BUSY, $                 ; Wait for SMBus to be free
   clr    RW                         ; RW = 0 (WRITE)


   mov    A, SLA_ADD                 ; Store SLA_ADD + WRITE
   orl    A, #WRITE                  ; in WRI_ADD
   mov    WRI_ADD, A                 ;

   setb   SM_BUSY                    ; Occupy SMBus
   setb   STA                        ; Initiate Transfer
   pop    ACC                        ; Restore accumulator

   ret

;---------------------------------------------------------------------------------------
; RECEIVE subroutine. Assumes that the slave address and memory location have been 
; loaded into their associated variables. This routine manages the SM_BUSY bit, sets
; RW=READ, loads the READ_ADD and WRI_ADD, and initiates the transfer.
; 
; Note that the RECEIVE transfer consists of a WRITE of the memory location to be accessed,
; followed by a repeated START and a READ operation.  Therefore, both WRI_ADD
; and READ_ADD are used by this routine.
RECEIVE:

   push  ACC                          ; Preserve accumulator
   jb    SM_BUSY, $                   ; Wait for SMBus to be free
   setb  RW                           ; RW = 1 (READ)

   mov   A, SLA_ADD                   ; Store SLA_ADD + WRITE
   orl   A, #WRITE                    ; in WRITE_ADD
   mov   WRI_ADD, A                   ;
   
   mov   A, SLA_ADD                   ; Store SLA_ADD + READ

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品你懂的| 国产美女精品人人做人人爽| 亚洲一区二区三区视频在线| 亚洲欧美日韩中文播放| 亚洲色欲色欲www| 中文字幕一区二区视频| 中文一区在线播放| 国产精品理论片| 国产精品久久久久影视| 亚洲视频电影在线| 亚洲精品久久7777| 亚洲成人av资源| 奇米一区二区三区| 久久99热狠狠色一区二区| 国产一区二区三区美女| 粗大黑人巨茎大战欧美成人| 91浏览器打开| 欧美美女直播网站| 欧美精品一区二区三区四区| 国产欧美中文在线| 亚洲欧洲综合另类在线| 天天色天天爱天天射综合| 美日韩一区二区| 国产精品亚洲第一区在线暖暖韩国| 国产成人精品免费一区二区| 91视频免费播放| 在线成人小视频| 精品sm在线观看| 亚洲欧洲一区二区三区| 亚洲成人三级小说| 国产美女精品在线| 日本韩国一区二区三区视频| 日韩一级高清毛片| 国产精品美女久久久久aⅴ| 亚洲一区在线视频观看| 久久99精品国产.久久久久 | 国产+成+人+亚洲欧洲自线| aaa欧美日韩| 欧美一级片在线观看| 中文字幕国产一区| 亚洲成人免费影院| 粉嫩一区二区三区性色av| 在线免费一区三区| 精品国产伦一区二区三区观看体验 | 欧美日韩国产乱码电影| 久久久99免费| 亚洲一二三区在线观看| 国产在线视频一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃 | 久久这里只有精品6| 亚洲精品美国一| 国产一区二区三区不卡在线观看 | 99精品一区二区三区| 宅男噜噜噜66一区二区66| 国产精品青草久久| 男人的j进女人的j一区| 色乱码一区二区三区88| 国产午夜亚洲精品理论片色戒| 午夜欧美2019年伦理| 国产乱码精品一区二区三区av| 欧美人伦禁忌dvd放荡欲情| 国产精品色眯眯| 久久66热偷产精品| 欧美三区在线观看| 日韩一区中文字幕| 国产精品亚洲午夜一区二区三区| 69堂亚洲精品首页| 亚洲小说欧美激情另类| 亚洲国产精品久久人人爱| 麻豆精品一区二区| av不卡在线播放| 国产亚洲一区二区三区四区| 日韩精品一级二级| 欧美在线观看一区二区| 国产日韩欧美激情| 国内精品国产成人| 91精品国产麻豆| 亚洲成人一区在线| 在线亚洲高清视频| 亚洲欧美一区二区三区孕妇| 国产在线国偷精品产拍免费yy| 欧美日韩成人综合天天影院| 亚洲综合丝袜美腿| 色天天综合色天天久久| 中文字幕一区二区三区乱码在线| 国产精品1区2区| 欧美精品一区二区高清在线观看 | 国产69精品久久777的优势| 精品国产污污免费网站入口 | 日本三级亚洲精品| 日本高清不卡视频| 日韩欧美不卡在线观看视频| 亚洲电影第三页| 色噜噜夜夜夜综合网| 国产精品久久久久婷婷| 不卡欧美aaaaa| 国产精品嫩草久久久久| 成人免费毛片aaaaa**| 国产日产欧美一区| 成人一区二区三区视频 | 国产a区久久久| 久久人人超碰精品| 精品一区二区日韩| 精品久久久久久综合日本欧美| 狂野欧美性猛交blacked| 欧美电视剧在线看免费| 麻豆国产精品一区二区三区 | 国产精品欧美一区二区三区| 国产成人aaa| 国产精品成人免费| 一本高清dvd不卡在线观看| 一区二区三区四区av| 欧美中文字幕一区二区三区| 亚洲成人精品在线观看| 欧美一级久久久久久久大片| 极品销魂美女一区二区三区| 国产欧美一区二区精品忘忧草| 丰满少妇久久久久久久| 中文字幕在线不卡视频| 91福利在线观看| 日本伊人色综合网| 久久久久久久久岛国免费| 成人久久视频在线观看| 一区二区三区成人| 91精品国产91久久久久久一区二区 | 日本一区二区三区在线不卡| 99久久免费精品高清特色大片| 一区二区三区视频在线观看| 欧美日本在线一区| 经典一区二区三区| 国产精品免费免费| 欧美午夜电影网| 狠狠色丁香婷综合久久| 成人免费在线视频| 欧美日韩激情一区二区| 国产剧情在线观看一区二区| 亚洲精品一二三| 欧美一区二区观看视频| 国产**成人网毛片九色| 亚洲综合免费观看高清完整版在线| 日韩写真欧美这视频| 丁香婷婷深情五月亚洲| 亚洲精品福利视频网站| 26uuu另类欧美| 91国产视频在线观看| 九九国产精品视频| 亚洲女性喷水在线观看一区| 日韩三级免费观看| 色婷婷久久久亚洲一区二区三区| 精品一区二区免费视频| 亚洲激情校园春色| 久久久精品国产免大香伊| 欧美日韩在线精品一区二区三区激情 | 亚洲aⅴ怡春院| 欧美国产97人人爽人人喊| 正在播放一区二区| 成人av第一页| 久久99久久久欧美国产| 亚洲精品高清在线观看| 国产视频911| 欧美一区二区三区婷婷月色| 94-欧美-setu| 国产成人av资源| 日韩精品亚洲专区| 日韩理论片在线| 久久久久久亚洲综合| 正在播放亚洲一区| 在线视频中文字幕一区二区| 国产精品一区专区| 美洲天堂一区二卡三卡四卡视频 | 国产a区久久久| 久久99国产乱子伦精品免费| 亚洲成人在线网站| 亚洲欧洲成人精品av97| 久久婷婷色综合| 日韩欧美国产综合| 欧美日本精品一区二区三区| 色综合久久久久久久久| 国产成人午夜精品5599| 麻豆91在线观看| 日本亚洲天堂网| 亚洲一区二区三区四区的| 亚洲欧美国产毛片在线| 国产精品久久777777| 国产欧美精品一区| 久久色.com| 日韩精品中文字幕在线一区| 欧美高清视频不卡网| 欧美日韩日日夜夜| 色av一区二区| 91小视频免费观看| 666欧美在线视频| 欧美伊人久久大香线蕉综合69| 99re这里都是精品| 91在线无精精品入口| 成人午夜电影久久影院| 国产白丝精品91爽爽久久| 国产精品综合二区| 国产成人午夜精品5599| 国产乱码字幕精品高清av|