由ADuC812与K9S6408V0A构成的便携式数据采集系统
摘要:K9S6408V0A是三星公司生产的快闪存储器,它具有容量大,接口简单等特点。而ADuC812是内嵌MCU的多通道12位AD转换器。文中介绍了一种以ADuC812为主,配以K9S6408V0A快闪存储器所构成的便携式数据采集系统,并给出了AduC812与K9S6408V0A的硬件接口及软件编程。
ADuC812是AD公司生产的内嵌MCU的多通道12位AD转换器,K9S6408V0A是三星公司的新型FLASH存储器,其容量可达64M,只需3V供电便可进行读、编程、擦除等操作,而且与CPU的接口简单。用K9S6408V0A和ADuC812构成的数据采集系统,具有体积小、功耗低等特点。
ADuC812是全集成的12位数据采集系统,它在单个芯片内包含了高性能的自校准多通道ADC和两个12位DAC及8位与8051兼容的MCU。ADuC812本身带有8k字节的Flash程序存储器、640字节的Flash数据存储器以及256字节数据SRAM。另外,MCU还支持看门狗定时器、电源监视器以及ADC等DMA功能。同时它还为多处理器接口和I/O扩展提供32条可编程的I/O线、I2C兼容的SPI和标准UART串行端口I/O。它的MCU内核和模拟转换器均有正常、空闲以及掉电工作模式,可提供适合于低功耗应用的灵活的电源管理方案。
ADuC812的AD转换模块内的所有部分均能方便的通过3个SFR来设置。
因此可见,ADuC812本身就是一个内嵌MCU的高性能多通道数据采集系统,只是内部的数据存储器容量有限。如果需要存储大量数据的数据采集系统,则可外接数据存储器。本文介绍的即属这类系统,则可外接数据存储器。本文介绍的即属这类系统,它是利用一片外接 K9s6408V0A闪速存储器来设计的,其数据容量可达8M字节。
1 K9S6408V0A简介
K9S6408V0A为22脚表面封装器件,内部有(8M+256k)bit×8位存储空间,可组织成16384行,528列,其中后备的16列的列地址编码为513至527。可进行528字节为一页的读、写和以8k字节为一块的擦除操作。一个528位的数据寄存器可以用于在页读或页编程操作时存储单元的数据转换。
K9S6408V0A的突出优点在于其命令、地址和数据信息均通过8条I/O线传输,寻址内存单元的地址线不作为芯片的引脚。23位地址分三次写入地址寄存器,译码后找到相应的单元。对单片机而言,当需存储空间超过64k时,寻址存在一定的困难,而且系统的连线比较复杂,可靠性低。采用这种快闪存储器既可克服以上困难,又便于升级至更大容量而无须更改外部连接。图1为其功能框图。其中的信号线功能如下:
CLE:命令锁存使能。当其为高时,命令通过I/O口在WE信号的上升沿被锁入命令寄存器。
ALE:地址锁存使能。当其为高时,地址在WE信号的上升沿被锁入地址寄存器;为低时,锁定输入数据。
CE:片选。在读操作期间,CE变高,器件转入standby模式;在编程或擦除期间,器件处于忙状态,CE高将被忽略。
WE:写使能。命令、地址和数据在WE信号的上升沿被锁定。
RE:读使能。下降沿有效。
WP:写保护。在电源电压过渡期间,当WP为低电平时,将产生写/擦保护。
R/B:操作状态指示。为低时,指示正在编程、擦除或读操作,操作结束后变成高,为开路输出。
I/O口:(I/O0~I/O7)三态。输出命令、地址和数据以及读操作时输出数据。
2 ADuC812与K9S6408V0A的接口
K9S6408V0A与ADuC812的连接非常简单,并可为以后的升级提供良好的条件。基硬件接口电路如图2所示。连接时用ADuC812的P3口的P3.0~P3.3分别与K9S6408V0A的CE、CLE、ALE和R/B相连接,K9S6408V0A的I/O0~I/O7分别连至ADuC812的P0.0~P0.7,K9S6408V0A的RE、WE分别与ADuC812的RD(P3.7)、WE(P3.6)相连,而ADuC812的P1口(模拟输入口)接至数据采集传感器。这样就构成了一个数据采集系统。ADuC812负责采集,而K9S6408V0A负责存储数据。K9S6408V0A的各种操作具有共同特点,即在I/O口上首先发送操作命令字到命令寄存器,其后的连续三个周期发送要操作单元的地址(顺序为A0~A7,A9~A16,A17~A22,其中A8由命令字确定)。表1为其命令集。
表1 命令集
功能 | 第一周期 | 第二周期 | 忙时接受命令 |
连续数据输入 | 80H | - | |
读一 | 00H/01H | - | |
读二 | 50H | - | |
读ID | 90H | - | |
复位 | FFH | - | O |
页编程 | 10H | - | |
块擦除 | 60H | D0H | |
读状态 | 70H | - | O |
下面以页编程操作为例,给出K9S6408V0A的标准汇编编程方法。而页读以及块擦除等方法则与页编程类似,只是读时是由RE来锁存数据,而擦除时只送两个周期的地址即可。页编程操作可向一个或若干个单元写入数据,以下是页编程操作的程序:
入口地址:
R1,R2,R3-欲写入数据所在单元的列地址和页地址;
R7-写入数据的个数
R0-源数据指针
R6-失败标志
START:MOV DPTR,#XXXXH ;地址
CLR P3.0 ;片选
CLR P3.2 ;清ALE
SETB P3.1 ;置CLE
MOV A,#80H
MOVK@DPTR,A ;命令80H
CLR P3.1 ;清CLE
SETB P3.2 ;置ALE
MOV A,R1
MOVX@DPTR,A
MOV A,R2
MOVX@DPTR,A
MOV A,R3
MOVX@DPTR,A ;输出地址A0-A22
CLR P3.2 ;清ALE
PR1:MOVX A,@R0
MOVX@DPTR,A
DJNZ R7,PR1 ;循环写入
SETB P3.1 ;置CLE
MOV A,#10H
MOVX@DPTR,A ;命令10H
PRAM2:MOV C,P3.3
JNC PRAM2 ;忙,循环
SETB P3.1 ;置CLE
MOV A,#70H
MOVX@DPTR,A ;命令70H,
CLR P3.1 ;清CLE
MOVX A,@DPTR ;读状态
JNB ACC.0,SUC ;SR.0=0,成功
ERR:MOV R6,#0FH
SUC:SETB P3.0
END
3 系统软件
本数据采集系统为8通道顺序采集,ADuC812的时钟频率为11.0592MHz,CPU用断方式管理A/D转换器。当A/D转换完成时,向CPU发请求信号,CPU响应中断,中断处理子程序负责对转换的数据进行读出并将其存储至K9S6408V0A,然后通道号加1,相应的Flash存储器地址也加1。图3图4分别为系统主程序和中断处理子程序的流程图。
下面以标准汇编语言给出本系统的主程序及A/D中断处理子程序。
ORG 0000H
FLAG EQU 60H ;外部存储器满标志
CHAN EQU 61H ;通道号
JMP MAIN
;;以下为中断处理子程序
ORG 0033H ;A/D中断处理程序入口地址
CLR EA ;关中断
MOV R0,ADCDATAH ;转换结果高8位送R0
LCALL WRITEONE ;写一个数据到外部Flash RAM程序,可参考前面给出的页编程程序段;
INC R1 ;低位地址加1
CJNE R1,#0FFH,NEXT;未超出范围则处理下一个
MOV R1,#00H ;超出范围则低位地址清零
INC R2 ;中间地址加1
CJNE R2,#0FFH,NEXT;未超出范围则处理下一个
MOV R2,#00H ;超出范围则中间地址清零
INC R3 ;高位地址加1
CJNE R3,#03FH,NEXT;未超出范围则处理下一个
MOV FLAG,#01H ;否则,标准位置1
SJMP RET1 ;返回
NEXT:MOV R0,#ADCDATAL;转换结果低8位送R0
LCALL WRITEONE ;写入一个数据
LCALL WRITEONE ;写入一个数据
INC CHAN ;通道号加1
CJNE CHAN,#08H,CHANG ;通道号不等于8,则开始下一通道转换
MOV CHAN,#00H ;否则通道号清零
CHANG:MOV ADCCON1,#07Ch ;启动A/D转换
MOV ADCCON2,#CHAN ;选择转换通道
SETB EA ;中断使能
ETB EADC ;使能A/D转换中断
SETB ADC1
RET1;RETI ;中断返回
ORG 1000H
;;以下为主程序
MAIN:
MOV AFLAG,#00H ;标志清零
MOV CHAN,#00H ;通道号清零
MOV ADCCON1,#07CH ;启动A/D转换,一次转换时间14.5μs
MOV ADCCON2,#CHAN ;选择转换通道
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H ;外部存储器地址初始化
SETB EA ;中断使能
SETB EADC ;使能A/D转换中断
SETB ADC1 ;启动单个转换周期
HERE:SETB PCON.0 ;CPU进入空闲模式,功耗降;低可中断唤醒
MOV A,FLAG
JNZ HERE ;存储器未满则等待
END
4 结束语
综上所述,本文所描述的数据采集系统的软硬件设计具有采集速度快,存储容量大、系统体积小以及功耗低等特点,适用于随身携带的低功耗应用场合。只要将程序稍加修改,即可用于多种场合,还可对采集到的数据进行实时分析处理,从而使该系统成为智能型的数据采集与分析系统。
评论