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

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

?? smb_ex1.asm

?? c8051f020 i2c 源碼。對其操作有詳細(xì)描述。
?? 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜私人影院| 精品欧美黑人一区二区三区| 另类的小说在线视频另类成人小视频在线| 337p日本欧洲亚洲大胆精品 | 中文一区二区在线观看| 日本一区二区三区国色天香| 国产欧美一区二区在线观看| 欧美国产日韩a欧美在线观看| 国产精品人妖ts系列视频| 亚洲国产精品高清| 国产欧美va欧美不卡在线| 亚洲欧美偷拍卡通变态| 成人av小说网| 99久久国产综合色|国产精品| 激情成人午夜视频| 91美女蜜桃在线| 日韩一区二区三区在线观看| 国产日韩欧美高清| 午夜精品爽啪视频| 波多野结衣精品在线| 欧美www视频| 亚洲成人一区二区| 九色porny丨国产精品| 欧美人体做爰大胆视频| 国产精品短视频| 成人一区在线观看| 国产精品麻豆99久久久久久| 婷婷综合久久一区二区三区| 美女国产一区二区| 欧美大片日本大片免费观看| 国产真实乱对白精彩久久| 亚洲欧洲国产日韩| 亚洲aaa精品| 91在线视频免费观看| 国产精品每日更新在线播放网址 | av在线一区二区| 国产日韩欧美亚洲| 成人午夜电影小说| 中文字幕在线一区免费| 日本道色综合久久| 一区二区三区免费看视频| 在线观看三级视频欧美| 国产欧美日本一区二区三区| 成人一道本在线| 中文字幕国产精品一区二区| av网站免费线看精品| 1区2区3区欧美| 欧美丰满少妇xxxxx高潮对白| 免费观看在线色综合| 久久蜜臀中文字幕| 婷婷综合五月天| 91麻豆自制传媒国产之光| 97成人超碰视| 天堂久久久久va久久久久| 91视视频在线观看入口直接观看www| 色999日韩国产欧美一区二区| 97se狠狠狠综合亚洲狠狠| 欧美不卡一区二区三区| 成人av在线网| 国产一区二区美女| 亚洲福中文字幕伊人影院| 日韩情涩欧美日韩视频| 白白色亚洲国产精品| 免费欧美在线视频| 亚洲图片欧美综合| 国产亚洲美州欧州综合国| 欧美日韩在线播放一区| 成人一区二区三区| 国产91丝袜在线观看| 午夜视频一区二区| 亚洲免费av观看| 亚洲欧美视频在线观看视频| 中文字幕的久久| 国产欧美一区二区三区鸳鸯浴| 欧美大片在线观看一区二区| 欧美大片在线观看| 日韩欧美中文字幕公布| 日韩一区二区三区电影在线观看 | 欧美激情一区二区三区| 久久免费精品国产久精品久久久久| 国产丝袜欧美中文另类| 国产一区二区电影| 国产大片一区二区| 99久久国产综合色|国产精品| 成人av高清在线| 日本福利一区二区| 欧美一区二区福利在线| 久久久精品欧美丰满| 亚洲另类中文字| 久久精品国产**网站演员| 亚洲午夜精品久久久久久久久| 精品福利一二区| 亚洲天堂精品视频| 免费在线观看一区二区三区| 国产福利电影一区二区三区| 人人精品人人爱| av不卡在线播放| 2020日本不卡一区二区视频| 樱桃视频在线观看一区| 国产成人三级在线观看| 欧美一级二级在线观看| 亚洲欧洲综合另类| 成人在线视频一区| 精品精品欲导航| 午夜精品视频一区| 欧美性欧美巨大黑白大战| 欧美国产国产综合| 成人免费视频一区二区| 日韩免费福利电影在线观看| 91国偷自产一区二区三区观看| 日韩一二三区视频| 亚洲一区二区三区四区中文字幕| 国产成人在线看| 日韩女优av电影| 国产一区二区三区免费看 | 国产精品狼人久久影院观看方式| 日韩国产高清在线| 欧美精品少妇一区二区三区| 亚洲午夜激情av| 91精品国产一区二区三区| 免费一级欧美片在线观看| 亚洲国产精品成人综合| 国产精品国产自产拍高清av| 日韩成人av影视| 久久久午夜精品| 91麻豆福利精品推荐| 丝袜美腿一区二区三区| 国产日韩欧美精品综合| 成人高清免费观看| 日韩综合小视频| 中文字幕视频一区| 欧美一区二区在线看| 国产成人aaaa| 一区二区三区不卡视频| 大尺度一区二区| 日韩不卡一区二区三区 | a4yy欧美一区二区三区| 亚洲成人av福利| 久久蜜桃av一区精品变态类天堂 | 欧美精品久久一区二区三区| 久久精品国产精品亚洲综合| 亚洲福利视频一区二区| 国产亚洲欧美中文| 欧美成人精品3d动漫h| 欧美色图在线观看| 成人免费va视频| 日本中文字幕一区二区视频| 精品国产91久久久久久久妲己| 日韩不卡一二三区| 亚洲国产欧美日韩另类综合| 国产精品美女久久久久aⅴ| 日韩一区二区在线观看视频播放| 99精品久久久久久| 国产麻豆精品在线观看| 国内精品免费**视频| 蜜臀av一区二区在线观看| 毛片av一区二区| 日韩在线一二三区| 久久精品国产精品亚洲红杏| 天天色天天操综合| 国内不卡的二区三区中文字幕 | 欧美不卡一区二区三区| 欧美日韩一区二区三区免费看 | 国产精品成人一区二区艾草 | 久久综合久久鬼色| 国产精品久久久久aaaa| 亚洲一区中文在线| 蜜臀91精品一区二区三区| 久久99国产精品麻豆| 99精品国产91久久久久久 | 国产福利一区二区三区在线视频| 日韩精品乱码免费| 亚洲国产欧美另类丝袜| 麻豆中文一区二区| 欧洲视频一区二区| 欧美va亚洲va在线观看蝴蝶网| 中文字幕一区在线| 国产在线不卡一卡二卡三卡四卡| aaa亚洲精品| 中文欧美字幕免费| 另类的小说在线视频另类成人小视频在线 | 国产99精品视频| 欧美一级黄色片| 亚洲成人一区在线| 欧洲视频一区二区| 色综合久久久久久久久久久| 日韩一区二区电影| 午夜久久久久久久久| 欧美色图免费看| 亚洲一级二级在线| 91麻豆精品久久久久蜜臀| 亚洲综合一二三区| 欧美喷水一区二区| 加勒比av一区二区| 欧美国产激情一区二区三区蜜月| 成人高清视频在线| 依依成人精品视频| 日韩视频在线你懂得| 国产美女一区二区三区| 中文字幕日韩欧美一区二区三区|