AD2543的程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(read_data) tempdata |= 0x01; //读数据端口,获取转换值
if(byte & 0x80) datain_set; //输出控制字
else datain_clr;
clock_set; //产生一个时钟,上升沿
Delay1us(3); //
clock_clr; //
Delay1us(3);
while(!(PIND & (1 << PD3))); //判断是否转换结束,没有转换结束则等待
cs_set;
clock_clr; //时钟端置低
cs_clr; //片选置低
for(temp = 0;temp < 12;temp++) //发控制字,收转换数据
{
tempdata <<= 1; //接收数据变量
L12864_PutChar('V'); //发送电压符号“V”
L12864_PutChar(' ');
//Usart_PutChar(0x0d); //
//Usart_PutChar(0x0a); // AD值发送结束,回车换行
for(Delay3s = 0;Delay3s < 200;Delay3s++) //延时3S
#include "../Header/L12864.h"
//函数声明
void Port_Init(void); //端口初始化配置
unsigned int tlc2543_write(unsigned char byte); //写控制字
//unsigned int tlc2543_read(void); //读取AD值
#define datain PD6 //TLC2543数据输入端
#define dataout PD7 //TLC2543数据输出端
//端口操作
#define clock_set (PORTD |= (1 << PD4)) //时钟线输出高
#define clock_clr (PORTD &= ~(1 << PD4)) //时钟线输出低
} }
网上搜的程序:
#ifndefTLC2543_H
#define TLC2543_H
#include "Global.h"
//全局变量声明
unsigned int ADData; //AD转换获得的数据
//端口声明
#define clock PD4//TLC2543时钟端
#define cs PD5 //TLC2543片选端
单片机最小系统
#include <AT89X52.h> #include <intrins.h> //引脚定义
sbit CLK=P1^3; sbit Di=P1^1; sbit Do=P1^0; sbit CS=P1^2; sbit EOC=P1^4;
unsigned int ADdata; bit TOflg=0;
Di=1;源自文库
}//送方式/通道控制字else {
Di=0; }
if(Do==1) //如果为高电平{
tempADdata=tempADdata+1; }
CLK=1;
delay10us(); CLK=0;
temp=temp<<1; } CS=1;
tempADdata=tempADdata & 0x0fff; return(tempADdata); }
void Ltc_AD(void)
{
unsigned char Delay3s;
Port_Init();
L12864_Init();
L12864_PutString(0,0,14,"TLC模数转换测试程序");
L12864_PutString(1,0,10,"测得通道的电压值为:");
while(1)
#defineread_data (PIND & (1 << PD7)) //读取数据线上数据
#endif//
include "../Header/Tlc2543.h"
#include "../Header/delay.h"
#include "../Header/interrupt.h" //中断函数头文件
unsigned char i,temp;
unsigned int tempADdata=0; CHN=CHN<<4;
CLK=0; CS=1; CS=0; temp=CHN;
for(i=0;i<12;i++) {
tempADdata=tempADdata<<1; if((temp & 0x80)!=0) {
//datain,dataout引脚
cs_clr;
clock_clr;
}
//写控制字
unsigned int tlc2543_write(unsigned char byte)
{
unsigned char temp;
unsigned int tempdata = 0;
//_delay_ms(20);
byte <<= 1;//
}
cs_set; //
return tempdata;
}
void delay10us(void) {
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
//TLC2543的操作函数,其参数为通道号,返回的是上一次的采集值unsigned int GetTLCData(unsigned char CHN) {
{
//选择输入通道0,12位数据,高位在前,单极性
ADData = (int)((long)tlc2543_write(0x00) * 4650 / 4096) ;//将获得的AD值转换为电压值
//单位为mv。
L12864_PutChar(ADData / 1000 + 0x30); //得到电压值的千位并发送
void InitUART(void) {
TMOD =0x20; SCON =0x50; TH1=0XFD; TL1=TH1; PCON=0x00; EA=1; ES=1; TR1=1; }
void Send(unsigned char x) {
SBUF =x; while(T1==0); T1=0; }
#define cs_set (PORTD |= (1 << PD5)) //片选端输出高
#define cs_clr (PORTD &= ~(1 << PD5)) //片选端输出低
#define datain_set (PORTD |= (1 << PD6)) //数据输入端输出高
#define datain_clr (PORTD &= ~(1 << PD6)) //数据输入端输出低
main() {
unsigned char i,j; InitUART(); while(1) {
ADdata=GetTLCData(0x00); for(i=0;i<50;i++) {
for(j=0;i<50;j++); }
ADdata=GetTLCData(0x01); Send(ADdata/0XFF); Send(ADdata%0XFF);
L12864_PutChar('.'); //发送小数点
L12864_PutChar(ADData % 1000 / 100 + 0x30); //得到电压值的百位并发送
L12864_PutChar(ADData % 100 / 10 + 0x30); //得到电压值的十位并发送
L12864_PutChar(ADData % 10 + 0x30); //得到电压值的个位并发送
{
Delay1ms(5);
Delay1ms(5);
}
}
}
//端口状态初始化设置函数
voidPort_Init()
{
PORTB = 0xff;
DDRB = 0xff; //数据采集端口,置为输入口
PORTD = 0x78; //clock,cs,datain为输出口,data为输入口
DDRD = 0x70; //tlc2543控制端口,PD4,PD5,PD6,PD7分别为clock,cs,
if(byte & 0x80) datain_set; //输出控制字
else datain_clr;
clock_set; //产生一个时钟,上升沿
Delay1us(3); //
clock_clr; //
Delay1us(3);
while(!(PIND & (1 << PD3))); //判断是否转换结束,没有转换结束则等待
cs_set;
clock_clr; //时钟端置低
cs_clr; //片选置低
for(temp = 0;temp < 12;temp++) //发控制字,收转换数据
{
tempdata <<= 1; //接收数据变量
L12864_PutChar('V'); //发送电压符号“V”
L12864_PutChar(' ');
//Usart_PutChar(0x0d); //
//Usart_PutChar(0x0a); // AD值发送结束,回车换行
for(Delay3s = 0;Delay3s < 200;Delay3s++) //延时3S
#include "../Header/L12864.h"
//函数声明
void Port_Init(void); //端口初始化配置
unsigned int tlc2543_write(unsigned char byte); //写控制字
//unsigned int tlc2543_read(void); //读取AD值
#define datain PD6 //TLC2543数据输入端
#define dataout PD7 //TLC2543数据输出端
//端口操作
#define clock_set (PORTD |= (1 << PD4)) //时钟线输出高
#define clock_clr (PORTD &= ~(1 << PD4)) //时钟线输出低
} }
网上搜的程序:
#ifndefTLC2543_H
#define TLC2543_H
#include "Global.h"
//全局变量声明
unsigned int ADData; //AD转换获得的数据
//端口声明
#define clock PD4//TLC2543时钟端
#define cs PD5 //TLC2543片选端
单片机最小系统
#include <AT89X52.h> #include <intrins.h> //引脚定义
sbit CLK=P1^3; sbit Di=P1^1; sbit Do=P1^0; sbit CS=P1^2; sbit EOC=P1^4;
unsigned int ADdata; bit TOflg=0;
Di=1;源自文库
}//送方式/通道控制字else {
Di=0; }
if(Do==1) //如果为高电平{
tempADdata=tempADdata+1; }
CLK=1;
delay10us(); CLK=0;
temp=temp<<1; } CS=1;
tempADdata=tempADdata & 0x0fff; return(tempADdata); }
void Ltc_AD(void)
{
unsigned char Delay3s;
Port_Init();
L12864_Init();
L12864_PutString(0,0,14,"TLC模数转换测试程序");
L12864_PutString(1,0,10,"测得通道的电压值为:");
while(1)
#defineread_data (PIND & (1 << PD7)) //读取数据线上数据
#endif//
include "../Header/Tlc2543.h"
#include "../Header/delay.h"
#include "../Header/interrupt.h" //中断函数头文件
unsigned char i,temp;
unsigned int tempADdata=0; CHN=CHN<<4;
CLK=0; CS=1; CS=0; temp=CHN;
for(i=0;i<12;i++) {
tempADdata=tempADdata<<1; if((temp & 0x80)!=0) {
//datain,dataout引脚
cs_clr;
clock_clr;
}
//写控制字
unsigned int tlc2543_write(unsigned char byte)
{
unsigned char temp;
unsigned int tempdata = 0;
//_delay_ms(20);
byte <<= 1;//
}
cs_set; //
return tempdata;
}
void delay10us(void) {
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
//TLC2543的操作函数,其参数为通道号,返回的是上一次的采集值unsigned int GetTLCData(unsigned char CHN) {
{
//选择输入通道0,12位数据,高位在前,单极性
ADData = (int)((long)tlc2543_write(0x00) * 4650 / 4096) ;//将获得的AD值转换为电压值
//单位为mv。
L12864_PutChar(ADData / 1000 + 0x30); //得到电压值的千位并发送
void InitUART(void) {
TMOD =0x20; SCON =0x50; TH1=0XFD; TL1=TH1; PCON=0x00; EA=1; ES=1; TR1=1; }
void Send(unsigned char x) {
SBUF =x; while(T1==0); T1=0; }
#define cs_set (PORTD |= (1 << PD5)) //片选端输出高
#define cs_clr (PORTD &= ~(1 << PD5)) //片选端输出低
#define datain_set (PORTD |= (1 << PD6)) //数据输入端输出高
#define datain_clr (PORTD &= ~(1 << PD6)) //数据输入端输出低
main() {
unsigned char i,j; InitUART(); while(1) {
ADdata=GetTLCData(0x00); for(i=0;i<50;i++) {
for(j=0;i<50;j++); }
ADdata=GetTLCData(0x01); Send(ADdata/0XFF); Send(ADdata%0XFF);
L12864_PutChar('.'); //发送小数点
L12864_PutChar(ADData % 1000 / 100 + 0x30); //得到电压值的百位并发送
L12864_PutChar(ADData % 100 / 10 + 0x30); //得到电压值的十位并发送
L12864_PutChar(ADData % 10 + 0x30); //得到电压值的个位并发送
{
Delay1ms(5);
Delay1ms(5);
}
}
}
//端口状态初始化设置函数
voidPort_Init()
{
PORTB = 0xff;
DDRB = 0xff; //数据采集端口,置为输入口
PORTD = 0x78; //clock,cs,datain为输出口,data为输入口
DDRD = 0x70; //tlc2543控制端口,PD4,PD5,PD6,PD7分别为clock,cs,