導航:首頁 > 操作系統 > 單片機不運行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故障問題相關的資料

熱點內容
泰國免費電影大全國語 瀏覽:240
走不出的別墅區電影 瀏覽:622
觀音寺招程序員 瀏覽:641
解壓挖掘機小游戲抖音 瀏覽:575
伺服器更新維護尚未完成什麼意思 瀏覽:661
情歌戀曲 電影 瀏覽:264
法國高分電影有哪些預言者 瀏覽:968
命令怎麼學 瀏覽:818
李采譚的影片 瀏覽:679
吃屎的電影叫什麼頭像惡心 瀏覽:790
《新媽媽的目的》演員表 瀏覽:189
何家駒電影大全 瀏覽:941
雷軍的編程代碼 瀏覽:452
怎麼把wps轉換為pdf格式的文件 瀏覽:55
天津網關伺服器雲空間 瀏覽:689
韓國電影交換的的一天BH的女演員 瀏覽:552
腐劇網耽美電影 瀏覽:910
台灣絕版電影一箭雙雕 瀏覽:883
訓誡文sp管教mf 瀏覽:932
搜索軟體如何加密 瀏覽:905