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

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

?? wds18b20.asm

?? c8051f020源代碼39個 使用Silicon Labs IDE 調試器
?? ASM
字號:
;參考程序B: 程序名WDS18B20.ASM程序功能:DS18B20采樣得到的溫度值存入72H--75H中,再傳送到SAA1064驅動的四位數碼管上顯示.
$include (c8051f020.inc)
DAT      EQU   P0.2
TEMPH    EQU   20H
TEMPL    EQU   21H
SAA1064ADR      EQU   070H        ; SAA1064芯片的寫地址
   ;SMBus狀態:
 SMB_BUS_ERROR   EQU   00H  ;(所有方式)總線錯誤
 SMB_START       EQU   08H 
;(MT&MR)主收發器發送起始位成功.再將從機寫地,址送SMB0DAT
 SMB_RP_START    EQU   10H  
;(MT&MR)主收發器重復發送起始位成功,再將從機讀地址送SMB0DAT
 SMB_MTADDACK    EQU   18H  ;(MT)主收發器發送從地址+W成功;收到 ACK(從
;機應答) ;再將從器件的子地址送入SMB0DAT
 SMB_MTADDNACK   EQU   20H 
 ;(MT)主收發器發送從地址+W成功;收到 NACK(從機無應答)
 SMB_MTDBACK     EQU   28H  
;(MT)主收發器發送數據字節成功;收到ACK(從機應答)
 SMB_MTDBNACK    EQU   30H 
 ;(MT)主發送器發送數據成功;收到NACK(從機無應答).
 SMB_MTARBLOST   EQU   38H  ;(MT)總線競爭失敗
 SMB_MRADDACK    EQU   40H 
 ;(MR)主收發器發送從地址+R成功;收到 ACK(從機應答)
 SMB_MRADDNACK   EQU   48H  
;(MR)主收發器發送從地址+R成功;收到NACK(從機無應答)
 SMB_MRDBACK     EQU   50H  ;(MR)主收發器接收數據成功;主機發送ACK 
 SMB_MRDBNACK    EQU   58H  ;(MR)主收發器接收數據成功;主機發送NACK 
DSEG						;	數據段;
ORG       30H;
    TRANSMIT_BYTE: DS    1          ;保存SMBus待發送的字節
    RECEIVE_BYTE:  DS    1         ; 保存SMBus剛收到的字節
    SLA_ADD:       DS    1          ;保存從地址
    WRI_ADD:       DS    1         ; 保存從地址+ WRITE
    READ_ADD:      DS    1         ; 保存從地址+ READ
    SUBADDR:       DS    1          ;要訪問器件的子地址
   ; 用于暫存數據的單元
    DATA_COUNT:    DS    1          ;測試計數器變量
    DATA_BYTE:     DS    1         ; 測試數據
    DATA_ADDR:     DS    1        ;  測試存儲器地址
BSEG						;	數據段;
ORG      00H
    RW:            DBIT  1           ;R/W命令位。l=READ,0=WRITE
    SM_BUSY:       DBIT  1          ;SMBus忙標志(軟件保存)
    BYTE_SENT :    DBIT  1  
CSEG    ;代碼段
         ORG      00H         ;復位
         LJMP     DS18B20
         ORG     03BH        ;SMBus中斷向量
          LJMP    SMBus_ISR
    ORG    100H   
DS18B20: MOV	  WDTCN,#0deH   ;關看門狗
	     MOV  	WDTCN,#0adH
	     LCALL  PORT_Init
		 MOV    XBR2,#40H	      ;使能交叉開關和弱上拉
MAIN:    LCALL  RDTEMP
		 LCALL  DELAY            ;延時
		SETB   EA
         LCALL  DISPLAY    ;用SAA1064驅動四位數碼管顯示四位溫度值.
         LCALL  BELL
         SJMP   MAIN
