导航:首页 > 操作系统 > 单片机不运行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故障问题相关的资料

热点内容
ins亚洲服务器地址 浏览:785
我们的孩子pdf 浏览:597
appstore软件怎么显示屏幕 浏览:12
2950服务器如何装系统 浏览:884
丰田花冠压缩比 浏览:501
我的世界如何买服务器 浏览:457
进不去我的世界服务器是怎么回事 浏览:902
女程序员的世界 浏览:538
博图fb源码 浏览:694
查手机游戏服务器ip地址 浏览:934
招商银行app无法登录怎么回事 浏览:249
png格式转换pdf格式 浏览:97
怎样制压缩包 浏览:601
迅云服务器什么牌子 浏览:220
泰捷gt怎么升级安卓7 浏览:315
linux开发是什么 浏览:791
智慧浙农林app密码忘了怎么办 浏览:617
手机安卓线为什么用不了 浏览:504
平板加密文件怎么提取 浏览:397
哔哩哔哩服务器怎么没了 浏览:954