智能车制作

标题: 关于CW的在线调试和芯片实际连续运行的特大区别! [打印本页]

作者: laugh007smile    时间: 2010-5-13 16:57
标题: 关于CW的在线调试和芯片实际连续运行的特大区别!
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */



void main(void) {
int ad[14];
int i,k;
  ATD0CTL1=0x00;  //八位精度,无采样预充电,禁止外部触发
  ATD0CTL2=0x40;  //快速清零,停止模式下AD转换停止,忽略外部触发,开中断,禁止比较中断
  ATD0CTL3=0xE8;  //右对齐,13位长度,noFIFO,Freeze模式下继续转换
  ATD0CTL4=0x05;  //四倍采样时钟,PRS=10,ATDclock=[busclock/2*(PRS+1)]=12/6=2MHZ
  ATD0CTL5=0x30;  //禁止特殊转换模式,连续转换模式,多通道采样,通道0
  ATD0DIEN=0x00;  //禁止数字输入
DDRB=0XFF;
PORTB=0X00;
  for(;;) {
           while(ATD0STAT0_SCF==1){
      ad[1]=ATD0DR7;
      ad[2]=ATD0DR6;
      ad[3]=ATD0DR5;
      ad[4]=ATD0DR4;
      ad[5]=ATD0DR3;
      ad[6]=ATD0DR2;
      ad[7]=ATD0DR1;
      ad[8]=ATD0DR0;
      ad[9]=ATD0DR8;
      ad[10]=ATD0DR9;
      ad[11]=ATD0DR10;
      ad[12]=ATD0DR11;
      ad[13]=ATD0DR12;
           }
           for(i=1;i<14;i++){
                     if(ad[i]<155)
                     ad[i]=1;
                     else
                     ad[i]=0;
           }
           PORTB_PB0=ad[13];
           PORTB_PB1=ad[12];
           PORTB_PB2=ad[11];
           PORTB_PB3=ad[10];
           PORTB_PB4=ad[9];
           PORTB_PB5=ad[8];
           PORTB_PB6=ad[7];
           PORTB_PB7=ad[6];
   
           
  }
}
这样单步运行的话SCF实际上永远是1,所以理论上AD的采样永远就循环于while(ATD0STAT0_SCF==1){....}之中,也就是说他不会执行之后的程序。而且如果你单步运行的话就是如此。但是当把程序烧进去以后芯片自己运行他就会跳出这个循环执行以后的程序。这个是为什么?很奇怪~
作者: laugh007smile    时间: 2010-5-13 17:00
补充,这就是AD采样以后跟155比较,小的就是1,打的就是0,然后给PB口亮灯,单步运行不可以,但实际运行就可以实现了,想问一下为什么?
作者: 民警加大学    时间: 2010-5-13 19:46
见识了!
作者: 草原    时间: 2010-5-14 09:31
不懂,经验:在while中SCF清零,试试看呢




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2