EXCHANG: MOV   A,21H      ;DS18B20采集到的原始數據已存放在20H,21H中.
         MOV   B,#16             ;數據處理:將原始轉換為十進制數據,存放在
		 DIV   AB                ;72H(百位),73H(十位),74H(個位),75H(小數位)中.
         MOV   74H,A
         MOV   A,20H      
         MOV   B,#16
         MUL   AB
         ADD    A,74H
         MOV   B,#10
         DIV   AB
         MOV   74H,B
         MOV   B,#10
         DIV   AB
         MOV   73H,B
         MOV   72H,A
         MOV   71H,#0
         MOV   A,21H
         ANL   A,#0FH
         MOV   B,#8
         DIV   AB
         MOV   75H,#0
         CJNE   A,#1,SSS
         MOV   75H,#5
 SSS:    RET
RDTEMP:   CLR    EA
          LCALL   RESET        ;復位
          MOV     A,#0CCH     ;發SKIP ROM 命令
          LCALL   WRITE
          MOV     A,#44H       ;發開始溫度轉換命令
          LCALL   WRITE
          LCALL   RESET
          MOV     A,#0CCH      ;發SKIP ROM 命令       
          LCALL   WRITE
          MOV     A,#0BEH     ;  發讀存儲器命令
          LCALL   WRITE
          LCALL   READ       ;  讀出溫度的低字節
          MOV     B,A
          MOV     TEMPL,A
          LCALL   READ        ; 讀出溫度的高字節
          MOV     TEMPH,A
          LCALL   EXCHANG
          SETB   EA
          RET
RESET:    ;復位子程序   
LA:      SETB   DAT 
         MOV    R2,#200
LB:      CLR    DAT
         DJNZ   R2,LB
         SETB   DAT
         MOV    R2,  #30
LC:      DJNZ   R2,LC
         CLR    C
         ORL    C,DAT
         JC     LB
         MOV    R6,#80
LD:      ORL    C,DAT
         JC     LP
         DJNZ   R6,LD
         SJMP   LA
         DJNZ   R6,LD
LP:      MOV    R2,#250
LF:      DJNZ   R2,LF
         RET
WRITE:     ;寫字節子程序 
           MOV   R3,#8    
WR1:       SETB  DAT
           MOV   R4,#8      
           RRC   A
           CLR   DAT
WR2:       DJNZ  R4,WR2  ; DELAY  16US
           MOV   DAT   ,C
           MOV   R4,#30
WR3:       DJNZ  R4,WR3
           DJNZ  R3,WR1
           SETB  DAT
           RET 
READ:     CLR    EA     ;讀字節子程序
           MOV    R6,#8
RD1:       CLR    DAT
           MOV    R4,#6
           NOP
           SETB   DAT
RD2:       DJNZ   R4,RD2
           MOV    C,DAT
           RRC    A
           MOV    R5,#30
RD3:       DJNZ   R5,RD3
           DJNZ   R6,RD1
           SETB   DAT
		   SETB   EA
           RET
 DELAY:    MOV    R7,#10   ;延時
    DL2:   MOV    R6,#200         
DL1:   MOV    R5,#250       
DL0:   DJNZ   R5,DL0
           DJNZ   R6,DL1
           DJNZ   R7,DL2
           RET  
    BELL: CLR   P3.5
		  MOV   R7,#1
		  ACALL  DL2
          SETB    P3.5
		 MOV   R7,#20
		 ACALL  DL2
         RET 
DISPLAY:CLR    SM_BUSY          ;為第一次傳輸清除SM_Busy標志
		MOV    R1,#50H          ;從50H--5EH 看中斷過程
; SAA1064W: 依次連續寫入5個數到SAA1064中去:17H,3FH,06H,5BH,4FH
        MOV     SUBADDR,#00H ; 裝入SAA1064的子地址(SUBADR=00H)
        MOV     DATA_COUNT,#6H    ; 裝入待寫數據塊的長度
        MOV     SLA_ADD,#SAA1064ADR   ; 裝入從器件的寫地址
		MOV     71H,#0AH
		MOV     R0,#71H                  ; R0做計數器用
        LCALL   SEND   
		CLR     EA                ; 調用數據發送子程序
    	RET                       ; SAA1064顯示結束結束,返回主程序
