中级会员
- 积分
- 324
- 威望
- 215
- 贡献
- 49
- 兑换币
- 12
- 注册时间
- 2008-9-17
- 在线时间
- 30 小时
|
<>我的这个程序怎么AD不能采集到信号。</P><P>//简单温度测控系统源程序</P><P>//**********************************************************************<BR>//说明:该程序可实现简单的水温检测,整个程序的执行过程也可以在S12实验板上实现模拟主程序<BR>// S12端口的分配<BR>// PTT[3:0] LED位控制口<BR>// PTP[7:0] LED段码寄存口<BR>// PORTB[7:0] 报警信号口<BR>// PTD7 A/D转换通道7<BR>//***********************************************************************<BR> <BR>#include<hidef.h><BR>#include<mc9s12dg128.h></P><P>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"</P><P>//**********************************************************************<BR>// 定义全局变量<BR>//**********************************************************************<BR>uchar MA[]={0xC0,0xF9,0xA4,0xb0,0x99,0x92,0x82,0xF8,0x80,0x90};<BR> //定义数组,存放LED段码(0-1)<BR>word AD_Value; //定义1个变量,存放A/D转换的数据<BR>int g,s,b,q;</P><P>//**********************************************************************<BR>//函数声明<BR>//**********************************************************************</P><P>void Display(int g1,int s1,int b1,int q1); //数码管显示函数<BR>void Delay(int cnt); //延时函数<BR>void AD_Init(void); //A/D模块初始化函数<BR>void AD_GetValue(word *AD_Value); //取一次A/D转换数据函数<BR>void Dat_Deal(int DispValue); //数据处理函数,建立A/D转换数据与温度关系<BR>void Warn(void); //警告函数</P><P>//***********************************************************************<BR>//函数名称:main()<BR>//函数功能:实现简单温度测控系统的检测与报警<BR>//by lynd<BR>//***********************************************************************</P><P>void main(void)<BR>{<BR> AD_Init(); //A/D初始化<BR> ; //端口初始化<BR> DDRB=0xFF; //B口输出与B口相连的8个LED灯全灭<BR> PORTB=0xFF;<BR> DDRP=0xFF; //P口输出LED段码<BR> PTP=0xFF;<BR> DDRT=0x0F; //T口输出KED位码<BR> PTT=0x0F;<BR> for(;;)<BR> {<BR> while (!ATD0STAT1_CCF0); //查询方式,等待转换结果<BR> AD_GetValue(&AD_Value); //读取转换结果<BR> Dat_Deal(AD_Value); //数据处理.建立A/D转换数据与温度关系<BR> Display(q,b,s,g); //显示温度<BR> Warn(); //警告判断<BR> }<BR>}</P><P>//***********************************************************************<BR>//函数名称:AD_Init()<BR>//函数功能:A/D转换模块初始化<BR>//***********************************************************************</P><P>void AD_Init(void)<BR>{<BR> ATD0CTL2=0xC0; //A/D模块上电,快速清零,无等待模式,禁止外部出发,中断禁止<BR> ATD0CTL3=0x20; //每个序列4次转换,No FIFO,Freeze模式下继续转换<BR> ATD0CTL4=0x83; //8位精度,2个时钟,PRS=3,divider=8<BR> //ATDClock=[BusClock*0.5][PRS+1]<BR> ATD0CTL5=0xA7; //右对齐无符号,单通道采样,通道7<BR> ATD0DIEN=0x00; //禁止数字输入<BR>}</P><P>//***********************************************************************<BR>//函数名称:AD_GetValue<BR>//函数功能:读A/D转换结果<BR>//入口参数:*AD_Value--A/D转换数据寄存指针变量<BR>//*********************************************************************** </P><P>void AD_GetValue(word *AD_Value)<BR>{<BR>// while(ATD0STAT1_CCF7==0);<BR> *AD_Value=ATD0DR0; //读取A/D转换结果<BR>}</P><P>//************************************************************************<BR>//函数名称at_Deal()<BR>//函数功能:数据处理,建立A/D转换数据与温度关系,并把温度分离成千,百,十和个位供LED显示<BR>//入口函数:DispValue---温度暂存寄存变量<BR>//************************************************************************</P><P>void Dat_Deal(int DispValue)<BR>{<BR> DispValue=AD_Value; //实际温度计<BR> q=DispValue/1000; //分离千位<BR> b=(DispValue-q*1000)/100; //分离百位<BR> s=(DispValue-q*1000-b*100)/10; //分离十位<BR> g=DispValue-q*1000-b*100-s*10; //分离个位<BR>}</P><P>//************************************************************************<BR>//函数名称:Delay()<BR>//函数功能:软件延时<BR>//入口参数:dly--延时参数,数越大值越大<BR>//************************************************************************</P><P>void Delay(int cnt)<BR>{<BR> <BR> int i,j;<BR> for(i=0;i<cnt;i++) <BR> {<BR> j=0x1300;<BR> while(j--);<BR> }<BR>}</P><P>//************************************************************************<BR>//函数名称:Display()<BR>//函数功能:显示温度<BR>//入口参数:q1---千位数据寄存变量<BR>// b1---百位数据寄存变量<BR>// s1---十位数据寄存变量<BR>// g1---个位数据寄存变量<BR>//************************************************************************</P><P>void Display(int g1,int s1,int b1,int q1)<BR>{<BR> g1=g;<BR> s1=s;<BR> b1=b;<BR> q1=q;<BR> PTT=0xFE; //显示千位<BR> PTP=MA[q1];<BR> Delay(100);<BR> PTT=0xFD; //显示百位<BR> PTP=MA[b1];<BR> Delay(100);<BR> PTT=0xFB; //显示十位<BR> PTP=MA[s1];<BR> Delay(100);<BR> PTT=0xF7; //显示个位<BR> PTP=MA[g1];<BR> Delay(100);<BR>}</P><P>//************************************************************************<BR>//函数名称:Warn()<BR>//函数功能:当温度高与设定值时报警<BR>//************************************************************************</P><P>void Warn(void)<BR>{ <BR> if(AD_Value>80) //如果温度高于78度报警,B口LED灯全亮<BR> PORTB=0x00; <BR> else<BR> PORTB=0xFF; // 否则全灭<BR>}</P><P><BR> </P> |
|