智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2215|回复: 9
打印 上一主题 下一主题

[软件类] 跪求解决xs128的AD问题

[复制链接]

1

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
37
威望
24
贡献
9
兑换币
11
注册时间
2015-3-20
在线时间
2 小时
毕业学校
铁路小学
跳转到指定楼层
1#
发表于 2015-3-27 13:34:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5贡献
AD转换问题困扰了我三天了。我用xs128的内置ad端口,输出到PA口的LCD1602.单片机自带AD测试端口。硬件操作是用短接帽把1,9两口短接,用计算机给芯片供电。也测试过ad端口和地之间有电压。
但是软件中while(!ATD0STAT2L_CCF0);会死在里面。永远到不了后面的LCD输出。若用字符串输出,在第四位后还会继续输出p1中的元素。用单个字符输出可以将输出的东西控制在前四位,但是改变电阻值没有效果。
跪求大神帮忙解决。


AD端口的电路图:



程序是:
/****************显示单个字符函数*******************************************/
void Display_char(unsigned char x,unsigned char y,unsigned char data)
{
y&=0x01;
x&=0x0f;//限制x不能大于15,y不能大于1
//设置光标位置
if(y==1)
x+=0x40;
x+=0x80;
LCD_WriteCommand(x);
//显示单个字符
LCD_WriteData(data);
}
/****************显示字符串函数*******************************************/
void Display_string(unsigned char x,unsigned char y,unsigned char *s)
{
y&=0x01;
x&=0x0f;//限制x不能大于15,y不能大于1
//设置光标位置
if(y==1)
x+=0x40;
x+=0x80;
LCD_WriteCommand(x);
//显示字符串
while(*s)
{
  LCD_WriteData(*s);
  s++;
}
}

