编了一个MSP430f249捕获脉冲宽度的程序,没有捕获到数据,麻烦大神们帮忙看看

问题描述

编了一个MSP430f249捕获脉冲宽度的程序,没有捕获到数据,麻烦大神们帮忙看看

程序代码如下:
main.c文件:
/*定时器B测量某输入信号脉冲宽度*/

#include
#include"lcd.h"
#define M1 10
unsigned int cap1,N1;
long width[10]={0,0,0,0,0,0,0,0,0,0};
char m=0;
char lcd_buf[]={0,0,0,0,0,0};
long data;
const char table[]="0123456789";
const char table1[]="width(us)";
void data_to_buf(unsigned long data2)//值送显示缓冲区函数
{
unsigned char i;
for(i=0;i
{
lcd_buf[i]=table[data2%10];//此时低位在前
data2=data2/10;
}
for(i=5;i>0;i--)
{
if(lcd_buf[i]=='0')
lcd_buf[i]=' ';//数字其那面的0不显示
else break;
}
}

void main( void )
{
char num,k1;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗

BCSCTL2=SELS+DIVS0+DIVS1;//SMCLK=XT2

P4SEL|=0x01;//P4.0作为捕获模块功能输入端输入方波
P5DIR=0xFF;//设置P5端为输出
P6DIR=0xFF;//设置P6端为输出
lcdinit();
//TBCCTL0=0;//捕获源为P4.0,即CCI0A(也是CCI0B)
TBCCTL0|=CM_1+SCS+CAP+CCIE;//上升沿捕获,同步捕获,工作在捕获模式
//+终端允许
TBCTL|=TBSSEL_2+MC_2+TBIE;//选择SMCLK+连续计数模式
//+终端允许
write_com(0x80);//显示第一行字
for(num=0;num<10;num++)
write_data(table1[num]);
_EINT();//中断允许

while(1)
{
data=0;
for(k1=0;k1<M1;k1++)
data+=width[k1];
data=data/M1;
//data=10000;
if(m==0)
{
data_to_buf(data);//数据送显示缓冲区
write_com(0x80+0x40);//第二行显示频率
for(num=0;num<6;num++)
write_data(lcd_buf[5-num]);
}
}

}

#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB0(void)//定时器TB的CCR0的中断,用于检测脉冲上升与下降
{
if(TBCCTL0&CM1)//捕获到下降沿
{
width[m++]=65536*N1+TBCCR0-cap1;//记录下结束时间
N1=0;
TBCCTL0=CM_1+SCS+CAP+CCIE;//+TBCLR;
//改为上升沿捕获,CM1置0,CM0置1
if(m==M1) m=0;
}
else if(TBCCTL0&CM0)//捕获到上升沿
{
cap1=TBCCR0;
N1=0;
TBCCTL0=CM_2+SCS+CAP+CCIE;//+TBCLR;
//改为下降沿捕获,CM0置0,CM1置1
}
}

//Timer_B7 Interrupt Vector(TBIV) handler
#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B(void)
{
switch(TBIV)
{
case 14:N1++;break;//溢出
}
}

lcd.c文件:
#include
#define lcdrs_0 P6OUT&=~BIT0;//P6.0=0命令
#define lcdrs_1 P6OUT|=BIT0;//P6.0=1
#define lcden_0 P6OUT&=~BIT2;//P6.2=0
#define lcden_1 P6OUT|=BIT2;//P6.2=1

void delay(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}

void write_com(char com) //写入
{
lcdrs_0;//LCD选择输入命令
P5OUT=com;//向P0端口输入命令
delay(5);//延时
lcden_1;//打开LCD使能
delay(5);//一个高脉冲
lcden_0;//关闭LCD使能

}

void write_data(char dataout)
{
lcdrs_1;//设置为输入数据
P5OUT=dataout;//将数据赋给P0端口
delay(5);//延时
lcden_1;//置高
delay(5);//高脉冲
lcden_0;//置低,完成高脉冲
}

void lcdinit()
{
lcden_0;
write_com(0x38);//设置16X2显示5X7点阵,8位数据接口
write_com(0x0c);//设置开始显示,不显示光标
write_com(0x06);//写一个字符后地址指针加1
write_com(0x01);//显示清零,数据指针清零
}

lcd.h文件:
extern void delay(unsigned int z);
extern void write_com(char com);
extern void write_data(char dataout);
extern void lcdinit();

仿真结果如下:

在单片机上试结果一样没有。

解决方案

用示波器调试下看看端口有没有发来数据

时间: 2024-10-29 12:31:44

编了一个MSP430f249捕获脉冲宽度的程序,没有捕获到数据,麻烦大神们帮忙看看的相关文章

c#-自己用C#做了一个可以实现多人聊天的程序 调试时一直提示错误 大神帮帮忙 修改一下!!!谢谢了

问题描述 自己用C#做了一个可以实现多人聊天的程序 调试时一直提示错误 大神帮帮忙 修改一下!!!谢谢了 文件下载地址:https://pan.baidu.com/s/1i3NdLf3 提取密码:iw3h 大神帮忙看看 修改一下 小弟谢谢了!!! 解决方案 这个网上有很多栗子的哦. 解决方案二: 想知道我的程序到底哪里错了 求大神能解答 解决方案三: 想知道我的程序到底哪里错了 求大神能解答

程序-mysql时间函数 求各位大神们帮忙啊

问题描述 mysql时间函数 求各位大神们帮忙啊 根据一个开始日期和一个结束日期判断他是否是今天,明天,本周,本周末,下周,下周末和本月用Java程序判断也行 解决方案 http://www.cxybl.com/html/wlbc/db/MYSQL/20120615/30335.html 解决方案二: import org.joda.time.DateTime; import org.joda.time.Days; import org.joda.time.LocalDate; //使用这个jo

malloc-小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下

问题描述 小弟谢了一个简单的字符串求最大子串的程序不知道错哪里,請大神帮忙回答下 程序要求如下: 一个字符串,字符连续的部分为子串(不含带数字的部分) 下面是我写的程序 #include using namespace std; char* BiggestStr(char* str) { char* pStr = (char*)malloc(sizeof(str)+1); //申请一个空间存最大子串 int nCount = 0; //用于记录最大子串的长度 int J_nCount=0; ch

应用-麻烦大神写出一个c++程序出来

问题描述 麻烦大神写出一个c++程序出来 几何图形的简单计算.内容是用C++设计一个业务处理系统,其业务就是进行简单的几何计算:l输入圆的半径,计算并输出圆的周长和面积:l输入圆柱的半径和高,计算并输出圆柱的表面积和体积:l输入圆锥的半径和高,计算并输出圆锥的表面积和体积:l输入圆球的半径,计算并输出圆球的表面积和体积:l输入长方形的长和宽,计算并输出长方形的周长和面积:l输入长方体的长.宽和高,计算并输出长方体的表面积和体积.要求:①必须设计圆.圆柱.圆锥.圆球.长方形.长方体等类:②必须应用

汇编语言-有没有汇编的大神帮帮忙,一个简单的程序。。。。。跪求,好人一生平安

问题描述 有没有汇编的大神帮帮忙,一个简单的程序.....跪求,好人一生平安 ;子程序名:在字符串1后面追加字符串2,设字符串均以0结束 ;功 能:在字符串1末追加字符串2 ;入口参数:DS:SI=字符串1起始地址的段值:偏移 ; DS:DI=字符串2起始地址的段值:偏移 ;出口参数:无 ;说 明:不考虑在字符串1后是否留有足够的空间 STRCAT PROC PUSH ES PUSH AX PUSH CX PUSH SI PUSH DI CLD PUSH DS POP ES ;使ES同DS PU

printf-新编得程序函数调用总出错,求大神帮忙。。

问题描述 新编得程序函数调用总出错,求大神帮忙.. #include int my_str_len(void); int print_char_array_values(void); int char_array_reverse(void); int main(void){ char arr[30]; int i; char e,n,d; while(3){ puts("Please provide a character string,don't type more than 30 eleme

代码-问一个JAVA的基础问题,希望大神们帮忙解惑。

问题描述 问一个JAVA的基础问题,希望大神们帮忙解惑. 有一段如下的代码,有几个疑惑: 1.定义了一个final的test1和一个static里面的test1,为什么定义2个test1不会有问题? 2.为什么在一个类中直接写static{ },这个是什么原理? 3.还有什么类似static{ }这样的写法?是什么原理? public class MyOwenTest{ public static final String test1 = "a"; static{ String tes

用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里

问题描述 用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里 int substr_index( const char substr[], const char str[]) { int flag = -1; int sizeOfSubstr = sizeof(substr)/sizeof(char); int sizeOfStr = sizeof(str)/sizeof(char); for (int i = 0; i < sizeOfStr; i+

窗体-C#中如何添加FormClose事件 按了关闭,程序没有停止调试,求大神指导

问题描述 C#中如何添加FormClose事件 按了关闭,程序没有停止调试,求大神指导 刚开始学习C#窗体 做登录界面 在登录按钮设置了 连接一个成功提示,但是进去了按关闭的时候,窗体并没有停止运行,一直在调试,求该如何解决,希望大神们帮帮忙 private void button1_Click(object sender, EventArgs e) { if(textBox1.Text=="admin"&&textBox2.Text=="123")