打印
[STC单片机]

问一下关于STC15F2K60S2实现多通道采样的问题

[复制链接]
3628|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jzhyudpj|  楼主 | 2015-7-10 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我编写了一个用STC15F2K60S2单片机用两个通道采集工频电压信号和电流信号的程序,一个工频周期采样12个点,用定时器定时1.667ms,定时结束后先采P10口再采P11口,发现寄存器中存放两个通道模数转换结果数组里的值是一样的,h[]数组跟k[]数组里的值是一样的,个人分析是转换AD通道的程序出错了,部分程序如下,请各位高手帮我纠正一下,谢谢。
/*-----------------
定时中断服务程序
----------------------------*/
void timer0() interrupt 1
{
   ch=0;
   ADC_CONTR|=(ADC_START|ch);
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
    P1ASF = 0xff;                        //设置P1口为AD口
    CLK_DIV&=~0x20;                                     //高8位加低两位的形式   
    ADC_RES = 0;                         //清除结果寄存器
    ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ch;                //选择ch口作为AD输入来用
    Delay(2);
        IE=0xa0;                            //ADC上电并延时
}
/*----------------------------
初始化T0定时器
----------------------------*/
void InitT0()                                                          //初始化定时器0
{
   AUXR|=0x80;                                                 
   TMOD&=0xF0;
   TH0=0x27;                                                         //定时1.667ms
   TL0=0xF5;
   TF0=0;
   TR0=1;
   IE|=0x82;
}

相关帖子

沙发
jzhyudpj|  楼主 | 2015-7-10 10:13 | 只看该作者
我觉得是在AD中断服务程序里,在判断通道是P10(ch=0)还是P11(ch=1)时出现了错误,因为在定时中断程序里要先设置ch=0即先转换P10口,所以我定义的ch为全局变量uchar ch,q,t;这样对不对?

使用特权

评论回复
板凳
ningling_21| | 2015-7-10 10:29 | 只看该作者
jzhyudpj 发表于 2015-7-10 10:13
我觉得是在AD中断服务程序里,在判断通道是P10(ch=0)还是P11(ch=1)时出现了错误,因为在定时中断程序里要 ...

这样定义没问题,但由于是全局变量需要在对应的头文件中声明,以便其它文件中也可以访问这些变量

使用特权

评论回复
地板
jzhyudpj|  楼主 | 2015-7-10 10:48 | 只看该作者
ningling_21 发表于 2015-7-10 10:29
这样定义没问题,但由于是全局变量需要在对应的头文件中声明,以便其它文件中也可以访问这些变量 ...

我的程序就一个main.c文件,里面就是主程序和一些初始化程序和中断程序

使用特权

评论回复
5
jzhyudpj|  楼主 | 2015-7-10 16:11 | 只看该作者
别沉啊,帮帮忙

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