msp430 while语句的超自然现象

发布者:烟雨江湖最新更新时间:2022-10-18 来源: csdn关键字:msp430 手机看文章 扫描二维码
随时随地手机看文章

#include

#include"cry1602.h"

#define uchar unsigned char

#define uint   unsigned int

unsigned char disbuff[]="The Distance is:";

uchar shuzi[] = {"0123456789.M"};

/*********************************************

超声波模块必须的变量

**********************************************/

#define   csb_pjzcs   4

unsigned long     csb_sum;                       

uint      csb_results[csb_pjzcs];         

unsigned long int Period;//脉宽存放结果变量

unsigned long int csb_s;//存放超声波测距的距离

unsigned char Edge=1;//当前触发沿

uint csb_jcbz=1;

uchar  fzsbl;//防止进程死锁的变量,死到一定时间自动复活

/******************************************************

定义两个延时函数

******************************************************/

void csb_s_delay_us(uint us)

{

  uint i;

  for(i=0;i  {

    _NOP();

  }

}

void csb_s_delay_ms(uint ms)

{

  uint i;

  for(i=0;i  {

    csb_s_delay_us(1000);

  }

}

/*******************************************************

初始化系统时钟函数

*******************************************************/

void init_clk()

{

    unsigned char i;

    BCSCTL1&=~XT2OFF;//打开XT振荡器

    do

    {

      IFG1 &= ~OFIFG;//清除振荡错误标志

      for(i = 0; i < 0xff; i++);//延时等待

    }

    while (IFG1&OFIFG);//如果标志为1继续循环等待

    BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M 

}

/********************************************************

初始化定时器A函数

********************************************************/

void init_timerA()

{

  P1DIR |= BIT2;//P1.2输出

  P1DIR &=~BIT1;//P1.1输入

  P1SEL |=BIT1;//P1.1第二功能,捕获输入

  TACTL= TASSEL_2+MC_2+ID_3+TACLR;//SMCLK,8分频,连续计数,中断允许,计数器清零

  TACCTL0= CAP+CM_1+CCIS_0+SCS+CCIE;//捕获模式,上升沿捕获,CCI1A输入,同步捕获,中断允许

  _EINT();

}

void display(uint csb_s,uchar m,uchar n)

{

  uchar prt[6],i;

  prt[1]=10;

  prt[0]=csb_s/1000;

  prt[2]=csb_s%1000/100;

  prt[3]=csb_s%1000%100/10;

  prt[4]=csb_s%1000%100%10;

  prt[5]=11;

  for(i=0;i<6;i++)

  {

    Disp1Char((m+i),n,shuzi[prt[i]]);

  } 

}

/****************************************

启动超声波测距模块

****************************************/

void startmode()

{

    _DINT();

    P1OUT&=~BIT2;

    P1OUT|= BIT2;

    csb_s_delay_us(20);

    P1OUT &=~BIT2;

    _EINT();

}

/************************************************************

多次测量超声波距离求平均值

************************************************************/

void csb_pjz()

    {  uint i;

    csb_sum=0;

    for(i=0;i      { 

               startmode();

  fzsbl=500;    

            while(csb_jcbz)

            { 

              ;///只要此处有语句就会卡死

            }//if(fzsbl==0) csb_jcbz=0;

           

          

             csb_jcbz=1;   

             csb_s=(Period*173)/1000;//此时测出来的是mm

          csb_results[i]=csb_s;

          }

      for(i=0;i         {

     csb_sum +=csb_results[i];

   }

      csb_sum >>=2;

 }

void main()

{

    /*下面六行程序关闭所有的IO口*/

    P1DIR = 0XFF;P1OUT = 0XFF;

    P2DIR = 0XFF;P2OUT = 0XFF;

    P3DIR = 0XFF;P3OUT = 0XFF;

    P4DIR = 0XFF;P4OUT = 0XFF;

    P5DIR = 0XFF;P5OUT = 0XFF;

    P6DIR = 0XFF;P6OUT = 0XFF;

   

  WDTCTL = WDTPW + WDTHOLD;//停止看门狗

  while(1)

  {

    LcdReset();

   

    init_clk();

    init_timerA();

     csb_pjz();

     

    display(csb_sum,1,1);

    csb_s_delay_ms(200);

  }

}



//定时器A服务程序

//===============此处一定要注意中断向量TIMER0_VECTOR只指向CCR0(捕获比较寄存器0)而TIMER1_VECTOR指向CCR1、2以及TA====//

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A(void)

{


      if(Edge==1)//上升沿捕获一次

              {

      TAR = 0;

               TACCTL0= CAP+CM_2+CCIS_0+SCS+CCIE;//改为下降沿捕

               Edge = 0;//下降沿捕获标志

              }

             else

              {

                Period = TACCR0;

                TACCTL0= CAP+CM_1+CCIS_0+SCS+CCIE;//改为上升沿捕获

                Edge = 1;//上升沿捕获标志

               

    csb_jcbz =0; //让进程继续执行

                               

                                if(csb_jcbz==0)  DispNChar(0,0,16,disbuff);

              }

}


关键字:msp430 引用地址:msp430 while语句的超自然现象

上一篇:MSP430F5529火箭板 --->基于定时器A的LED灯闪烁实验(含Timer_A分析)
下一篇:MSP430 单片机内指针或结构体赋值为NULL,却有默认值的解决办法

推荐阅读最新更新时间:2024-11-11 10:40

MSP430单片机I/O端口控制特点
MSP430的I/O端口可以实现双向的输入、输出;完成一些特殊功能如:驱动LCD、A/D转换、捕获比较等;实现I/O各种中断。MSP430采用了传统的8位端口方式保证其兼容性,即每个I/O端口控制8个I/O引脚。为了实现对I/O端口每一个引脚的复杂控制,MSP430中的每个I/O口都对应一组8位的控制寄存器(如图1)。寄存器中的每一位对应一个I/O引脚,实现对该引脚的独立控制。寄存器的功能和数目是由该I/O口所能完成的功能以及类型确定的。 图1为MSP430的一个I/O端口的控制结构示意图。对于最基本的只能完成输入、输出功能的I/O端口其控制寄存器只有3个。其中,输入寄存器保存输入状态;输出寄存器保存输出的状态,方向寄存器控制
[单片机]
msp430程序丢失问题分析及解决方法
   TI 的MSP430系列是一款功耗低、市面流行的SOC结构的CPU,适合做智能仪表。IAR对其支持得很好,下面就以IAR调试为例来说说MSP430调试过程中一些问题。   1、接上仿真器,发现不能下载,IAR提示找不到目标。   (1)并口驱动能力不足,在电脑的BIOS界面下设置成ECP或者ECP+EPP模式;(2)JTAG线太长,一般超过20CM不推荐,而且这个线最好不要交叉缠绕,会影响实时在线调试;   (3)负载太大,一般功耗相对比较大,电流超过20MA以上的板子,建议用外接电源,光靠并口的电源,MCU的电压被拉低到不能写FLASH。   2、程序下载到一半,突然告警并报错,说某某地址写不进去。   (
[单片机]
<font color='red'>msp430</font>程序丢失问题分析及解决方法
基于MSP430F169的多路电阻测量系统
针对实际测量工作中经常遇到的多路电阻难以测量的问题,设计了一种新型的多路电阻测量系统。该系统使用2个MSP430F169单片机协调工作,提高了测量的精确度和稳定性。从机负责数据的测量、采集、计算与分析,主机负责储存、控制、显示以及和上位机的通信。系统结构紧凑具有低功耗、高精度、便携式等特点,特别适用于工作现场测量。系统的设计也为双处理器系统的研究打下了基础。 1 多路电阻测量系统简介 1.1 MSP430单片机 MSP430系列单片机是美国德州仪器(TI)推出的一种16位超低功耗单片机。该系列单片机具有运算能力强,片内外设丰富,低电压,超低功耗,速度快,效率高等特点。其电源电压采用1.8~3.6 V低电压,RAM数据保持方式下
[单片机]
基于<font color='red'>MSP430</font>F169的多路电阻测量系统
iar 堆栈设置_IAR MSP430设置合理堆栈大小
最近在MSP430-169LCD(MSP430F169,RAM为2KB)调试一些ucos演示例子,IAR for MSP430默认的堆栈大小是80字节,编译可以通过,运行结果不确定性,调试过程会提示 the stack pointer for stack is outside the stack range ,堆栈溢出。那么,到底设置多大的堆栈够用且不浪费呢。 一、合理设置堆栈大小 首先,查看程序共需要多大的堆栈,生成map文件,方法如下: 图1 生成map文件 生成的map文件在项目目录下的/Debug/List,打开map文件在CALL GRAPH找到找到栈的最大使用量(我的理解是main主函数,用栈最多,所以直
[单片机]
iar 堆栈设置_IAR <font color='red'>MSP430</font>设置合理堆栈大小
基于MSP430F5438A的ESP8266模块STA模式程序调试成功
ESP8266模块STA模式程序,主控芯片为MSP430F5438A,开发环境为IAR MSP430F5438A通过串口,以115200的波特率与ESP8266通信,对ESP8266进行配置, 主要完成室内WiFi的连接配置,和连接远端服务器的配置,远端服务器采用USR-TCP232-Test软件 进行模拟,USR-TCP232-Test软件打开时自动显示你的电脑IP和所用的端口号,将其直接写入程序中的 需要连接的IP和端口号即可。 配置完成后可以实现以STA方式与远端服务器进行双向数据传输。 在串口发送数据时,以字符型(“AT”)发送出去,指令发送之后,马上发送rn,表示回车换行,完成一条 指令的发送
[单片机]
基于<font color='red'>MSP430</font>F5438A的ESP8266模块STA模式程序调试成功
MSP430开发工具的介绍及其特性
  在MCU项目开发过程中,始终有两个设备紧密的联系在一起,一个是仿真器,一个是编程器。仿真器,顾名思义就是模仿单片机的功能;编程器就是把程序编写到单片机内部。   目前公司在MSP430开发工具方面主要有仿真器、编程器、各类学习板、转接板、适配器等。   一:仿真器、编程器   IAR和JTAG无法连接,是怎么回事?这是客户问的问题,在论坛中也很常见,FAE也有在问。我们就从这个问题开始讲解吧。   MSP430无论是仿真还是烧写程序,一般可以通过:JTAG、SBW、BSL接口进行。   1、JTAG是利用边界扫描技术,在430内部有逻辑接口给JTAG使用,内部有若干个寄存器连接到了430内部数据地址总线上,所以可以
[单片机]
<font color='red'>MSP430</font>开发工具的介绍及其特性
MSP430与ATMEL 93C46通讯子程序
/* ;Discription:本程序为ATMEL93C46与MSP430通讯程序 1。管脚连接如下: 93C46 MSP430 CS P4。0 CK P4。1 DI P4。2 DO P4。3 2。晶振:4/8M晶振,4M晶振4分频,选择8M时8分频,选择XT2为MCLK 3。Date:2006.03.23,Write by: Benny Chen */ #define CS_93C46_LOW P4OUT &= ~0x01 #define CS_93C46_HIGH P4OUT |= 0x01 #define SK_93C46_LO
[单片机]
基于MSP430F2274单片机对智能小车的应用设计
智能小车涉及到高级计算机控制、电子机械、自动化等诸多学科,随着科技的不断进步,智能电子产品发展步骤不断加快,各种应用层次的机器人等大量出现,目前应用在智能小车或机器人的微控制器主要是8/16单片机或ARM和数字信号处理器DSP等。本设计采用TI公司生产的功耗低运行速度快且价格便宜的MSP430F2274为核心,避障检测采用测距精准的超声波传感器,该传感器采集小车周围的环境信息并传递给MSP430进行程序判断处理,从而达到控制小车自动避障的目的。 1 系统的总体结构框图 该系统主要由MSP430控制器,超声波避障模块,电机驱动,测速,语音模块,温度模块,小车的机械运动部分采用四轮差速转向式结构,前2个轮是驱动轮,分别由电机控制其
[单片机]
基于<font color='red'>MSP430</font>F2274单片机对智能小车的应用设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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