水电电工知识
电力通信|一个单片机串行数据采集/传输模块的设计
2017-05-09  浏览:56
水暖之家讯:cript>在微机测控系统中,经常要用到A/D转换。常用的方法是扩展一块或多块A/D采集卡。当模拟量较少或是温度、压力等缓变信号场合,采用总线型A/D卡并不是最合适、最经济的方案。这里介绍一种以GNS97C2051单片机为核心,采用TLC254312位串行A/D转换器构成的采样模块,该模块的采样数据由单片机串口经电平转换后送到上位机(IBMPC兼容机)的串口COM1或COM2,形成一种串行数据采集串行数据传输的方式。经实践调试证实:该模块功耗低、采样精度高、可靠性好、接口简便,有一定实用价值。1、主要器件介绍

1.1TLC2543串行A/D转换器

模块采用TI公司的TLC254312位串行A/D转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机I/O资源,且价格适中。其特点有:

(1)12位分辨率A/D转换器;
(2)在工作温度范围内10μs转换时间;
(3)11个模拟输入通道;
(4)3路内置自测试方式;
(5)采样率为66kbps;
(6)线性误差 1LSB(max)
(7)有转换结束(EOC)输出;
(8)具有单、双极性输出;
(9)可编程的MSB或LSB前导;
(10)可编程的输出数据长度。

TLC2543的引脚排列如图1所示。图1中AIN0~AIN10为模拟输入端;为片选端;DIN为串行数据输入端;DOUT为A/D转换结果的三态串行输出端;EOC为转换结束端;CLK为I/O时钟;REF 为正基准电压端;REF-为负基准电压端;VCC为电源;GND为地。

1.2GMS97C2051单片机

GMS97C2051是武汉力源公司和韩国LG公司联合推出的一种性能价格比极高的8位单片机,其指令系统与MCS-51系列完全兼容。GMS97C2051与AT89C2051兼容(可直接替换),但其性能价格比优于AT89C2051。引脚排列如图2所示。

1.3电平转换器MAX3232

MAX3232为RS-232收发器,简单易用,单 5V电源供电,仅需外接几个电容即可完成从TTL电平到RS-232电平的转换,引脚排列如图3所示。

2、硬件设计

硬件电路如图4所示。

单片机GMS97C2051是整个系统的核心,TLC2543对输入的模拟信号进行采集,转换结果由单片机通过P3.5(9脚)接收,AD芯片的通道选择和方式数据通过P3.4(8脚)输入到其内部的一个8位地址和控制寄存器,单片机采集的数据通过串口(3、2脚)经MAX3232转换成RS232电平向上位机传输。图中串行LCD显示电路仅用于调试,对采集/传输的数据进行监测。

3、单片机软件设计

单片机程序主要包括串行数据采集模块“DATA_SAM”和串行数据传输模块“RS232”,调试所用到的显示子程序在此略去。

TLC2543的通道选择和方式数据为8位,其功能为:D7、D6、D5和D4用来选择要求转换的通道,D7D6D5D4=0000时选择0通道,D7D6D5D4=0001时选择1通道,依次类推;D3和D2用来选择输出数据长度,本程序选择输出数据长度为12位,即D3D2=00或D3D2=10;D1,D0选择输入数据的导前位,D1D0=00选择高位导前。

TLC2543在每次I/O周期读取的数据都是上次转换的结果,当前的转换结果在下一个I/O周期中被串行移出。第一次读数由于内部调整,读取的转换结果可能不准确,应丢弃。

数据采集程序如下:

DATA_SAM:
MOVR0,#30H;数据缓冲区首地址30H→R0
MOVR1,#00000000B;0通道方式/通道数据
ACALLRD_AD;第一次读取的转换结果可能不准确,丢弃。
MOVR1,#00010000B;1通道方式/通道数据
ACALLRD_AD;送1通道方式/通道数据并读第0通道转换结果
MOV@R0,R2;转换结果存放到数据缓冲区,下同
INCR0
MOV@R0,R3
INCR0
MOVR1,#00100000B;2通道方式/通道数据
ACALLRD_AD;送2通道方式/通道数据并读第1通道转换结果
MOV@R0,R2
INCR0
MOV@RO,R3
INCR0
…………;其它通道操作方式类推
RET

单片机通过编程产生串行时钟,并按时序发送与接收数据位,完成通道方式/通道数据的写入和转换结果的读出,程序如下,供数据采集模块“DATA_SAM”调用。

CLKEQUP3.3
DINEQUP3.4
DOUTEQUP3.5
CSEQUP3.7
RD_AD:
CLRCLK;清I/O时钟
SETBCS;设置片选为高
CLRCS;设置片选为低
MOVR4,#08;先读高8位
MOVA,R1;把方式/通道控制字放到A
LOP1:
MOVC,DOUT;读转换结果
RLCA;A寄存器左移,移入结果数据位,移出方式/通道控制位
MOVDIN,C;输出方式/通道位
SETBCLK;设置I/O时钟为高
CLRCLK;清I/O时钟
DJNZR4,LOP1;R4不为0,则返回LOP1
MOVR2,A;转换结果的高8位放到R2中
MOVA,#00H;复位A寄存器
MOVR4,#04;再读低4位
LOP2:
MOVC,DOUT;读转换结果
RLCA;A寄存器左移,移入结果数据位
SETBCLK;设置I/O时钟为高
CLRCLK;清I/O时钟
DJNZR4,LOP2;R4不为0,则返回LOP2
MOVR3,A;转换结果的低4位放到R3中
SETBCS;设置片选为高
RET

串行数据传输模块包括串行口初始化子程序和数据传输子程序,各子程序分别如下。其中数据传输采用查询方式,也可以方便地改为中断方式。

INIT_COM:
MOVSCON,#50H;串口方式1工作,8位数据位,1位停止位,无奇偶校验
MOVPCON,#80H;SMOD=1,波特率增倍
MOVTMOD,#20H;波特率设置,fOSC=12MHz,波特率=2*2400,N=0F3H
MOVTH1,#0F3H
MOVTL1,#0F3H
SETBTR1;启动定时器T1
RET
RS232:
MOVR0,#30H;缓冲区首地址30H→R0
MOVR5,#22;发送数据长度→R5,11*2=22
LOOP:
MOVA,@R0;取数据→A
MOVSBUF,A;数据→SBUF
WAIT:
JBCTI,CONT;判断发送中断标志,是1则转到CONT,并清TI
SJMPWAIT
CONT:
INCR0
DJNZR5,LOOP
RET

4、上位机串口接收程序设计

上位机接收数据所用C语言程序包括初始化子程序和接收子程序。各子程序分别如下:

voidinit_com1(void)
{
outportb(0x3fb,0x80);
outportb(0x3f8,0x18);
outportb(0x3f9,0x00);
outportb(0x3fb,0x03);
outportb(0x3fc,0x03);
outportb(0x3f9,0x00);
}
voidreceive_data(void)
{
while(!kbhit())
{
while(!(inportb(0x3fd)&

[1][2]下一页

水暖之家是专注于电气,电气工程,水暖,电气设备等装饰材料的各种新闻资讯和电气,电气工程,水暖,电气设备各十大品牌的装修效果图与网络营销服务,敬请登陆水暖之家http://m.ju31.com/
更多»您可能感兴趣的文章:
更多»有关 电气设备 的产品:
  • 水电电工资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 BYBC.CN SYSTEM All Rights Reserved