求大神赐一个MSP430测脉宽的程序啊!
本帖最后由 maoningchuan 于 2013-7-20 11:45 编辑RT,最好能用5110显示出来,小弟都弄了几天了,还没弄出来!谢谢了额!
附上程序,能帮忙看下么!我是根据论坛的程序来的,但是就是不现实!
#include<msp430x14x.h>
#include"nokia_5110.c"
#include"nokia_5110.h"
#include"hanzi.c"
#define u8 unsigned char
#define u16 unsigned int
u8 cc[]={0};
u16 dat;
u8 shuzi[] = {"0123456789."};
unsignedintwidth={0,0,0,0,0,0,0,0,0,0};
unsignedinti=0;
void conversion(unsigned long int num)
{
cc = num /100000;
num = num % 100000;
cc = num /10000;
num = num % 10000;
cc = num /1000;
num = num % 1000;
cc = num /100;
num = num % 100;
cc = num /10;
num = num % 10;
cc= num;
}
void main()
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1&=~OFIFG; //清除振荡器失效标志
for(i=256;i>0;i--); // 延时,等待XT2起振
}
while((IFG1&OFIFG)!=0); // 判断XT2是否起振
BCSCTL2=SELM_2+SELS; //选择MCLK=SMCLK为XT2
//-----------------------------
TBCCTL0&=~(CCIS1+CCIS0); //捕获源为P4.0,即CCI0A(也是CCI0B)
TBCCTL0|=CM_2+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式
TBCCTL0|=CCIE; //允许捕获比较模块提出中断请求
TBCTL|=ID_3;
TBCTL|=TBSSEL_2; //选择时钟MCLK
TBCTL|=TBCLR; //定时器清零,
//定时器开始计数(连续计数模式0~0xFFFF)
TBCTL|=MC_2;
_EINT();
LCD_Init();LCD_clear();//初始化液晶盒清屏
while(1)
{
conversion(width);
for(i=0;i<6;i++)
{
display_char(i+2,0,shuzi]);
}
}
}
//―――――定时器TB的CCR0的中断:用于检测脉冲上升与下降沿――――
#pragmavector=TIMERB0_VECTOR
__interruptvoidTimerB0(void)
{
if(TBCCTL0&CM1) //捕获到下降沿
{
TBCTL|=TBCLR;
TBCCTL0=(TBCCTL0&(~CM1))|CM0; //改为上升沿捕获:CM1 置零,CM0置一
}
elseif(TBCCTL0&CM0) //捕获到上升沿
{
width=TBCCR0; //记录下结束时间
TBCCTL0=(TBCCTL0&(~CM0))|CM1; //改为下降沿捕获:CM0置零,CM1置一
if(i==10)i=0;
}
}
mark!!!!!!!!!!!!! 感觉像超声波测距的程序啊 tjjack 发表于 2013-7-20 14:14 static/image/common/back.gif
感觉像超声波测距的程序啊
额超声波 也是要测脉宽的所以都差不多要用到捕获模块。。 粗看一下沒啥问题呀
页:
[1]