機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
877A軟件模擬I2C通信讀寫24C02
877A軟件模擬I2C通信讀寫24C02
 更新時間:2009-12-12 10:57:28  點擊數:0
【字體: 字體顏色
;該試驗功能是單片機復位一次,自動從24C02中讀取數據到數碼管顯示,然后對值加1再寫入24C02,最終數碼管中的數據就是開機的次數,具有一定的實用意義
;本電路所使用24C02為ATMEL的,或不是該廠的,則燒寫時間可能會有差異
;必須調整本程序的DELAY時間
;本實戰(zhàn)的目的是讓大家進上步熟悉I2C通信的時序,熟悉24CXX的讀寫,會用軟件模擬I2C通信
;硬件接法:
;1.24CXX的SDA接877A的RB5口,SCLK接877A的RB4口,WP接地,A0,A1,A2接地
;2.實驗本實驗須將MCD-DEMO實驗板上的93CXX系列芯片先取下,在實驗過程中不要按動同樣接在RB口的按鍵,以免影響通信時序.
;3.實驗板上拔碼開關S4,S5要置ON,其它拔碼開關都可以關閉。
;PIC單片機學習網  陳學乾  http://www.pic16.com   討論論壇:http://pic16.com/bbs/
;版權所有,轉載請注明出處,并不能去掉或改變文件中的說明文字。
;程序文件名“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              ;地址偏移量加當前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            ;數碼管先全部熄滅
  MOVLW  0FFH
  MOVWF  PORTA
  MOVLW  0FFH
  MOVWF  PORTB            ;SDT,SCLK都為高

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

  CLRW         ;地址00H
  CALL RD24    ;讀地址
  MOVWF DAT     ;讀出的值送F1
  SUBLW .9    ;若讀出的值大于9,則F1送為0,從0開始(因為1位數碼管只能顯示到0-9)
  BC  TT2     ;C=0就轉TT2
TT1
  CLRF  DAT
TT2
  MOVFW DAT
  CALL TABLE   ;取顯示段碼
  MOVWF PORTC   ;段碼送C口
  BCF   PORTA ,1  ;點亮第一位數碼管
  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            ;設SDA腳為輸入,準備讀
       BCF STATUS ,RP0
       MOVLW 08H          ;共讀8位數據
       MOVWF COUNT
RD000
       NOP
       NOP
       NOP
       BSF SCLK            ;讀數據
       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            ;恢復SDA腳為輸出
       BCF STATUS ,RP0
       BSF SDA
       CALL DELAY2
       BSF SCLK
       CALL DELAY2
       BCF SCLK          ;應答畢,SDA置1
       CALL STOP          ;送停止信號
       MOVFW  TEMP          ;將讀的數據送入W中
       RETURN
;******************************寫入24C02程序
WT24    MOVWF ADDR         ;  先將地址暫存于F4 
        CALL START24      ;開始條件
        MOVLW 0A0H
        CALL  SUBS      ;寫器件地址1010000+最后一位0寫操作
        MOVFW ADDR          ;載入地址
        CALL  SUBS      ;寫地址
        MOVFW DAT          ;載入數據
        CALL SUBS       ;寫數據
        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                   ;寫數據
       MOVWF TEMP     ;將要寫的數據存于F2中
       MOVLW 08H
       MOVWF COUNT    ;寫8位數據
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     ;判應答到否,未到則等待
       GOTO REP
       BCF  SCLK
       BSF  STATUS,RP0
       BCF  TRISB ,5
       BCF  STATUS,RP0
       RETURN

DELAY2 
        NOP
        NOP
        NOP
        NOP
        RETURN
;********************************************
       end                   ;源程序結束
;*****************************************************
  • 上一篇: pic單片機雙機異步通信
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網站

    網站經營許可證:浙B2-20080178-1