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

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

?? 8051 smb (asm).asm

?? SMBUS function by 8051 (assembly)
?? 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一区二区三区免费野_久草精品视频
日韩久久久精品| 日韩精品一区二区在线观看| 日本欧美一区二区三区| 亚洲免费av在线| 中文字幕不卡在线播放| 日韩免费高清电影| 欧美一级艳片视频免费观看| 欧美视频在线观看一区二区| 在线中文字幕一区二区| va亚洲va日韩不卡在线观看| 国产成人丝袜美腿| 丁香六月久久综合狠狠色| 国产成人福利片| 国产成人啪午夜精品网站男同| 精品一区二区综合| 激情文学综合插| 激情综合色综合久久| 激情五月婷婷综合| 精品夜夜嗨av一区二区三区| 久久爱www久久做| 国产综合色视频| 粉嫩一区二区三区在线看| 国产1区2区3区精品美女| 国产成人综合在线播放| 成人在线综合网站| 欧美在线你懂的| 制服丝袜成人动漫| 精品国产成人在线影院| 国产人伦精品一区二区| 1000部国产精品成人观看| 亚洲日穴在线视频| 肉色丝袜一区二区| 国产资源在线一区| av一二三不卡影片| 欧美三级电影网| 精品对白一区国产伦| 国产精品美女www爽爽爽| 亚洲一区中文在线| 激情图区综合网| 91日韩精品一区| 日韩三区在线观看| 国产免费成人在线视频| 亚洲在线视频免费观看| 久久99热这里只有精品| 91亚洲永久精品| 日韩视频一区二区三区| 中文字幕中文字幕在线一区 | 色狠狠av一区二区三区| 91精品国产综合久久福利软件| 久久精品一区二区三区av| 一区二区三区四区蜜桃| 精品一区二区三区的国产在线播放 | 国精产品一区一区三区mba视频 | 成人国产一区二区三区精品| 欧美性做爰猛烈叫床潮| 国产精品久久久久久久久果冻传媒 | 激情偷乱视频一区二区三区| 91美女福利视频| 69堂国产成人免费视频| 亚洲丝袜制服诱惑| 麻豆精品视频在线| 欧美私人免费视频| 亚洲欧洲av另类| 国产精品资源网站| 欧美成人官网二区| 亚洲va欧美va天堂v国产综合| 成人在线视频一区二区| 久久夜色精品国产欧美乱极品| 亚洲成精国产精品女| 99re热这里只有精品视频| 精品盗摄一区二区三区| 五月综合激情网| 在线观看免费一区| 亚洲日本在线看| 成人久久18免费网站麻豆| 久久久一区二区| 久久成人羞羞网站| 精品伦理精品一区| 久久99久久99| 欧美不卡一区二区三区四区| 天堂在线亚洲视频| 欧美日韩大陆在线| 亚洲成人激情av| 欧美精品一二三四| 奇米亚洲午夜久久精品| 日韩一区二区三区电影| 天涯成人国产亚洲精品一区av| 91国产丝袜在线播放| 亚洲自拍偷拍网站| 欧美日韩小视频| 日本va欧美va瓶| 欧美精品一区二区三区蜜臀| 久久不见久久见免费视频7 | 日本v片在线高清不卡在线观看| 欧美日韩成人在线| 蜜桃av一区二区在线观看| 日韩精品一区二区三区在线播放 | 91精品国产全国免费观看 | 亚洲成人一区在线| 欧美人妇做爰xxxⅹ性高电影| 日本一不卡视频| 欧美成va人片在线观看| 成人丝袜高跟foot| 中文字幕亚洲不卡| 欧美日韩精品电影| 国内外成人在线视频| 欧美国产视频在线| 91国产精品成人| 日本成人中文字幕在线视频 | 国模冰冰炮一区二区| 国产精品亲子伦对白| 欧美亚洲高清一区| 精品无人码麻豆乱码1区2区 | 99re8在线精品视频免费播放| 一区二区在线电影| 欧美精品黑人性xxxx| 国产麻豆视频精品| 亚洲码国产岛国毛片在线| 欧美高清www午色夜在线视频| 国产一区 二区| 亚洲五码中文字幕| 久久这里都是精品| 色婷婷av一区| 国内精品自线一区二区三区视频| 亚洲欧洲日产国产综合网| 欧美日韩一二三区| 国产精品91xxx| 亚洲成人激情av| 国产精品久久影院| 精品三级在线看| 日本电影欧美片| 国产剧情一区二区三区| 亚洲一区二区综合| 久久先锋影音av| 91精品欧美久久久久久动漫| 国产成都精品91一区二区三| 亚洲精品久久久久久国产精华液| 精品久久久久久无| 欧美高清dvd| 欧美日韩在线直播| 粉嫩绯色av一区二区在线观看| 日韩中文字幕亚洲一区二区va在线| 国产精品免费av| 国产欧美中文在线| 精品国产露脸精彩对白| 51精品久久久久久久蜜臀| 91麻豆产精品久久久久久| 精品一区二区免费| 蜜芽一区二区三区| 视频在线观看一区二区三区| 国产精品福利影院| 久久久不卡网国产精品二区| 91精品久久久久久久久99蜜臂| 色婷婷亚洲精品| 成人黄色大片在线观看| 国产九色精品成人porny| 老色鬼精品视频在线观看播放| 亚洲国产精品麻豆| 亚洲精品国久久99热| 亚洲欧洲国产日本综合| 国产精品剧情在线亚洲| 国产精品拍天天在线| 国产精品久久久久久久蜜臀 | 精品国产乱子伦一区| 日韩美女一区二区三区四区| 日韩一区二区电影网| 欧美日韩免费电影| 欧美久久久影院| 91精品久久久久久蜜臀| 精品欧美一区二区在线观看| 精品国产免费人成在线观看| 欧美精品一区二区三区在线播放 | 4438亚洲最大| 日韩一区二区麻豆国产| 精品三级av在线| 久久精品视频免费观看| 国产精品无码永久免费888| 国产精品嫩草影院av蜜臀| 国产精品白丝在线| 亚洲自拍偷拍欧美| 日韩不卡手机在线v区| 看片网站欧美日韩| 国产成人精品免费在线| 99re热视频这里只精品 | 一区二区三区在线免费观看| 亚洲午夜久久久久久久久电影院 | 亚洲sss视频在线视频| 蜜臀av亚洲一区中文字幕| 国产一区二区三区免费在线观看| 成人综合婷婷国产精品久久蜜臀 | 亚洲日本免费电影| 爽爽淫人综合网网站| 极品销魂美女一区二区三区| 国产ts人妖一区二区| 欧美无砖专区一中文字| 久久午夜免费电影| 亚洲午夜在线视频| 国产成人午夜精品影院观看视频 | 亚洲午夜免费视频| 国产精品亚洲专一区二区三区|