導航:首頁 > 操作系統 > 單片機不運行24c01故障問題

單片機不運行24c01故障問題

發布時間:2024-04-15 12:58:34

A. 關於單片機EEPROM存儲器使用問題

埠 自己改一下
接法..隨便找兩個io口.
上拉5-10k電阻就好了.
24c01總共就只有128位元組
而且寫入的時候都知道忘那裡寫
你自己自然清楚什麼時候..24c01滿了.
這個東西都是固定地址.
又不是硬碟這種..還要什麼時候滿

SDA EQU P2.0
SCL EQU P2.1
Address EQU 08H
I2CData EQU 09H

ORG 0040H
LJMP START;轉入主程序.
START:
MOV SP,#60H
MOV Address,#00H
MOV I2CData,#55H
MOV P0,I2CDATA
CALL DELAY
CALL I2C_WRITE ;寫入數據.
MOV I2CDATA,#0AAH
MOV P0,I2CDATA
CALL DELAY
MOV Address,#00H
CALL I2C_READ
MOV I2CData,A ;讀出數據.
MOV P0,I2CDATA
CALL DELAY

NOP
NOP
LJMP START

//*******************************************
/*------------------------------------------------------

讀一個位元組 Address地址 Data讀出的數據

------------------------------------------------------*/

I2C_READ:

I2C_READ_A:

LCALL I2C_START

MOV A,#10100000B //從器件地址位是000,並且對從器件進行寫操作。
//不要有所疑問為什麼這么操作。因為這是一個選擇性讀的操作,主器件發送從器件地址和它想讀取的位元組數據的地址執行一個偽寫操作。

LCALL I2C_SEND8BIT

LCALL I2C_ACK

JC I2C_READ_A ;=1,表示無確認,再次發送 C為1轉移。

MOV A,Address

LCALL I2C_SEND8BIT

LCALL I2C_ACK

I2C_READ_B:

LCALL I2C_START

MOV A,#10100001B //從器件地址位是000,並且對從器件進行讀操作。

LCALL I2C_SEND8BIT

LCALL I2C_ACK

JC I2C_READ_B //C=1轉移,表示無確認,再次發送。

LCALL I2C_RECEIVE8BIT

MOV I2CData,A

LCALL I2C_ACK

LCALL I2C_STOP

RET
//*******************************************************

//*******************************************************
;接收八位數據
//主器件接收從器件指定地址的8位數據。
I2C_RECEIVE8BIT:

MOV B,#08H

CLR A

SETB SDA

I2C_RECEIVE8IT_A:

SETB SCL

NOP

NOP

MOV C,SDA

RLC A

CLR SCL

DJNZ B,I2C_RECEIVE8IT_A

RET
//*******************************************************

//*******************************************************
/*------------------------------------------------------

寫一個位元組 Address地址 I2CDatata寫入的數據

------------------------------------------------------*/

I2C_WRITE:

I2C_WRITE_A:

LCALL I2C_START //調用I2C匯流排的起始信號的程序。

MOV A,#10100000B //從器件地址位是000,並且對從器件進行寫操作。

LCALL I2C_SEND8BIT

LCALL I2C_ACK

JC I2C_WRITE_A //=1,表示無確認,再次發送。 C為1轉移。

MOV A,Address

LCALL I2C_SEND8BIT

LCALL I2C_ACK

MOV A,I2CData

LCALL I2C_SEND8BIT

LCALL I2C_ACK

LCALL I2C_STOP

RET
//***************************************

//**********************************
;發送開始信號
//I2C匯流排的起始信號的程序。

I2C_START:

SETB SCL

SETB SDA

NOP

NOP

CLR SDA

NOP

NOP

CLR SCL

RET
//***********************************

//***********************************
;送八位數據
//主器件送從器件8位數據。

I2C_SEND8BIT:

MOV B,#08H

I2C_SEND8BIT_A:

RLC A

MOV SDA,C

SETB SCL

NOP

NOP

CLR SCL

DJNZ B,I2C_SEND8BIT_A

RET
//************************************

//*************************************
;發送接收確認信號

I2C_ACk:

SETB SDA

SETB SCL

NOP

NOP

JB SDA,I2C_ACK0 //SDA為1跳轉。

CLR C

SJMP I2C_ACK_END

I2C_ACK0:

SETB C

I2C_ACK_END:

CLR SCL

RET
//**************************************

//**************************************
;發送結束信號

I2C_STOP:

CLR SDA

NOP

NOP

SETB SCL

NOP

NOP

SETB SDA

RET
//***************************************

//***************************************
delay:
MOV R7,#0FFH
DEL1:
MOV R6,#0FFH
DEL2:
MOV R5,#10
DEL3:
DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1

RET
//***************************************

B. 單片機上電沒運行,要檢查什麼

單片機上電後沒有運轉,首先要檢查什麼?
首先應該確認電源電壓是否正常。用電壓表測量接地引腳跟電源引腳之間的電壓,看是否是電源電壓,例如常用的5V。
接下來就是檢查復位引腳電壓是否正常。分別測量按下復位按鈕和放開復位按鈕的電壓值,看是否正確。
然後再檢查晶振是否起振了,一般用示波器來看晶振引腳的波形,注意應該使用示波器探頭的X10檔。另一個辦法是測量復位狀態下的IO口電平,按住復位鍵不放,然後測量IO口(沒接外部上拉的P0口除外)的電壓,看是否是高電平,如果不是高電平,則多半是因為晶振沒有起振。
另外還要注意的地方是,如果使用片內ROM的話(大部分情況下如此,現在已經很少有用外部擴ROM的了),一定要將EA引腳拉高,否則會出現程序亂跑的情況。有時用模擬器可以,而燒入片子不行,往往是因為EA引腳沒拉高的緣故(當然,晶振沒起振也是原因只一)。經過上面幾點的檢查,一般即可排除故障了。如果系統不穩定的話,有時是因為電源濾波不好導致的。在單片機的電源引腳跟地引腳之間接上一個0.1uF的電容會有所改善。遇到系統不穩定時,就可以並上電容試試(越靠近晶元越好)

閱讀全文

與單片機不運行24c01故障問題相關的資料

熱點內容
四九演算法算男女 瀏覽:655
javawindows8 瀏覽:494
2021世界程序員節 瀏覽:484
php翼支付 瀏覽:882
盈通伺服器ip地址 瀏覽:789
3des演算法的c語言實現 瀏覽:873
網上怎樣購買伺服器地址 瀏覽:813
新氧app都在哪個城市 瀏覽:731
十二大加密貨幣圖片 瀏覽:315
資料庫日誌自動壓縮 瀏覽:929
手機表格文檔用哪個app 瀏覽:77
找人開發app的公司怎麼樣 瀏覽:651
android藍牙發送數據 瀏覽:428
範文瀾中國通史pdf 瀏覽:755
php常用的設計模式 瀏覽:889
安卓手機怎麼一個一個的截圖 瀏覽:980
javajsondate 瀏覽:356
matlab圖像處理演算法 瀏覽:670
安卓如何禁止手機自動降頻 瀏覽:697
一份加密不緊急的上行文 瀏覽:417