智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2007|回复: 0
打印 上一主题 下一主题

弱弱的问下~请高手帮忙下~为什么我的程序不能采集到数据呢?

[复制链接]

11

主题

84

帖子

0

精华

高级会员

Rank: 4

积分
953
QQ
威望
520
贡献
249
兑换币
24
注册时间
2011-3-1
在线时间
92 小时
跳转到指定楼层
1#
发表于 2011-4-20 17:58:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
  void ect (void){
   TSCR1_TEN=1;   //定时器使能
    TIOS_IOS0 =0; //定时器通道0为输入捕捉
    TIOS_IOS1 =0;  //定时器通道1为输入捕捉
    TCTL4_EDG0B=0;//定时器0通道为上升沿捕捉方式
    TCTL4_EDG0A=1;
    TCTL4_EDG1B=1; ////定时器1通道为下降沿捕捉方式
    TCTL4_EDG1A=0;
    TIE=0x03;//通道0.1中断使能
    TFLG1_C0F=1;//清除0通道中断标志位
    TFLG1_C1F=1; //清除1通道中断标志位
}
void ad (void){
   ATD0CTL1=0x00;//ETRIGSEL=0 is ad通道为外部触发源
                 //SRES1,SRES0=0、0 is 8位精度选择控制位
                 // SMP_DIS=0 is 取样前不放电
                 //ETRIGCH(3,2,1,0) IS 选择通道 AN0
    ATD0CTL2=0x40;// 禁止中断 转换后自动清除寄存器(AFFC=1转换后自动清除寄存器)
    ATD0CTL3=0x88;//(DJM=1,右对齐 8位精度时转换结果放在ATD0DRxL中;S4C,S3C,S2C,S1C=0001 IS 转换序列长度选择控制位为1 )
    ATD0CTL4=0x07;//SMP[2:0]=000 IS 4*AD_CLOCK RS[4:0]=00000 IS f=[Fbusclk/(PRS+1)]*0.5
    ATD0CTL5=0x30;//连续转换 多通道转换 通道AN0开始
    ATD0DIEN=0x00;   //相应的数字信号输入禁止            
}
void pll (void){        //64MHZ
         CLKSEL=0X00;   
    PLLCTL_PLLON=1;
     SYNR =0xc0 | 0x07;   //REFDV=0xc1=193
      REFDV=0xc0 | 0x01;   //  SYNR=11000000|00000111=11000111=0xc7=199
       POSTDIV=0x00;  //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
      _asm(nop);  //1us delay         
    _asm(nop);
    _asm(nop);
    _asm(nop);
      while(!(CRGFLG_LOCK == 1));   //when pll is steady ,then use it;   
       CLKSEL_PLLSEL = 1;        //engage PLL to system;
}
void sci (void){
      SCI1CR1 = 0x00; //设置SCI0为正常模式,八位数据位,无奇偶校验
       SCI1CR2_TE = 1;   //允许发送
SCI0CR2_RE =1;   //允许接受
SCI0CR2_RIE=1;  //允许接受中断
  SCI0BDH=0x01;   //botelu=busclock/(bd(h,l)*16)=64MHZ/(416*16)=9600
  SCI0BDL=0xa0;
}
   //*********************
//发送一个字符函数
//*********************
void shuchuzifu(uchar ch)
{
  if (ch =='\n')  
  {
      while(!(SCI0SR1&0x80)) ;     
      SCI0DRL= 0x0d;            //output'CR'
     return;
   }
   while(!(SCI0SR1&0x80)) ;    //keep waiting when not empty  
   SCI0DRL=ch;
}
//*********************
//发送一个字符串函数
//*********************
void shuchuzifuchuan(char ch[])
{
  unsigned char ptr=0;
  while(ch[ptr])
  {
     shuchuzifu((unsigned char)ch[ptr++]);
  }     
  
}
#define uint unsigned int
#define uchar unsigned char
#define hang_max 30
#define lie_max 40
#define fz   32
uint z;
   uint caijihang,caijilie;
uchar tx[30][40];
uint lieshu=0,hangshu=0;
void main(void) {
  /* put your own code here */

  DDRT=0x00;
  pll();
  ad();
  ect();
  sci();
EnableInterrupts;
{
   uint e,w;//小延时程序~不过不知道到底执行了多少时间~
       for(e=1;e<6;e++)
        for(w=0;w<10;w++);
}
  for(;;) {
   
  } /* loop forever */
  /* please make sure that you never leave main */
}
   #pragma CODE_SEG NON_BANKED
        void interrupt 10 hangzhongduan(){
          TFLG1_C0F=1;//0通道中断标志
          for(z=0;z<100;z++)
             asm(nop);//防止采集到消隐信号
          for(lieshu=0;lieshu<lie_max;lieshu++){
            while(ATD0STAT0_SCF!=1);//判断AD转换是否完成
            tx[hangshu][lieshu]=ATD0DR0L;//把AD转换结果放到tx数组中保存
          }
          hangshu++;//行数自加一
          lieshu=0;//列数清零
          TIE_C0I = 1; //定时器中断使能寄存器,只有其为一TFLG才能有用
            if( hangshu>hang_max) //判断一场数据是否收集完成
           {
            TIE_C0I = 0; //关闭行中断
            TIE_C1I = 1; //打开场中断
            }
        }
        void interrupt 9 changzhongduan() {
          TIE_C0I = 0; //关闭行中断
           TIE_C1I = 0;//关闭场中断]
           TFLG1_C1F=1; //清零
          hangshu=0;//行数初始化
          lieshu=0;  //列数初始化
                /**************************************
    *              Send Image             *
    **************************************/
  
    for(caijihang = 0; caijihang < hang_max; caijihang++ )
    {                              
        for( caijilie = 0; caijilie < lie_max; caijilie++ )
        {
            if(tx[caijihang][caijilie] > fz)
                shuchuzifu('1');
            else
                shuchuzifu('0');
            for(z=0;z<50000;z++)
             asm(nop);
        }
        shuchuzifu('\n');
    }
    shuchuzifu('\n');
    /**************************************
    *            End of Sending           *
    **************************************/
        for(z=0;z<2000;z++)
        asm(nop);
     TIE_C0I = 1;
   }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-29 20:54 , Processed in 0.055136 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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