void Timer3_Init()
{
TMR3CN = 0x02;
TMR3R = -44236; //定时2ms
TMR3 = 0xffff;
EIE2 &= ~0x01;
TMR3CN |= 0x04;
}
void ADC0_Init(void)
{
AMX0SL=0x00; //选择通道0
AMX0CF=0x00; //选择AIN0和AIN1为独立输入
REF0CN=0x03; //选择外部的电压为基准电压
ADC0CF=(SYSCLK/2500000)<<3;//时钟为 ,增益为1
ADC0CN=0x84;//ADC0使能且为ADCBUSY的开启方式
EIE2|=0x02;//开启ADC0的中断
}
void ADC0_ISR() interrupt 15
{
static unsigned int_dec=INT_DEC;
static long accumulator=0L;
AD0INT = 0; // 清 ADC 中断标志位
accumulator += ADC0; // 累加ADC采样数据
int_dec--; // 指针减1
if (int_dec == 0) // 累加完了吗?
{
int_dec = INT_DEC; // 指针复位
result = accumulator >> 8;
accumulator = 0L; // 累加和变量清0
t=1;
}
}ADC0转换,定时器3开启的方式
新建规则冲突。ad是一款程序接程序的软件,如果中间出现一个错误就会发生相同网络联合起来报错的情况,出现这种情况一般都是新建规则冲突导致的,我们只需要把规则文件名改为IPN为后缀即可解决相同网络联合起来报错的问题。
8位AD,最大255;
uchar num;
num=AD_receive();//把AD采集回来的数据保存
write_com(0x80);//1602从0x80开始显示数据
write_data(num/100+0x30); //显示字符百位,后面以此类推
write_data(num%100/10+0x30);//十位数
write_data(num%10+0x30);//个位数
至于1602的驱动程序,网上多得是,找找就有了
一般不应该是采集卡的问题。AD采集只是运放输出端和地之间的电势。不接任何通道,数值本来就不定。另外,如果你其他的通道接有信号,旁边的通道即使什么都不接,其值也受接了信号的通道的影响。我采集的是波形信号,试了一下,什么都不接的通道在接了信号的通道影响下,能够输出与接了信号的通道振幅大小相当的相似波形。
P1ASF是选择哪个口模拟AD转换功能,(1<<ADC_CH0)(ADC_CH0相当于0)故P1ASF第0位被置1,选择P10为模拟通道。
第二个是对ADC_CONTR寄存器进行了设置,(1 << 7)将第八位置1,(1 << 5)将第六位置1,ADC_CONTR = ADC_360T | ADC_ON 将ADC_CONTR寄存器第六位和第八位置1,具体功能就是开启AD转换,选择转换速度。
如有不对请指正!
以上就是关于跪求会C8051F020单片机的,要用C语言写出测量电压,就是AD转换的程序全部的内容,包括:跪求会C8051F020单片机的,要用C语言写出测量电压,就是AD转换的程序、ad为什么相同网络联合起来报错、求教:怎样将AD转换的二进制数据转换成十进制,用LCD1602显示单片机C语言程序不知道怎么写...谢谢~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)