TAB:    DB  3fH,06H,5bH,4FH,66H,6DH,7DH,07H,7FH,6FH,17H
;發送子程序SEND;
;SEND子程序執行一次向SAA1064寫入六位數據(0,17H,4FH,5BH,06H,3FH)的過程。
;該子程序管理SM_BUSY位,設置 RW=WRITE,裝載 SLAW,啟動寫操作。
     SEND:
     PUSH     ACC                  ;保存累加器
     JB       SM_BUSY,$            ;等待SMBus空閑
     CLR      RW                    ; RW= 0(寫)
     MOV      A,SLA_ADD             ; 取SLA_ADD到A 
     MOV      WRI_ADD,A            ;將SLA_ADD+ WRITE保存到SLAW
	 SETB     SM_BUSY             ; 占用SMBus
     SETB     STA                 ; 啟動發送過程
     JB       SM_BUSY,$            ;等待發送結束(在中斷中處理)
     POP      ACC     
	 RET               
;SMBus 中斷程序 ,處理SMBUS 中斷
    SMBus_ISR:
    PUSH     PSW                ; 保護現場
    PUSH     ACC                ; 
    PUSH     DPH                ;  
    PUSH     DPL                ; 
    MOV     A,SMB0STA   ; 將當前SMBus狀態(SMB0STA)裝入累加器
                        ;  每個狀態對應一個地址偏移量
    ANL      A,#7FH     ; 屏蔽最高位
    MOV    @R1,A       ;在50H---60H中存放SMB0STA和SMB0DAT,可查看中斷路徑
	INC    R1
	MOV    @R1,SMB0DAT;
	INC    R1                              
    MOV     DPTR,#SMB_STATE_TABLE ; DPTR指向狀態表的起始地址
    JMP    @A+DPTR                ;轉移到當前狀態
;SMBuS狀態表                      ;(SMB0STA  =00H)
    SMB_STATE_TABLE: ; SMB_BUS_ERROR總線錯誤(對所有方式)
     ORG   SMB_STATE_TABLE+SMB_BUS_ERROR    
    SETB   STO         ; 停止位置1,使硬件復位
    JMP   SMB_ISR_END    ; 中斷返回
 ;SMB_START     ;                  (SMB0STA  =08H)
 ;主發送器/接收器發送起始位成功.再將從機寫地址送SMB0DAT并清除START位.
    ORG    SMB_STATE_TABLE+SMB_START        
    MOV    SMB0DAT,WRI_ADD        ; 裝載從地址+ W````
    CLR    STA                     ; 清除START位
    JMP    SMB_ISR_END             ; 中斷返回
;SMB_RP_START                    ;(SMB0STA  =10H)
;主發送器/接收器發送重復起始位成功.
;再將從機讀地址送SMB0DAT并清除START位.
    ORG   SMB_STATE_TABLE+SMB_RP_START      
    MOV   SMB0DAT,READ_ADD         ;裝載從地址+ R
    CLR   STA                      ; 清除START位
    JMP   SMB_ISR_END
;SMB_MTADDACK                      (SMB0STA  =18H)
;主發送器(MT)發送從地址+W成功;收到 ACK(從機應答)
;再將要發的子地址送入SMB0DAT.
 ORG    SMB_STATE_TABLE+SMB_MTADDACK      
 MOV    SMB0DAT,SUBADDR          ;裝載從器件的子地址到SMB0DAT.
 SETB   BYTE_SENT ;BYTE_SENT=1.在下一次中斷調用時存儲器地址剛被發送
JMP   SMB_ISR_END
;SMB_MTADDNACK                       (SMB0STA  =20H)
;主發送器(MT)發送從地址+W成功;收到 NACK(從機無應答)
;用確認查詢重試。發送 STOP+START
ORG    SMB_STATE_TABLE + SMB_MTADDNACK       
   SETB    STO
   SETB    STA
   JMP     SMB_ISR_END
