人狗畜禽COMPANY LIMITED|全是肉的高H文〈男男〉|全篇肉高H秘书被C办公室四爱|全黄H全肉共妻|全黄H全肉短篇禁乱NP慕浅浅|全黄H全肉短篇N男男

技術(shù)熱線: 4007-888-234
設(shè)計開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

新聞中心

提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

實戰(zhàn)十二:87X軟件模擬I2C讀寫24C02

更新時間: 2019-03-25
閱讀量:750

87X軟件模擬I2C讀寫24C02
;該試驗功能是單片機復(fù)位一次,自動從24C02中讀取數(shù)據(jù)到數(shù)碼管顯示,然后對值加1再寫入24C02,最終數(shù)碼管中的數(shù)據(jù)就是開機的次數(shù),具有一定的實用意義
;本電路所使用24C02為ATMEL的,或不是該廠的,則燒寫時間可能會有差異
;必須調(diào)整本程序的DELAY時間
;本實戰(zhàn)的目的是讓大家進(jìn)上步熟悉I2C通信的時序,熟悉24CXX的讀寫,會用軟件模擬I2C通信
;硬件接法:
;1.24CXX的SDA接877A的RB5口,SCLK接877A的RB4口,WP接地,A0,A1,A2接地
;2.實驗本實驗須將MCD-DEMO實驗板上的93CXX系列芯片先取下,在實驗過程中不要按動同樣接在RB口的按鍵,以免影響通信時序.
;3.實驗板上拔碼開關(guān)S4,S5要置ON,其它拔碼開關(guān)都可以關(guān)閉。
;程序文件名“MCD-24C02.ASM"
;程序清單如下:
;************************************
    LIST      P=16F877A, R=DEC
    include "P16F877A.inc"
;***********************************
__CONFIG _DEBUG_OFF&_CP_OFF&_WRT_HALF&_CPD_OFF&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC;
;************************************ 定義查表偏移量
#define SDA  PORTB,5
#define SCLK PORTB,4
;*********************
COUNT     EQU   20H
ADDR     EQU   21H
DAT     EQU   23H
TEMP     EQU   24H
;**********************
  ORG 000H
  NOP              ;放置一條ICD必需的空操作指令
  GOTO MAIN
  ORG 004H
  RETURN
  ORG 0008H
;******************************************************
TABLE           
        ADDWF PCL,1              ;地址偏移量加當(dāng)前PC值                                       
     RETLW 0C0H       ;0
     RETLW 0F9H       ;1                               
     RETLW 0A4H       ;2
     RETLW 0B0H       ;3
     RETLW 99H       ;4
     RETLW 92H       ;5
     RETLW 82H       ;6
     RETLW 0F8H       ;7
     RETLW 80H       ;8
     RETLW 98H       ;9
        RETLW 00H       ;A
     RETLW 00H       ;B
     RETLW 00H       ;C
     RETLW 00H       ;D
     RETLW 00H       ;E
        RETLW 00H       ;F
;*******************************************************
MAIN          
  MOVLW  0FFH
  MOVWF  PORTC            ;數(shù)碼管先全部熄滅
  MOVLW  0FFH
  MOVWF  PORTA
  MOVLW  0FFH
  MOVWF  PORTB            ;SDT,SCLK都為高

  BSF STATUS,RP0          ;定義RA口,RC,RB口全部為輸出
  MOVLW 07H
  MOVWF ADCON1            ;設(shè)置RA口全部為普通數(shù)字IO口
  CLRW
  MOVWF TRISB             ;
  MOVWF TRISA
  MOVWF TRISC         
  MOVWF OPTION_REG        ;開啟RB口內(nèi)部弱上拉
  BCF STATUS,RP0

  CLRW         ;地址00H
  CALL RD24    ;讀地址
  MOVWF DAT     ;讀出的值送F1
  SUBLW .9    ;若讀出的值大于9,則F1送為0,從0開始(因為1位數(shù)碼管只能顯示到0-9)
  BC  TT2     ;C=0就轉(zhuǎn)TT2
TT1
  CLRF  DAT
TT2
  MOVFW DAT
  CALL TABLE   ;取顯示段碼
  MOVWF PORTC   ;段碼送C口
  BCF   PORTA ,1  ;點亮第一位數(shù)碼管
  INCF  DAT ,1     ;每次上電,存入24CXX的00H地址的值加1
  CLRW             ;地址00H
  CALL  WT24       ;寫24CXX
  GOTO  $
