你可以吧AD1674输出的12位数据转换成两个8位数据,就像你写的这个程序一样,应该是可以的。计算机接收到的数据不是很直观了,如果你使用的是串口调试助手,只能这样了,如果你会上位机程序,那就在上位机程序中处理一下就OK拉;另外,不知你用的单片机晶振是多少,一般51/52是12M/或110592M,这样的话,你设置的波特率为12000,你使用串口调试助手看数据时,要将串口调试助手的波特率设置为12000
这个问题的出现比较普遍,主要有几个方面:
1病毒引起的,对电脑全盘杀毒。
2硬件上的原因,主要是内存条不兼容引起的,必要时更换内存。
3系统或其它软件引起的。
4打开或关闭IE、QQ、游戏等出现该内存不能为read或written,首先想到可能就是这款软件的问题,(一般来解决办法就是卸载重新安装、升级或更换其它版本,不行只有卸载该软件,问题才能解决)。
(1)系统本身有问题,及时安装官方发行的补丁,必要时重装系统。
(2)某个软件出现的问题,这里主要是看看开机时运行的软件,(用360等检查开机运行的软件,把不必要运行的软件都去掉),软件冲突,卸载有问题的软件。
★下面有两种处理方法可以试试:如果不行只有恢复或重装系统了
(1)试用命令排除
开始-运行- 输入cmd-- 回车,在命令提示符下输入下面命令
for %1 in (%windir%\system32\dll) do regsvr32exe /s %1
怕输入错误,可以复制这条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。
(2)运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks 下,应该只有一个正常的键值{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 将其他的删除
不一定,AD 转换器按照转换原理可分为直接AD 转换器和间接AD 转换器。所谓直接AD 转换器,是把模拟信号直接转换成数字信号,如逐次逼近型,并联比较型等。其中逐次逼近型AD 转换器,易于用集成工艺实现,且能达到较高的分辨率和速度,故目前集成化AD 芯片采用逐次逼近型者多;间接AD 转换器是先把模拟量转换成中间量,然后再转换成数字量,如电压/时间转换型(积分型)、电压/频率转换型、电压/脉宽转换型等。 其中积分型A/D 转换器电路简单,抗干扰能力强,切能作到高分辨率,但转换速度较慢。 有些转换器还将多路开关、基准电压源、时钟电路、译码器和转换电路集成在一个芯片内,已超出了单纯A/D 转换功能,使用十分方便。
PIC单片机在某一时间段内只能采集开启一个AD转换通道来进行采集,你可以通过模拟通道选择位来进行通道选择的先后顺序/
可以定义一个数组用来存放采集数据
先使能AD采样,进中断清标志位,配置通道(如AN0),把采样结果存入数组
轮流进行
采集时间一结束,即可启动 A/D 转
换。 可将采集时间编程设定在 GO/DONE位置1和实际
转换启动之间。
可参考pic的PDF资料
#include "reg51h"
#define data_point P0
sbit EOC=P2^0;
sbit ADDA=P2^1;
sbit ADDB=P2^2;
sbit ADDC=P2^3;
sbit OE=P2^5;
sbit START=P2^6;
sbit CLK=P2^7;
sbit ALE=P2^6;
unsigned char disp[3]={0,0,0};
char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char t0count=0;
unsigned int temp;
double sum;
unsigned char val_Integer; //整数
unsigned int val_Decimal; //小数
sbit k1 = P1^0;
sbit k2 = P1^1;
sbit k3 = P1^2;
sbit k4 = P1^3;
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
for(i=0;i<125;i++);
}
void display()
{
disp[0]=disp[0]&0x7f;
P3= disp[0];
k1 = 1;
delay(2);
k1 = 0;
P3= disp[1];
k2 = 1;
delay(2);
k2 = 0;
P3= disp[2];
k3 = 1;
delay(2);
k3 = 0;
P3= disp[3];
k4 = 1;
delay(2);
k4 = 0;
}
unsigned char ADC0808()
{
unsigned char d;
ADDC=0;
ADDB=0;
ADDA=0;
TR1=1;
ALE=1;ALE=0;
START=1;START=0;
while(EOC==0);
OE=1;
d=data_point;
OE=0;
TR1=1;
return d;
}
void covert(unsigned char x)
{
sum=x00201378;
val_Integer=(unsigned char)sum;
val_Decimal=(unsigned int)((sum-val_Integer)1000);
disp[3]=dispcode[val_Decimal%10];
disp[2]=dispcode[val_Decimal/10%10];
disp[1]=dispcode[val_Decimal/100];
disp[0]=dispcode[val_Integer];
}
void main()
{
TMOD=0x21;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=256-2;
ET0=1;
ET1=1;
EA=1;
TR0=1;
OE=0;
START=0;
EOC=1;
while(1)
{
display();
}
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t0count++;
if(t0count==100)
{
t0count=0;
covert(ADC0808());
}
}
void time1() interrupt 3
{
CLK=~CLK;
}
以上就是关于百思不得其解:ad1674转换的12位数据如何放到c51中呢,是分开来放置吗全部的内容,包括:百思不得其解:ad1674转换的12位数据如何放到c51中呢,是分开来放置吗、安装 sql server 2005 时出现"0x7814018e" 指令引用的"0x00000643"内存。该内存不能为"read" 怎么办、利用ad转换器时一定要用程序运行吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)