專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力
提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)
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).