附录整套24c16单片机读写驱动程序.docx
- 文档编号:28062848
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:15
- 大小:46.09KB
附录整套24c16单片机读写驱动程序.docx
《附录整套24c16单片机读写驱动程序.docx》由会员分享,可在线阅读,更多相关《附录整套24c16单片机读写驱动程序.docx(15页珍藏版)》请在冰豆网上搜索。
附录整套24c16单片机读写驱动程序
附录-整套24c16单片机读写驱动程序
用单片机实现通用存贮器IC卡的读写
自动化仪表2002Vol.23No.6P.37-41
本文对AT24系列存贮器和AT89系列单片机的特征及总线状态作为介绍,并以AT24C01与AT89C2051为例详细描述了通用存贮器IC卡的工作原理及用单片机对其进行读写操作的基本电路连接和软件编程方法。
用存贮器IC卡是由通用存贮器芯片封装而成的,由于它的结构和功能简单,生产成本低,使用方便,因此在各领域都得到了广泛的应用。
目前用于IC卡的通用存贮器芯片多为E2PROM,其常用的协议主要有两线串行连接协议(I2C)和三线串行链接协议,其中比较常用的是ATMEL公司生产的AT24系列芯片。
以该系列中的AT24C01为例,它具有1k的存贮容量,适用于2V~5V的低电压/标准电压的操作,具有低功耗和高可靠性等优点。
而AT89C2051虽是ATMEL公司89系列单片机的低档型,但它具有2k的FLASHROM(可重编闪速存贮器)、128×8位内部RAM及全静态操作方式,同样也具有低功耗和较强的功能。
下面以AT24C2051为例,对通用存贮器IC卡的工作原理及基本电路连线作一介绍,该线路简单,使用灵活,能可靠地对通用存贮器IC卡进行读写。
2硬件特性
2.1AT24系列存贮器的特性
AT24系列存贮器芯片采用CMOS工艺制造,内置有高压泵,可在单电压供电条件下工作。
其标准封装为8脚DIP封装形式,各引脚的功能说明如下:
SCL:
串行时钟。
在该脚的上升沿时,系统将数据输入到每个EEPROM器件,在下降沿时输出。
SDA:
串行数据。
该引脚为开漏极驱动,可双向传送数据。
A0、A1、A2:
器件/页面寻址。
为器件地址输入端。
在AT24C01/02中,该引脚被硬连接。
Vcc:
一般输入+5V的工作电压。
图1是符合ISO7816-2标准的IC卡的触点图(见IC卡书P186)。
对于AT24系列通用存贮器IC卡来说,通常只需使用四个触点。
AT24C01的内部组态为128个8位字节,而对随机字寻址则需要一个7位地址。
2.2总线状态及时序
AT24C01的SCL及SDA两总线可通过一个电阻上拉为高电平,SDA上的数据仅在SCL为低电平时才能改变。
当SCL为高电平时,SDA的改变表示“开始”和“停止”状态。
此时,所有地址和数据字都以8位串行码方式输入输出EEPROM。
开始状态:
SCL为高电平时,SDA由高电平转入低电平。
该命令必须在其它命令前执行。
SCL
SDA
停止状态:
SCL为高电平时,SDA由低电平转入高电平。
该命令可终止所有通讯。
SCL
SDA
确认:
相同总线上的设备在收到数据后,以置SDA为低电平的方式对其进行确认。
SCL
SDA
2.3器件寻址
AT24系列EEPROM在开始状态后需紧接一个8位器件地址,以进行应读写操作。
设备寻址码的高4位为1、0、1、0,对于AT24C01/02,寻址码高4位后面的三位是器件寻址码,与它们的硬连线管脚相对应。
最低应是读写选择位,置0时可激发读操作。
AT24设备寻址码具体的格式如下:
1010A2A1A0R/W
2.4AT89C2051芯片
AT89C2051是MCS-51产品的兼容型,它具有2k的FLASHROM、128字节ROM,15根I/O引线、两个16位定时/计数器、一个五向量两级中断结构、一个全双工串行口、一个精密模拟比较器以及片内振荡电路和时钟电路。
它的P1口和P3口是双向I/O口,其中P1.2~P1.7、P3.0~P3.5和P3.7带有内部上拉电阻。
在AT89C2051用作输入端时,将首先向引脚写“1”而使内部MOS管截止以便引脚处于悬浮状态,从而可获得高阻抗输入。
图2为通用存贮器IC卡的基本电路连接图。
(略)
3读写操作软件
当系统采用6MHz晶体振荡器时所定义的I/O口线及器件地址如下:
SCLBITP1.7
SDABITP1.6
DEVICEAD_WDATA10100000B;写卡器件地址
DEVICEAD_RDATA10100001B;读卡器件地址
3.1开始条件(START_IC)
当SCL为高电平时,SDA由高转为低。
程序如下:
SCL
0
SDA在SCL、SDA全1前提下进入开始,开始完成后,SCL、SDA全0
0
START_IC:
CLRSCL;SCL由高变低,因为SCL低电平时才允许SDA更改
NOP;加入空指令延时以确保信号可靠
NOP
SETBSDA;SDA先高
NOP
NOP
SETBSCL;SCL高,起始条件建立时间大于4.7us
NOP
NOP
CLRSDA;SDA低,起始条件锁定时大于4us
NOP
NOP
CLRSCL;SCL低,钳住总线,准备发数据
NOP
RET
3.2停止条件(STOP_IC)
当SCL为高电平时,SDA由低转为高。
程序如下:
SCL
SDA;在SCL、SDA高或低的前提下均可进入停止过程
;停止过程完成后,SCL、SDA全1
STOP_IC:
CLRSCL;SCL低
NOP
CLRSDA
NOP
NOP
SETBSCL;发送结束条件的时钟信号
NOP;结束总线时间大于4us(取4.7us)
NOP
SETBSDA;结束总线
NOP;保证一个终止信号和起始信号的空闲时间大于4.7us
NOP;在SCL、SDA高或低的前提下均可进入停止,停止完成后,SCL、SDA全1
RET
3.3应答确认信号(MACK_IC)与非应答信号MNACK_IC
在接收方,每收到一字节后便将SDA电平拉低,程序如下:
SCL
0
SDA1;应答完成后,SCL=0,SDA=1
应答确认信号(MACK_IC)
MACK_IC:
CLRSCL
NOP
CLRSDA;在第9个SLC脉冲,将SDA置0
NOP
NOP
SEIBSCL
NOP;保持数据时间,即SCL为高时间大于4.7us
NOP
CLRSCL
NOP
SETBSDA;在SDA高或低的任何前提下,应答完成后,SCL=0,SDA=1
NOP
RET
发送非应答信号MNACK_IC
MNACK_IC:
CLRSCL
NOP
NOP
SETBSDA;将SDA置1
NOP
NOP
SETBSCL
NOP
NOP;保持数据时间,即SCL为高时间大于4.7us
NOP
NOP
NOP
CLRSCL
NOP
SETBSDA
NOP
RET
24C16程序资源安排是:
R0=字节的循环指针,R2=位数的计数器,
R3=卡器件地址,R4=字节地址,R5=字节数或页面长度。
R1可以留作其他循环指针,R6、R7可以留作uS级延时。
3.4写一字节数据到IC卡(WR_BYTE)
SCL
┉
SDAD7D6┉D0等待IC确认
在下列程序中,参数A表示源数据,R2表示字节位数。
WR_BYTE:
MOVR2,#08;一字节8位数据
CLRSCL
NOP
NOP
WR_BYTE1:
RLCA;带进位位左移,A.8->C
MOVSDA,C;SCL低电平时改变SDA上的数据
NOP
SETBSCL;拉高SCL>=4.7uS把数据发送出去
NOP
NOP
CLRSCL
NOP
NOP
DJNZR2,WR_BYTE1;依次发送A中的8位数据
SETBSDA
NOP
NOP
SETBSCL
CLRF0
NOP
NOP
MOVC,SDA
JCWR_BYTE2
SETBF0;判断应答位
WR_BYTE2:
NOP
CLRSCL
NOP
RET
此子程序的主要作用是按照定义的时序,顺序左移A中一字节8位数据,并通过引脚传送出去。
当一字节发完后,等待IC卡发回的确认信号。
3.5从IC卡读一字节(RD_BYTE)
从IC卡中读一字节的源程序如下:
SCL
┉
SDAD7D6┉D0发停止状态
RD_BYTE:
MOVR2,#08
SETBSDA;设备SDA为读状态
CLRA;清空A寄存器
NOP
NOP
RD_BTYE1:
SETBSCL;时钟线为高,接收数据位
NOP
NOP
MOVC,SDA;读取一位数据到进位位
RLCA;左移数据到ACC.0
CLRSCL;将SCL拉低,时间大于4.7us
NOP
NOP
DJNZR2,RD_BYTE1;依次读出8位数据到A中
RET;无应答信号
利用该程序可将读出的数据存放在A中。
需要注意的是:
读数据的器件不是通过确认状态来应答的,而是随后产生一个停止状态。
3.6字节写入模式写单字节数据(WRITE_BYTE)
下列程序入口参数:
R3=卡器件地址,R4=目的字节地址,A=待写数据
出口参数:
F0作应答位,F0=1有应答
占用资源:
A、R4、CY、F0
发开始信号---写卡器件地址---写入字节地址---写入单字节数据---发停止信号
WRITE_BYTE:
PUSHACC;保存A中的数据
LCALLSTART_IC;发开始信号
MOVA,R3;写入器件地址8位
LCALLWR_BYTE
JNBF0,RETWRB;无应答则跳转
MOVA,R4;写入字节地址8位
LCALLWR_BYTE
JNBF0,RETWRB;无应答则跳转
POPACC;恢复待写的A中数据
LCALLWR_BYTE;写入单字节数据
LCALLSTOP_IC;发停止信号
RET
RETWRB:
POPACC
LCALLSTOP
RET
在收到8位数据后,EEPROM将通过SDA来回送确认信号,而传送设备必须用停止状态来终止写操作。
这时,EEPROM将进入一个内时固定存贮器的写入周期并且禁止在此其间的所有输入,直到写操作完成后才对通讯应答。
其写入周期可自定义,最大为10ms。
3.7页面写入模式写多字节数据(WRITE_PAGE)
入口参数:
R3=卡器件地址,R4=目的字节地址,R5=页面长度。
R0=写数据缓冲指针
发开始信号---写卡器件地址---写页面目的地址---连续写(R5)个字节数据---发停止信号
WRITE_PAGE:
LCALLSTART_IC;发开始信号
MOVA,R3;写卡器件地址
LCALLWR_BYTE
JNBF0,IWRNBYTE
MOVA,R4;写页面目的地址
LCALLWR_BYTE
JNBF0,IWRNBYTE
WRITE_PAGE1:
MOVA,@R0;连续写(R5)个字节数据
LCALLWR_BYTE
JNBF0,IWRNBYTE
INCR0
DJNZR5,WRITE_PAGE1
IWRNBYTE:
LCALLSTOP_IC;发停止信号
RET
AT24C01/02可利用上述程序进行8字节的页面写入,它的操作类似于写字节。
不同的是,它无需在第一个字节送出后以停止状态,不同在收到确认信号后,再传送7个字节的数据码,最后以停止状态来终止页面写序列。
AT24C04/08/16的页面为16字节。
3.8立即性地址读单字节模式(READ_BYTEC)
立即地址读模式读一字节数据的程序如下:
入口参数:
R3=卡器件地址,(字节源地址以芯片内的当前地址)
出口数据:
读取数据ACC
开始信号---写出读卡器件---读出默认地址数据---发停止状态应答
READ_BYTEC:
LCALLSTART_IC;开始信号
MOVA,R3;写读卡器件地址
LCALLWR_BYTE
JNBF0,RETRDB
LCALLRD_BYTE;读出默认地址数据
LCALLMNACK;读完最后一个字节数据需要发非应答信号
RETRDB:
LCALLSTOP_IC;发停止状态应答
RET
该程序执行后,其内部数据字地址指针将保持在上次读写操作访问的最后一个地址,并按1递增且在芯片上电期间一直有效。
只有当地址为页面的最末时,下次访问才滚动到该页面的首地址。
3.9选择性地址读单字节模式(READ_BYTER)
在下列程序中,R3=卡器件地址,R4=字节源地址
出口数据:
读取数据ACC
程序如下:
开始信号--执行空字节写卡器件地址---写入源地址
---开始信号--写卡器件地址--立即地址的数据读出—停止信号
READ_BYTER:
LCALLSTART_IC;启动总线
MOVA,R3;执行空字节写卡器件地址
LCALLWR_BYTE
JNBF0,READ_BYTE3
MOVA,R4;写入源字节地址
LCALLWR_BYTE
LCALLSTART_IC;重新启动总线
MOVA,R3
LCALLWR_BYTE;写卡器件地址
JNBF0,READ_BYTE3
LCALLRD_BYTE;立即地址数据读出
LCALLMNACK;读完最后一个字节数据需要发非应答信号
READ_BYTE3:
LCALLSTOP_IC;停止信号
RET
读操作模式需要一个字节写序列载入数据地址。
在器件和数据地址写入并得到确认后,将再产生另一个开始条件,并送出读操作器件的地址,同时激发一个立即地址读取。
3.10立即地址的连续读取N个字节数据(READ_BYTES)
;功能:
从卡器件的当前立即字节地址开始读取N个数据
入口参数:
R3=卡器件地址,(字节源地址默认当前立即地址),R5=N数据长度
出口参数:
R0=目的指针
开始信号--写出读卡器件---(R5)个立即地址的数据读出---停止信号
READ_BYTES:
LCALLSTART_IC;开始信号
MOVA,R3;写出读卡器件
LCALLWR_BYTE
JNBF0,BYTESRET
READ_BYS2:
LCALLRD_BYTE;连续立即地址的数据读出
MOV@R0,A;存放数据到目的地址
INCR0
DJNZR5,READ_BYS1
LCALLMNACK;读完最后一个字节数据需要发非应答信号
BYTESRET:
LCALLSTOP_IC;读完N个字节后发停止信号
RET
READ_BYS1:
LCALLACK_IC;收到数据后发确认信号
SJMPREAD_BYS2
其中连续读取由立即地址读或选择性地址读激发,并在收到一字节数据后发确认信号应答。
当读数器件以停止状态应答时,操作被终止。
3.11选择性地址的连续读取N个字节数据(READ_BYTES)
;功能:
从卡器件某指定的字节地址开始读取N个数据
;入口参数:
R3=卡器件地址,R4=字节源地址,R5=N数据长度
;出口参数:
R0=接收数据目的缓冲区指针
;占用资源:
A、R0、R2、、R3、R4、R5、CY
IRDNBYTE:
LCALLSTART;启动总线
MOVA,R3
LCALLWR_BYTE;发送卡器件地址
JNBF0,RETRDN
MOVA,R4;指定源字节地址
LCALLWR_BYTE
LCALLSTART;重新启动总线
MOVA,R3
LCALLWR_BYTE;写卡器件地址
JNBF0,IRDNBYTE
RDN1:
LCALLRDBYTE;读操作开始
MOV@R0,A
INCR0
DJNZR5,SACK
LCALLMNACK;读完最后一个字节数据需要发非应答信号
RETRDN:
LCALLSTOP_IC;发停止信号
RET
SACK:
LCALLMACK
SJMPRDN1
4总结
该系统结构简单,在实际运行时具有很高的可靠性,同时具有一定的可扩展性,并可通过单片机的串行口经电平转换后直接与计算机相连,以进行数据通讯。
另外,也可根据需要连接到其它引脚或卡座触点,如果适当改进电路和程序,还可读写加密卡和CPU卡等。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 附录 整套 24 c16 单片机 读写 驱动程序