10位 ADC 采集部分程序有问题 做如下修改编译就可以通过, 这样修改可以吗? /**************** *以下关于ADC *****************/ void ADC_init() //adc初始化 { P1ASF=0XFF; //设置P1为ADC采集 ADC_RES=0; //清除高八位结果寄存器 ADC_CONTR=0XE0; //ADC上电 A/D转换周期90个时钟周期 delay(5); } uchar ADC_P(unsigned char ch) //ADC处理函数 { ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志 delay(30); ADC_CONTR=0x80|0x00|0x08|ch; a1=ADC_RES; //高8位 b1=ADC_RESL; //低8位 delay(60); ADC_data=(a1<<2)|(b1>>6); //10AD */ /* ADC_CONTR&=~ADC_FLAG; //关闭标志位 ADC_CONTR=0X80|0X00|0X08|ch; _nop_();_nop_();_nop_();_nop_(); */ /* ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志 delay(30); ADC_CONTR=0x80|0x00|0x08|0x00; a1=ADC_RES; //高8位 b1=ADC_RESL; //低8位 delay(60); // ADC_data=(a1<<2)|(b1>>6); //10AD */ while(!(ADC_CONTR&0x10));//等待ADC转换完成 return ADC_RES; //返回ADC结果 8位AD } |
不错的资料,正是我想找了东西。 |
good,程序学习下,请问有没有具体电路连接呢 |
uchar ADC_P(unsigned char ch) //ADC处理函数 { ADC_CONTR&=~ADC_FLAG; //关闭标志位 ADC_CONTR=0X80|0X00|0X08|ch; _nop_();_nop_();_nop_();_nop_(); while(!(ADC_CONTR&0x10));//等待ADC转换完成 return ADC_RES; //返回ADC结果 8位AD /* ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志 delay(30); ADC_CONTR=0x80|0x00|0x08|0x00; a1=ADC_RES; //高8位 b1=ADC_RESL; //低8位 delay(60); // ADC_data=(a1<<2)|(b1>>6); //10AD */ }如果使用10位ad,不应该是 /* ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志 delay(30); ADC_CONTR=0x80|0x00|0x08|0x00; a1=ADC_RES; //高8位 b1=ADC_RESL; //低8位 delay(60); // ADC_data=(b1<<2)|(a1>>6); //10AD */ ,详情请看图片 |
51hei截图_20201116155222.png (38.13 KB, 下载次数: 89)
有没有proteus仿真电路鸭? |