;****************************
RD24 
       MOVWF ADDR       ;地址暫存于F4中
       CALL START24   ;啟動I2C
       MOVLW 0A0H
       CALL SUBS    ;寫器件地址1010000+最后一位0寫操作
       MOVFW ADDR       ;載入地址
       CALL SUBS    ;寫地址
       CALL START24   ;再發(fā)開始信號
       MOVLW  0A1H    ;寫器件地址1010000+最后一位1讀操作
       CALL SUBS     
       BSF STATUS ,RP0
       BSF TRISB ,5            ;設(shè)SDA腳為輸入,準(zhǔn)備讀
       BCF STATUS ,RP0
       MOVLW 08H          ;共讀8位數(shù)據(jù)
       MOVWF COUNT
RD000
       NOP
       NOP
       NOP
       BSF SCLK            ;讀數(shù)據(jù)
       NOP
       BSF STATUS,C
       BTFSS SDA
       BCF STATUS,C
       RLF TEMP ,1
       BCF SCLK
       DECFSZ COUNT ,1      ;循環(huán)讀完8位
       GOTO RD000
       BSF STATUS ,RP0
       BCF TRISB ,5            ;恢復(fù)SDA腳為輸出
       BCF STATUS ,RP0
       BSF SDA
       CALL DELAY2
       BSF SCLK
       CALL DELAY2
       BCF SCLK          ;應(yīng)答畢,SDA置1
       CALL STOP          ;送停止信號
       MOVFW  TEMP          ;將讀的數(shù)據(jù)送入W中
       RETURN
;******************************寫入24C02程序
WT24    MOVWF ADDR         ;  先將地址暫存于F4 
        CALL START24      ;開始條件
        MOVLW 0A0H
        CALL  SUBS      ;寫器件地址1010000+最后一位0寫操作
        MOVFW ADDR          ;載入地址
        CALL  SUBS      ;寫地址
        MOVFW DAT          ;載入數(shù)據(jù)
        CALL SUBS       ;寫數(shù)據(jù)
        CALL STOP         ;停止信號
        RETURN

START24
                      ;開始條件
        BSF  SDA
        BSF  SCLK
        CALL DELAY2
        BCF  SDA
        CALL DELAY2
        BCF  SCLK
        RETURN

STOP  
        BCF  SDA       ;停止條件
        NOP
        NOP
        BSF  SCLK
        CALL DELAY2
        BSF  SDA
        RETURN

SUBS                   ;寫數(shù)據(jù)
       MOVWF TEMP     ;將要寫的數(shù)據(jù)存于F2中
       MOVLW 08H
       MOVWF COUNT    ;寫8位數(shù)據(jù)
SH01 
       RLF TEMP ,1
       BSF SDA
       BTFSS  STATUS ,C
       BCF SDA
       NOP
       BSF SCLK
       CALL DELAY2
       BCF SCLK
       DECFSZ COUNT ,1  ;循環(huán)寫完8位
       GOTO SH01
       BSF  SDA
       NOP
       NOP
       BSF  SCLK
       BSF  STATUS,RP0
       BSF  TRISB ,5
       BCF  STATUS,RP0
REP
       BTFSC SDA     ;判應(yīng)答到否,未到則等待
       GOTO REP
       BCF  SCLK
       BSF  STATUS,RP0
       BCF  TRISB ,5
       BCF  STATUS,RP0
       RETURN

DELAY2 
        NOP
        NOP
        NOP
        NOP
        RETURN
;********************************************
       end                   ;源程序結(jié)束
;*****************************************************
;    進(jìn)入該實戰(zhàn)演練的工序流程如下:
;    1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
;   這個為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點需要注意,一是注釋前面的
;   分號”;”必須用西文半角輸入;二是必須用”.asm”擴展名存儲到事先建立的一個專用子目錄下.
;    2.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動MPLAB
;   并進(jìn)入MPLAB的桌面.
;    3.創(chuàng)建項目:選用菜單File>New或Project>New Project,在事先建立的一個專用子目錄下創(chuàng)建一個新項目,將
;   用記事本創(chuàng)建的源文件加入到該項目中.
;    4.建立項目中的目標(biāo)文件:選擇菜單Project >Build All(項目>建立所有文件),MPLAB將自動調(diào)用MPASM將項目
;   文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).


陆川县| 井冈山市| 当阳市| 明溪县| 玛多县| 七台河市| 大理市| 黄石市| 永胜县| 旬邑县| 全南县| 荣昌县| 禄丰县| 清丰县| 蒲江县| 石泉县| 和硕县| 大渡口区| 莱州市| 阜宁县| 介休市| 依安县| 永新县| 巍山| 新蔡县| 乐昌市| 绍兴市| 仙桃市| 左贡县| 鄂托克前旗| 昂仁县| 锡林浩特市| 长治县| 陇川县| 商都县| 六盘水市| 高唐县| 泽州县| 无为县| 泸溪县| 阿拉善左旗|