;SMB_MTDBACK                            SMB0STA  =28H)
;主發送器(MT)發送數據字節成功;收到ACK(從機應答) 
;檢查BYTE_SENT:如果為1,說明剛發出的是存儲器地址;為0,剛發出的是數據字節    
 ORG   SMB_STATE_TABLE+SMB_MTDBACK
  DJNZ   DATA_COUNT,ADDRESS_SENT
 ;JBC   BYTE_SENT,ADDRESS_SENT  ;如果BYTE_SENT=1,清除該位并轉到
                               ;ADDRESS_SENT去執行狀態表以外的處理程序
    JMP   DATA_SENT            ; 如果BYTE_SENT=0,數據剛被發出,
                               ; 傳輸過程完成,轉到傳輸結束
;SMB_MTDBNACK                ;(SMB0STA  =30H)
;主發送器(MT)發送數據成功;收到NACK,從機無應答.
;用確認查詢重試。發送STOP+START重試
   ORG   SMB_STATE_TABLE+SMB_MTDBNACK       
   SETB     STO
   SETB     STA
   JMP     SMB_ISR_END
; SMB_MTARBLOST      ;(SMB0STA  =38H);競爭失敗.重新啟動傳輸.
   ORG    SMB_STATE_TABLE+SMB_MTARBLOST     
    SETB     STO
    SETB     STA
   JMP     SMB_ISR_END
; SMB_MRADDACK                          ;(SMB0STA  =40H)
;(MR)主收發器發送從地址+R成功;收到 ACK(從機應答).主機發送ACK.
   ORG     SMB_STATE_TABLE+SMB_MRADDACK      
  SETB   AA   ;主機發送ACK,轉入SMB_MRDBACK 	
  JMP     SMB_ISR_END
; SMB_MRADDNACK                   ;(SMB0STA  =48H)
;(MR)主收發器發送從地址+R成功;收到NACK(從機無應答),發送重復起始位重試
   ORG     SMB_STATE_TABLE+SMB_MRADDNACK   
			SETB    STA
      JMP    SMB_ISR_END
;SMB_MRDBACK                    (SMB0STA  =50H)
;(MR)主收發器接收數據成功;主機發送ACK .
  ORG    SMB_STATE_TABLE+SMB_MRDBACK       
MOV    RECEIVE_BYTE, SMB0DAT
CLR    AA ;主機發NACK(清除AA),下一次中斷來時轉入;SMB_MRDBNACK(58H)
CLR    SM_BUSY;
  JMP     SMB_ISR_END
;SMB_MRDBNACK                  ;(SMB0STA  =58H)
;(MR)主收發器接收數據成功;主機發送NACK 
;讀操作完成。讀數據寄存器并發送STOP
      ORG     SMB_STATE_TABLE+SMB_MRDBNACK     
      MOV    RECEIVE_BYTE, SMB0DAT
      SETB    STO
	  SETB    AA       ;主機發ACK,為下一次傳輸置位AA
      CLR    SM_BUSY;
      JMP    SMB_ISR_END
;狀態表結束,處理"SMB_MTDBACK"狀態碼的程序段。
;對于地址字節剛發出的狀態。通過檢查RW位確定處理方法。
;如果為讀,則轉到RW_READ,如果為寫,則將待發送數據裝入SMBODAT。
    ADDRESS_SENT:
		MOV     DPTR,#TAB   ;查表,找到顯示的數據(字型碼)
		MOV     A,@R0
		MOVC    A,@A+DPTR     
       MOV     DATA_BYTE ,A   
		INC     R0  
	   CJNE    R0,#75H,VV
		ADD     A,#80H
       MOV     DATA_BYTE ,A   
VV:    MOV     SMB0DAT,DATA_BYTE ;將要顯示的數據(字型碼)送SAA1064
	    JMP     SMB_ISR_END            ; 中斷返回
;對于地址字節剛發出的狀態。重復發送START,啟動存儲器讀操作
    RW_READ:
    SETB      STA                    ;重復發送START
    JMP      SMB_ISR_END            ;中斷返回
