2543|3

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

麻烦大家看看问题出在哪啊? (程序有点长,主要好像是中断有问题) [复制链接]

#include  
#include  "Cry1602.h"
#define uchar unsigned char
uchar shuzi[] = {"0123456789"};
uchar zimu1[] = {"abcdefghigklmnopqrstuvwxyz"};
uchar zimu2[] = {"ABCDEFGHIGKLMNOPQRSTUVWXYZ"};
uchar *fuhao = "~`!@#$%^&*()_+-=/|,.、;'<>?:""";
uchar *jieshu = "This is the end!";
unsigned int i=0,left_1=0,left_2=0;
unsigned int ave_A0,ave_A1,ave_A2,ave_A3;
unsigned int A0result[8],A1result[8],A2result[8],A3result[8];
unsigned char index=0;
void delay(unsigned int x)
{
  unsigned int y,z;
  for(y=0;y     for(z=0;z<1000;z++);
}
/***********************主函数************************/
void main( void )
{
  WDTCTL=WDTPW+WDTHOLD;         //关闭看门狗   
  P1SEL =BIT3+BIT2;                          //P1.2和P1.3作为捕获模块功能的输入端输入方波  
  BCSCTL1&=~XT2OFF;                //打开XT2振荡器
  P2DIR|=0xff;
  P5DIR|=0xff;                      //超声波测距触发脚
  P2OUT=0x00;
  P6SEL|=0x0f;                     // P6.0,1,2,3为采集端
  
  do
   {
   IFG1 &= ~OFIFG;                     // 清除振荡器失效标志
   for (i=256;i>0;i--);                     // 延时,等待XT2起振
   }
  while ((IFG1 & OFIFG) != 0);            // 判断XT2是否起振   
  BCSCTL2 =SELM_2+SELS;             //选择MCLK=SMCLK为XT2   //-----------------------------   
  TACCTL2&=~(CCIS1+CCIS0);          // 捕获源为P1.2,即CCI0A(也是CCI0B)
  TACCTL2 =CM_2+SCS+CAP;           //下降沿捕获,同步捕获,工作在捕获模式
  TACCTL2 |=CCIE;                     //允许捕获比较模块提出中断请求
  
  TACCTL1&=~(CCIS1+CCIS0);          // 捕获源为P1.3,即CCI1A(也是CCI1B)
  TACCTL1 =CM_2+SCS+CAP;           //下降沿捕获,同步捕获,工作在捕获模式
  TACCTL1 |=CCIE;                     //允许捕获比较模块提出中断请求
  

  ADC12CTL0=ADC12ON+MSC+SHT0_12;
  ADC12CTL1=SHP+CONSEQ_3;
  ADC12MCTL0=INCH_0;
  ADC12MCTL1=INCH_1;
  ADC12MCTL2=INCH_2;
  ADC12MCTL3=INCH_3+EOS;  
  ADC12IE=0x08;
  ADC12CTL0|=ENC;
  
  TACTL |=TACLR;                      //定时器清零,
  TACTL |=ID_3;                       
  TACTL |=TASSEL_2;                   //选择时钟MCLK  
  //定时器开始计数(连续计数模式0~0xFFFF)
  TACTL |=MC_2;   _EINT();  
  while(1)
  {
        unsigned char ge,shi,bai,qian,wan;
        unsigned int Delay=50;
        P5OUT=0x00;
        delay(20);
          P5OUT=BIT0;
          while(Delay--);
          P5OUT=0x00;

        Delay=50;
        P5OUT=0x00;
        delay(20);
          P5OUT=BIT1;
          while(Delay--);     
          P5OUT=0x00;
      
          delay(60000);
//*****************显示left_1的值**********************//         
             wan=left_1/10000;
             qian=left_1%10000/1000;
             bai=left_1%1000/100;
             shi=left_1%100/10;
             ge=left_1%10;
             LcdReset();
             LcdWriteCommand(0x01, 1);           //清除显示
             Disp1Char(0,1,shuzi[wan]);
             Disp1Char(1,1,shuzi[qian]);
             Disp1Char(2,1,shuzi[bai]);
             Disp1Char(3,1,shuzi[shi]);
             Disp1Char(4,1,shuzi[ge]);
//*****************显示left_2的值**********************//            
             wan=left_2/10000;
             qian=left_2%10000/1000;
             bai=left_2%1000/100;
             shi=left_2%100/10;
             ge=left_2%10;
             Disp1Char(0,0,shuzi[wan]);
             Disp1Char(1,0,shuzi[qian]);
             Disp1Char(2,0,shuzi[bai]);
             Disp1Char(3,0,shuzi[shi]);
             Disp1Char(4,0,shuzi[ge]);  
            
         wan=ave_A0/10000;
         qian=ave_A0%10000/1000;
         bai=ave_A0%1000/100;
         shi=ave_A0%100/10;
         ge=ave_A0%10;
         Disp1Char(5,0,shuzi[wan]);
         Disp1Char(6,0,shuzi[qian]);
         Disp1Char(7,0,shuzi[bai]);
         Disp1Char(8,0,shuzi[shi]);
         Disp1Char(9,0,shuzi[ge]);  
         
         wan=ave_A1/10000;
         qian=ave_A1%10000/1000;
         bai=ave_A1%1000/100;
         shi=ave_A1%100/10;
         ge=ave_A1%10;  
         Disp1Char(5,1,shuzi[wan]);
         Disp1Char(6,1,shuzi[qian]);
         Disp1Char(7,1,shuzi[bai]);
         Disp1Char(8,1,shuzi[shi]);
         Disp1Char(9,1,shuzi[ge]);
         wan=ave_A2/10000;
         qian=ave_A2%10000/1000;
         bai=ave_A2%1000/100;
         shi=ave_A2%100/10;
         ge=ave_A2%10;  
         Disp1Char(10,1,shuzi[wan]);
         Disp1Char(11,1,shuzi[qian]);
         Disp1Char(12,1,shuzi[bai]);
         Disp1Char(13,1,shuzi[shi]);
         Disp1Char(14,1,shuzi[ge]);
         wan=ave_A3/10000;
         qian=ave_A3%10000/1000;
         bai=ave_A3%1000/100;
         shi=ave_A3%100/10;
         ge=ave_A3%10;  
         Disp1Char(10,0,shuzi[wan]);
         Disp1Char(11,0,shuzi[qian]);
         Disp1Char(12,0,shuzi[bai]);
         Disp1Char(13,0,shuzi[shi]);
         Disp1Char(14,0,shuzi[ge]);                 
         
  }
   
  
        
}
#pragma vector=TIMERA1_VECTOR        
__interrupt void Timer_A(void)
{
      _EINT();
     switch(TAIV)
     {
     case 2:
         if(TACCTL1&CM0)                        //捕获到上升沿
           {  
            
             TACTL |=TACLR;
             TACTL |=ID_3;                       
             TACTL |=TASSEL_2;                   //选择时钟MCLK  
             TACCTL1=(TACCTL1&(~CM0))| CM1;    //改为下降沿捕获:CM0置零,CM1置一
           }
         else if(TACCTL1&CM1)                    //捕获到下降沿
           {
               left_1=TACCR1;
             TACCTL1=(TACCTL1&(~CM1))| CM0;   //改为下降沿捕获:CM1置零,CM0置一
           }   
         break;
     case 4:
         if(TACCTL2&CM0)                        //捕获到上升沿
           {  
             TACTL |=TACLR;
             TACTL |=ID_3;                       
             TACTL |=TASSEL_2;                   //选择时钟MCLK
             TACCTL2=(TACCTL2&(~CM0))| CM1;    //改为下降沿捕获:CM0置零,CM1置一
           }
         else if(TACCTL2&CM1)                    //捕获到下降沿
           {
             left_2=TACCR2;
             TACCTL2=(TACCTL2&(~CM1))| CM0;   //改为下降沿捕获:CM1置零,CM0置一
           }
              
     break;
     case 10: break;
     
     }
}
#pragma vector=ADC_VECTOR        
__interrupt void ADC12ISR(void)
{
  unsigned int sum_A0,sum_A1,sum_A2,sum_A3;
  A0result[index]=ADC12MEM0;
  A1result[index]=ADC12MEM1;  
  A2result[index]=ADC12MEM2;
  A3result[index]=ADC12MEM3;
  index++;
  if(index==8)
  {
    for(index=0;index<8;index++)
    {
      sum_A0+=A0result[index];
      sum_A1+=A1result[index];  
      sum_A2+=A2result[index];
      sum_A3+=A3result[index];      
    }
    ave_A0=(int)(sum_A0/8);
    ave_A1=(int)(sum_A1/8);
    ave_A2=(int)(sum_A2/8);
    ave_A3=(int)(sum_A3/8);   
  }
  
  P2OUT^=BIT0;
}
用示波器测P2.0根本就没波形啊,根本进不了ADC中断啊

最新回复

ADC木有用过,帮不到你了 这个帖子也许有些参考意义:https://bbs.eeworld.com.cn/viewt ... d=289229#pid1339429  详情 回复 发表于 2012-7-12 09:03
 
点赞 关注

回复
举报

327

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
好吧,我是一个没有耐心的人……请问LZ这程序是干什么的,又碰到了什么问题呢?

点评

超声波测距模块与加速度计模块,用TA的捕获模式测量超声波的高脉冲时间,用ADC12将陀螺仪输出的模拟量转为数字量,但是ADC12的中断根本进不了啊  详情 回复 发表于 2012-7-11 22:58
 
个人签名Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 elulis 的帖子

超声波测距模块与加速度计模块,用TA的捕获模式测量超声波的高脉冲时间,用ADC12将陀螺仪输出的模拟量转为数字量,但是ADC12的中断根本进不了啊

点评

ADC木有用过,帮不到你了:Sweat: 这个帖子也许有些参考意义:https://bbs.eeworld.com.cn/viewthread.php?tid=339472&page=1&fromuid=289229#pid1339429  详情 回复 发表于 2012-7-12 09:03
 
 
 

回复

327

帖子

0

TA的资源

纯净的硅(高级)

4
 

回复 板凳 fll199358 的帖子

ADC木有用过,帮不到你了
这个帖子也许有些参考意义:https://bbs.eeworld.com.cn/viewt ... d=289229#pid1339429
 
个人签名Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表