求解STC 12C5A60S2的编程问题,本人初次涉及单片机,对编程不太了解,编了个AD转化的小程序,求高手看下!
(本人已经纠结了很久了,求救呀!!!)
(程序是实现AD转化,通过不同的模拟量输入,控制灯泡是否亮?
如能解决,追加奖励!!!!!!)
程序如下:
#include<STC_12c5a.H>
#define uint unsigned int
#define uchar unsigned char
uint s=0;
unsigned char ad_average_result; //AD转换十次的平均值
sbit out=P2^0;
uchar tp;
void delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延时1ms
{
uint i,j;
for(;delay1ms>0;delay1ms--)
for(i=0;i<7;i++)
for(j=0;j<210;j++);
}
void delay(uint delay) //STC11F60XE,22.1184M,延时170us
{
uint i,j;
for(;delay>0;delay--)
for(i=0;i<124;i++);
for(j=0;j<124;j++);
}
/*******************************************************
AD转换程序
*******************************************************/
void ADC_Power_On() //AD转换电
{
ADC_CONTR|=0x80;
delay(5); //必要的延时
}
void get_ad_result() //取AD结果函数,它是十位AD转换,每十次平均,最后取低八位作为AD采样数据
{
uint i;
uchar q=0;
for(i=0;i<10;i++)
{
tp=0;
ADC_RES=0; //高八位数据清零,STC12C5A60S2 AD数据寄存名与STC12C54××系列不同
ADC_RESL=0; //低两位清零
ADC_CONTR|=0x08; //启动AD转换
while(!tp) //判断AD转换是否完成
{
tp=0x10;
tp&=ADC_CONTR;
}
ADC_CONTR&=0xe7;
ad_average_result=ADC_RES;
q=q+ad_average_result;
}
ad_average_result=q/10;
//ad_average_result=ad_average_result*4*5000/1024;
}
/************************AD转换结束***********************/
void main()
{
ADC_Power_On(); //开AD电源
P1ASF=0xff;
get_ad_result();
s=ad_average_result;
if(s>=0x80&&s<=0xff)
out=0;
else
out=1;
}
就是加模拟信号,灯泡不亮,不知道怎么回事,程序可以下载到单片机里
我试了一下,为什么编译显示“P1_ADC_EN” :undefined identifier
求解?
P1_ADC_EN 是A/D转换功能允许寄存器,一般在头文件中定义,可能你的头文件中定义用的名称不同,可在程序中插入该语句,位置参考如下:
#include
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;
sfr P1_ADC_EN = 0x9D; //A/D转换功能允许寄存器
sbit out=P2^0;
程序还是灯不亮呀,你说在模拟输入端直接加上一个4.5v的电压算是加上了模拟量了吗?
追答只要这个输入和单片机共地就可以,最好用电位器(可调电阻)通过电阻分压原理来做输入
追问多谢,但为什么现在又变成无论输入多少都亮了,用了你的程序?
无语的求解,对了,能留个QQ号吗?方便交流!多谢
2568061055
本回答被提问者采纳stc12c5a60s2这款单片机的ad功能,测5v电压的话理论上十位ad可以达到1\/...
0x03就是00000011将ADC_RES&0x03就是将ADC_RES与0x03 ,这样就是取ADC_RES低二位,作为10位ad的高两位,乘256转成10进制,然后加上低八位ADC_RESL,就是实际采集数据转化的10ad值
请问我用STC12C5A60S2单片机和51单片机写的程序代码一样吗?经过AD9850...
因为1T和12T的关系,所以延时函数不能通用,至于AD程序,按照STC官网的例程修改并不难。
STC12C5A60S2系列的单片机A\/D转换后,如何把自己想要的量用LED显示
1、可能是你的数码管是共阴的还是共阳的没看清楚,说不定段码用错了,那就乱码了;2、段码只是针对一位来说的,对于多位的数码管,是要先分离个十百千万...一个个分离之后才能译码给数码管显示的。而AD转换后,显然很定是多位数,我想你可能没有进行数据分离。同时,分离的时候要注意,单片机中...
STC12C5A60S2 的AD转化问题。电压偏移。
STC单片机AD转换,检测AD的端口应该设置为模拟量输入(端口为高阻态),从状态数据看显然是设置有问题,如P1.1端口为AD输入端,应该设置 P1ASF = 0000 0010,如 sfr P1ASF = 0x02; \/\/ P1.1端口模拟量输入 可以检查一下程序是否有这一项,可以修改一下试试。
STC12C5A60S2单片机频率是怎么计算出来的,或者怎么改!!
但对于STC12C5A60S2不专门设置的话 系统时钟是等于晶振频率 CMOD=0X02 分频系数是2 PWM频率=11000000\/2\/256=21.48 khz 如果想要PWM频率是12.3KHZ 分频系数=11000000\/256\/12300=3.49,介于3和4之间,确实不太好办 可选 CMOD=0X0A 分频系数是4 也可选为3,这时可设CMOD=0X04 即定时器...
stc12c5a60s2的ad转换器使用问题
你的电路可能有些问题,这是我一个项目的实际AD电路你,参考一下。3接VCC,1接GND,2相当于你的Vin,AD2接到P1口。
我用的STC12C5A60S2自带的A\/D转换,想把结果提取出来然后显示到四个八段...
5v单片机是0-5v,必须接到stc单片机的ad输入口,即标有ADC的io口。,8个通道都进行ad转换,并且,显示出来,通过串口发送通道和ad转换值
关于STC12C5A60S2 AD测量的问题 都快疯了!
分析:单片机P1.0口的高电平是依靠P1 “短路”到地来实现低电平的。结论:首先是R7、R8太大。其次,如果频率高的话,特别是低电平占空小的话,C3就太大也会这样。最后是358的“吸入”电流太小,原因是电路设计不良。
stc12c5a60s2单片机EEPROM的问题
我的eeprom是提供给用户的,允许用户通过串口连续写入16k字节的。我有遇到写入出错的情况,但是增加延时就解决了。你试试增加几个延时指令,应该就解决了。
STC12C5A60S2单片机的AD能检测到最小电压是多少?
STC12C5A60S2单片机的AD是十位的,最大数是1023,对应的电压是最高电压5V,那每一档数对应的电压是5\/1023=0.004888V,这就是能检测到的最小电压了。