/****************AD初始化*******************************************/
void AD_Init(void)     
{
  ATD0CTL1=0x00; //00000000  选择AD 通道为外部触发,8 位精度,采样前不放电
  ATD0CTL2=0x40; //01000000  标志位自动清零,禁止外部触发, 禁止中断
  ATD0CTL3=0x88; //10001000  右对齐无符号,每次转换1 个序列, No FIFO, Freeze 模式下继续转
  ATD0CTL4=0x01; //00000001  采样时间为4 个AD 时钟周期,PRS=1,ATDClock=24/(2*(1+1))=6MHz
  ATD0CTL5=0x20; //00100000  特殊通道禁止,连续转换,单通道转换,输入通道为0
  ATD0DIEN=0x00; //00000000  禁止数字输入}
}
void InitPLL()
{
  CLKSEL_PLLSEL = 0;
  PLLCTL_PLLON = 1;
  SYNR = 0xc0|0x09;      //总线频率是80MHZ   
  REFDV = 0x80|0x01;     //                  
  POSTDIV = 0;
  PLLCTL_PLLON = 1;  
  _asm(nop);
  _asm(nop);
  while(!(CRGFLG_LOCK==1))
   {
    ;
   }
  CLKSEL_PLLSEL =1  // 超频至80M

/****************AD转换*******************************************/
//-----读取AD转换结果--------//
void AD_GetValue(word *AD_wValue)
{
  *AD_wValue=ATD0DR0;  //读取结果寄存器的值
}


/*****液晶显示函数*********************************************************/
void main(void)
{

  uchar b,c=0;
  uchar k[4];
  unsigned char p1[]="Current Temp is:"  ;
  LCD_RW=0;
  Init_PLL();
  IO_Init();
  LCD_Init();
  EnableInterrupts;
  PORTA_PA7=~PORTA_PA7;
for(;;)
{

Display_string(0,0,p1);
while(!ATD0STAT2L_CCF0);{; } // 等待转换结束while(ATDOSTAT2_CCF0==1)
          AD_GetValue(&AD_wValue);   // 读取转换结果
       b=b*2;
       c=b/100;
       k[0]=KeyTable[c];
       b=b-b/100*100;
       c=b/10;
       k[1]=KeyTable[c];
       c=b-b/10*10;
       k[2]='.';  
     k[3]=KeyTable[c];
  //  Display_string(0,1,k);
  Display_char(0,1,k[0]);
  Display_char(1,1,k[1]);
   Display_char(2,1,k[2]);
   Display_char(3,1,k[3]);

   Display_char(5,1,0xdf);              
   Display_char(6,1,'C');
   Delay_ms(5000);

}
}


附件: 您需要 登录 才可以下载或查看,没有帐号?注册
回复

使用道具 举报

19

主题

2430

帖子

0

精华

跨届大侠

这并没有什么卵用.

Rank: 10Rank: 10Rank: 10

积分
6595

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
3611
贡献
1592
兑换币
1425
注册时间
2014-7-14
在线时间
696 小时
2#
发表于 2015-3-27 13:42:58 | 只看该作者
ATD0CTL0?
回复

使用道具 举报

1

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
37
威望
24
贡献
9
兑换币
11
注册时间
2015-3-20
在线时间
2 小时
毕业学校
铁路小学
3#
 楼主| 发表于 2015-3-27 13:45:17 | 只看该作者
空有一人 发表于 2015-3-27 13:42
ATD0CTL0?

这里有什么问题吗?
回复

使用道具 举报

19

主题

2430

帖子

0

精华

跨届大侠

这并没有什么卵用.

Rank: 10Rank: 10Rank: 10

积分
6595

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
3611
贡献
1592
兑换币
1425
注册时间
2014-7-14
在线时间
696 小时
4#
发表于 2015-3-27 13:47:15 | 只看该作者
mengmengmeng 发表于 2015-3-27 13:45
这里有什么问题吗?

你并没有配置,还有锁相环也要先配,多试试。
再换换ad口试试,等等。
回复

使用道具 举报

19

主题

2430

帖子

0

精华

跨届大侠

这并没有什么卵用.

Rank: 10Rank: 10Rank: 10

积分
6595

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
3611
贡献
1592
兑换币
1425
注册时间
2014-7-14
在线时间
696 小时
5#
发表于 2015-3-27 13:48:15 | 只看该作者
ATD0CTL5=。。。。
  ATD0DIEN=。。。
ad5放在最后写吧,ad5写完ad转换就开始了。
回复

使用道具 举报

1

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
37
威望
24
贡献
9
兑换币
11
注册时间
2015-3-20
在线时间
2 小时
毕业学校
铁路小学
6#
 楼主| 发表于 2015-3-27 13:51:22 | 只看该作者
空有一人 发表于 2015-3-27 13:47
你并没有配置,还有锁相环也要先配,多试试。
再换换ad口试试,等等。

第一次写ad,不太懂呢。什么地方没有配置。还有锁相环配置的位置要放在最前面是这个意思吗?
回复

使用道具 举报

19

主题

2430

帖子

0

精华

跨届大侠

这并没有什么卵用.

Rank: 10Rank: 10Rank: 10

积分
6595

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
3611
贡献
1592
兑换币
1425
注册时间
2014-7-14
在线时间
696 小时
7#
发表于 2015-3-27 13:53:47 | 只看该作者
mengmengmeng 发表于 2015-3-27 13:51
第一次写ad,不太懂呢。什么地方没有配置。还有锁相环配置的位置要放在最前面是这个意思吗?

锁相环是基础,最先配好最好,前面程序模块少,没什么影响。ad、pwm等一加上,不先配好锁相环,程序就跑不成啦。
回复

使用道具 举报

1

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
37
威望
24
贡献
9
兑换币
11
注册时间
2015-3-20
在线时间
2 小时
毕业学校
铁路小学
8#
 楼主| 发表于 2015-3-27 14:01:59 | 只看该作者
空有一人 发表于 2015-3-27 13:53
锁相环是基础,最先配好最好,前面程序模块少,没什么影响。ad、pwm等一加上,不先配好锁相环,程序就跑不 ...

恩恩~虽然放在前面我也换了端口了。。。还是无法输出。但是还是谢谢啦
回复

使用道具 举报

19

主题

2430

帖子

0

精华

跨届大侠

这并没有什么卵用.

Rank: 10Rank: 10Rank: 10

积分
6595

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
3611
贡献
1592
兑换币
1425
注册时间
2014-7-14
在线时间
696 小时
9#
发表于 2015-3-27 18:09:27 | 只看该作者
mengmengmeng 发表于 2015-3-27 14:01
恩恩~虽然放在前面我也换了端口了。。。还是无法输出。但是还是谢谢啦

额,楼主加油。
回复

使用道具 举报

5

主题

50

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3706
威望
1457
贡献
909
兑换币
968
注册时间
2013-5-10
在线时间
670 小时
毕业学校
江苏
10#
发表于 2015-3-27 20:10:27 | 只看该作者
main函数里没有调用AD_Init()?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-25 15:22 , Processed in 0.182357 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表