1274|0

1140

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

MSP430:输入捕获 [复制链接]

在做超声模块时用到


 1 //捕获上升沿
 2 void Capture_Pos(void)
 3 {
 4       P2SEL |= Echo;    //选择P23作为捕捉的输入端子    Timer1_A
 5 
 6       //TA1CCTL1 |=CM_3+SCS+CAP+CCIE;  //上下沿都触发捕捉,用于测脉宽,同步模式、时能中断  CCI1A
 7 
 8       TA1CCTL1 |=CM_1+SCS+CAP+CCIE;  //上升沿触发捕捉,同步模式、时能中断  CCI1A
 9 
10       TA1CTL |= TASSEL1+MC_2;  //选择SMCLK时钟作为计数时钟源,不分频   增计数模式不行,必须连续计数模式
11 
12 }
//捕获上升沿

 1 //捕获下降沿
 2 void Capture_Neg(void)
 3 {
 4       P2SEL |= Echo;    //选择P23作为捕捉的输入端子    Timer1_A
 5 
 6       TA1CCTL1 |=CM_2+SCS+CAP+CCIE;  //下降沿触发捕捉,同步模式、时能中断  CCI1A
 7 
 8       TA1CTL |= TASSEL1+MC_2;  //选择SMCLK时钟作为计数时钟源,不分频   增计数模式不行,必须连续计数模式
 9 
10 //      TA1R=0;
11 
12 }
//捕获下降沿

 1 #pragma vector=TIMER1_A1_VECTOR      //Timer1_A CC1  的中断向量
 2 
 3 __interrupt void Timer_A1(void)
 4 
 5 {
 6     unsigned int count;
 7     char countH,countL;
 8     float mile;
 9     UCHAR shi[2];
10        //的方法进行判断是哪一个中断源产生的中断
11 
12   switch(TA1IV)    //如果是Timer1_A CC1产生的中断
13 
14   {
15 
16     case 2:      // CCR1 not used   捕获/比较器1
17 
18     {
19         if(CaptureFlag==0)
20         {
21 //            uart_send_ch('H');
22             CaptureFlag=1;
23             Capture_Neg();
24         }
25         else if(CaptureFlag==1)
26         {
27             /*
28              * 声速340m/s = 34cm/ms;
29              * distance = 34/2*time
30              * time=count/1000 (ms) 认为频率为1Mhz
31              * */
32 //            uart_send_ch('L');
33             count=TA1CCR1;
34 //            countL=(char)(count&0xff);
35 //            countH=(char)(count>>8);
36             mile=(float)count;
37             mile=mile/1000*17;
38             distance=(char)mile;
39             P1OUT ^= GRN_LED;
40             uart_send_ch(distance);
41 //            shi[0]=distance/10+0x30;
42 //            shi[1]=distance%10+0x30;
43 //            OLED_SSD1306_Display8x16Str(0,80,&shi[0]);
44 //            OLED_SSD1306_Display8x16Str(0,96, "cm");
45             CaptureFlag=2;
46 //             uart_send_ch(distance);
47 //            uart_send_ch(shi[0]);
48 //            uart_send_ch(shi[1]);
49 //            CaptureFlag=0;
50 //            Capture_Pos();
51 
52         }
53 
54 
55         break;
56 
57      }
58 
59     case 4:break;  // CCR2 not used    捕获/比较器2
60 
61     case 10:break; // overflow  定时器溢出
62 
63    }
中断处理

中断处理只需要记住结果,内部逻辑代码跟模块有关

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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