;這是一個寫操作,數據字節已發出。傳輸過程結束。發送STOP,釋放總線,中斷返回
    DATA_SENT:
    SETB    STO                     ;發送STOP后中斷返回
    CLR     SM_BUSY                ; 釋放 SMBus
    JMP     SMB_ISR_END            ; 中斷返回
;SMBus ISR exit
;恢復現場,清除SI位,從中斷返回
   SMB_ISR_END:
    CLR    SI
    POP    DPL 
    POP    DPH
    POP    ACC
    POP    PSW
    RETI
PORT_Init :
   MOV    OSCICN,#14H        ;內部晶振設定為2MHZ
   MOV    P0MDOUT,#0FFH      ;P0口為開漏方式
   MOV    XBR0,#01H  ;通過功能選擇開關將將SDA接P0.0引腳,SCL接P0.1引腳
   MOV    XBR2 ,#40H;      允許功能選擇開關和弱上拉
 ; 初始化SMBus程序段
   MOV   SMB0CN,#04H     ; 配置 SMBus在確認周期發送 ACK
   MOV   SMB0CR,#0F6H    ; 設置時鐘速率=100 kHz (內部晶振設定為2MHZ)
   ORL   SMB0CN,#40H     ; 允許SMBus
   ORL    EIE1,#02H      ; 允許SMBus中斷
	SETB   EA
   RET
	 END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品aaa| 成熟亚洲日本毛茸茸凸凹| 另类综合日韩欧美亚洲| 成人av综合在线| 日韩欧美一级二级三级| 亚洲成人av一区二区三区| 成人综合在线观看| 精品成人在线观看| 亚洲mv在线观看| 色婷婷精品大在线视频| 欧美激情一区二区三区全黄| 蜜臀久久久99精品久久久久久| 91天堂素人约啪| 国产视频一区二区三区在线观看| 日韩电影在线观看网站| 欧美性受xxxx黑人xyx| 日韩一区中文字幕| 国产成人午夜精品5599| 日韩欧美在线不卡| 视频一区欧美精品| 欧美综合一区二区| 亚洲欧美日韩中文字幕一区二区三区| 国产乱码精品一品二品| 日韩免费高清av| 日本中文字幕不卡| 欧美精品777| 亚洲成av人影院在线观看网| 在线日韩av片| 亚洲精品国产无套在线观| 91丨九色丨蝌蚪丨老版| 国产精品色在线| 高清国产一区二区| 欧美激情一二三区| aa级大片欧美| 国产精品久久久久精k8| 成人国产亚洲欧美成人综合网 | 久久综合av免费| 国产主播一区二区| 久久久精品中文字幕麻豆发布| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩欧美国产综合在线一区二区三区| 日韩二区在线观看| 精品日韩一区二区三区免费视频| 青青草97国产精品免费观看无弹窗版| 这里只有精品电影| 极品少妇xxxx精品少妇| 精品国产伦一区二区三区免费| 黄色精品一二区| 久久久99久久| 色综合久久中文综合久久牛| 亚洲精品成人悠悠色影视| 在线免费视频一区二区| 天堂av在线一区| 日韩一区二区免费高清| 丁香一区二区三区| 一区二区三区四区蜜桃 | av电影天堂一区二区在线| 一区二区三区小说| 日韩片之四级片| 成人福利视频在线| 午夜精品成人在线视频| 久久精品亚洲乱码伦伦中文| 播五月开心婷婷综合| 亚洲成a人v欧美综合天堂下载| 欧美变态tickling挠脚心| 国产经典欧美精品| 亚洲婷婷综合久久一本伊一区| 欧美日本在线一区| 国产91丝袜在线18| 亚洲一区二区三区四区在线| 欧美mv日韩mv| 欧美在线视频不卡| 成人午夜免费av| 亚洲电影在线播放| 欧美国产日韩a欧美在线观看| 日本韩国精品在线| 国产自产2019最新不卡| 亚洲一二三四在线观看| 久久婷婷国产综合国色天香| 色婷婷综合五月| 韩国欧美国产1区| 亚洲电影中文字幕在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 欧美视频一区二| 成人少妇影院yyyy| 免费人成精品欧美精品| 亚洲乱码中文字幕综合| 久久综合99re88久久爱| 欧美精品国产精品| www.激情成人| 国产精品综合久久| 日韩av二区在线播放| 亚洲精选视频在线| 国产婷婷色一区二区三区在线| 97久久超碰国产精品| 国产精品一区不卡| 久久99国产乱子伦精品免费| 午夜精品久久久久久不卡8050| ●精品国产综合乱码久久久久| 日韩区在线观看| 欧美一区二区三区免费| 欧美亚洲日本国产| 91成人国产精品| 色哟哟精品一区| 成人av在线网| 成人午夜大片免费观看| 国产精品1区2区3区| 极品美女销魂一区二区三区免费 | 中文字幕日本不卡| 久久久五月婷婷| 精品久久久久久久久久久院品网| 欧美一区二区三区在线电影| 欧美日韩一区二区在线视频| 91九色最新地址| 91丝袜美女网| 色婷婷一区二区三区四区| 欧美在线视频全部完| 在线免费观看日本欧美| 一本大道久久a久久精二百| bt欧美亚洲午夜电影天堂| 成人精品视频一区二区三区尤物| 成人免费av在线| 9l国产精品久久久久麻豆| 北岛玲一区二区三区四区| 99综合电影在线视频| 色婷婷综合久久久中文字幕| 在线视频一区二区免费| 在线不卡一区二区| 日韩三级免费观看| 久久久久综合网| 国产精品美女久久久久aⅴ | 久久久九九九九| 国产精品灌醉下药二区| 亚洲免费观看高清完整版在线观看熊| 一区二区三区在线免费视频| 亚洲成a人v欧美综合天堂下载| 蜜臀av一区二区| 成人午夜视频在线| 欧美视频一区二| 欧美成人精品二区三区99精品| 久久久美女毛片| 亚洲综合成人在线| 狠狠色丁香婷综合久久| 99精品视频一区二区| 欧美日韩美少妇| 久久这里只精品最新地址| 亚洲私人影院在线观看| 日韩综合一区二区| 国产老妇另类xxxxx| 色综合夜色一区| 欧美一区二区三区啪啪| 国产精品电影院| 丝袜美腿亚洲色图| 粉嫩绯色av一区二区在线观看| 欧美日韩在线播放一区| 久久久精品国产免费观看同学| 亚洲黄网站在线观看| 国产专区欧美精品| 欧美剧情电影在线观看完整版免费励志电影| 日韩精品综合一本久道在线视频| 亚洲三级电影网站| 激情伊人五月天久久综合| 欧美日韩一区在线| 国产精品免费久久| 久久97超碰色| 欧美在线高清视频| 中文字幕五月欧美| 久久99精品久久久久久国产越南| 91麻豆精品秘密| 久久综合九色综合97婷婷| 午夜免费久久看| 91蝌蚪porny九色| 国产亚洲女人久久久久毛片| 欧美a级一区二区| 欧美三级日韩在线| 亚洲精品中文在线| 成人精品高清在线| 欧美精品一区二区三区蜜桃视频 | 国产精品综合在线视频| 制服视频三区第一页精品| 亚洲精品第1页| av午夜一区麻豆| 国产午夜精品久久久久久久| 亚洲成a人片在线不卡一二三区| 91麻豆精品在线观看| 国产精品久久久久久久久久免费看| 久久国产精品色| 欧美一级一区二区| 天天影视涩香欲综合网| 欧美丝袜丝nylons| 亚洲综合在线视频| 色综合色综合色综合| 国产精品久久久久久久岛一牛影视| 国产一区二区不卡| 精品国产免费一区二区三区香蕉| 日本三级亚洲精品| 91精品免费观看| 日本午夜精品视频在线观看 | 97久久精品人人做人人爽| 国产精品私房写真福利视频|