NXP MCU 技术论坛
登录
直播中
刘志超
9年用户
35经验值
擅长:模拟技术
私信
关注
[讨论]
由AD7712(24位)模数转换到AT89S52中,串口助手显示AD_SDATA脚输出一直为1,求大侠探讨
单片机
模数转换
本帖最后由 超_负荷 于 2017-8-5 10:35 编辑
代码见下楼
回帖
(3)
刘志超
2017-8-5 10:38:18
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define ENABLE_INT EA = 1
#define DISABLE_INT EA = 0
//AD7712
***it AD_SCLK = P0^7;
***it AD_A0 = P0^6;
***it AD_SDATA = P0^5;
***it AD_DRDY = P0^4;
***it AD_RFS = P0^3;
***it AD_TFS = P0^2;
void Uart_send(uchar dat)
{
DISABLE_INT;
SBUF = dat;
// while(TI==0);
// TI = 0;
ENABLE_INT;//???????
}
void delay_nus(unsigned int n)
{
unsigned int i;
for(i = n; i > 0; i--)
{
;
}
}
unsigned long AD7712_read_dat()
{
ulong res = 0;
char index = 0;
ulong bit_dat;
DISABLE_INT;
AD_RFS = 1;
AD_SDATA = 1;
AD_A0 = 0;
AD_SCLK = 0;
AD_DRDY = 1;
while(AD_DRDY);
AD_A0 = 1;
AD_RFS = 0;
for(index = 0;index < 24; index++)
{
delay_nus(10);
AD_SCLK = 1;
delay_nus(10);
bit_dat = AD_SDATA;
Uart_send(bit_dat);//输出一直为1,未解决???
delay_nus(10);
AD_SCLK = 0;
res <<= 1;
res +=bit_dat;
//Uart_send(res);//输出一直为11111111111,未解决
}
AD_RFS = 1;
AD_A0 = 0;
ENABLE_INT;
return res;
}
void main()
{
ulong uart_adc_dat;
uint idx;
ulong adc_dat;
TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式2
SCON=0x40; //SCON=0100 0000B,串口工作方式1
PCON=0x00; //PCON=0000 0000B,波特率9600
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
while(1)
{
if(idx == 10)
{
idx = 0;
adc_dat =AD7712_read_dat();
}
idx++;
delay_nus(400);
}
}
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define ENABLE_INT EA = 1
#define DISABLE_INT EA = 0
//AD7712
***it AD_SCLK = P0^7;
***it AD_A0 = P0^6;
***it AD_SDATA = P0^5;
***it AD_DRDY = P0^4;
***it AD_RFS = P0^3;
***it AD_TFS = P0^2;
void Uart_send(uchar dat)
{
DISABLE_INT;
SBUF = dat;
// while(TI==0);
// TI = 0;
ENABLE_INT;//???????
}
void delay_nus(unsigned int n)
{
unsigned int i;
for(i = n; i > 0; i--)
{
;
}
}
unsigned long AD7712_read_dat()
{
ulong res = 0;
char index = 0;
ulong bit_dat;
DISABLE_INT;
AD_RFS = 1;
AD_SDATA = 1;
AD_A0 = 0;
AD_SCLK = 0;
AD_DRDY = 1;
while(AD_DRDY);
AD_A0 = 1;
AD_RFS = 0;
for(index = 0;index < 24; index++)
{
delay_nus(10);
AD_SCLK = 1;
delay_nus(10);
bit_dat = AD_SDATA;
Uart_send(bit_dat);//输出一直为1,未解决???
delay_nus(10);
AD_SCLK = 0;
res <<= 1;
res +=bit_dat;
//Uart_send(res);//输出一直为11111111111,未解决
}
AD_RFS = 1;
AD_A0 = 0;
ENABLE_INT;
return res;
}
void main()
{
ulong uart_adc_dat;
uint idx;
ulong adc_dat;
TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式2
SCON=0x40; //SCON=0100 0000B,串口工作方式1
PCON=0x00; //PCON=0000 0000B,波特率9600
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
while(1)
{
if(idx == 10)
{
idx = 0;
adc_dat =AD7712_read_dat();
}
idx++;
delay_nus(400);
}
}
举报
刘志超
2017-8-5 10:38:20
求大侠
求大侠
举报
马吉吉
2020-6-15 11:21:58
单片机是8位的,AD7712是24位要分3批输送,而且单片机数据由小到大排序,AD7712由大到小,输送时要转换一下位置
单片机是8位的,AD7712是24位要分3批输送,而且单片机数据由小到大排序,AD7712由大到小,输送时要转换一下位置
举报
更多回帖
rotate(-90deg);
回复
相关帖子
单片机
模数转换
at89s52
引
脚
图_
at89s52
引
脚
说明
38296
基于
AT89S52
的
串口
通信控制LCM
显示
55
AT89S52
单片机能发送数据,示波器有
显示
,但
串口
助手
没
显示
,换了
助手
也没
显示
,
求
大侠
2232
AT89S52
引
脚
功能简介
20
基于
AT89s52
单片机和PCF8591
为
基础的数模
模数
转换
4447
at89s52
单片机引脚图,
at89s52
引
脚
说明
80569
at89s52
3427
AT89S52
2139
AD7712
24
位
ΣΔ A D
转换
器评估板
71
AT89S52
datasheet
2
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分