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

热点内容
虚拟机执行命令 浏览:444
cctv16奥林匹克频道加密播出 浏览:899
c盘微信文件夹隐私 浏览:229
asp压缩mdb 浏览:670
node开源论坛源码 浏览:8
单片机比手机芯片还贵 浏览:35
java课表 浏览:555
如何在pdf里面修改 浏览:929
橙光制作器档案框在哪个文件夹 浏览:991
php如何抓取网页数据 浏览:642
计数器单片机 浏览:966
游戏aoi算法 浏览:845
phpmysqlint 浏览:914
怎么从appstore商城买东西 浏览:186
大秀直播平台源码 浏览:425
java视屏 浏览:936
电脑中如何给程序加密 浏览:240
java排序容器 浏览:944
职称证书在哪个app下载 浏览:363
四九算法算男女 浏览:660