⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 msp430+dypme007
💻 C
字号:
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_ints.h>
#include <interrupt.h>
#include <sysctl.h>
#include <gpio.h>
#include <pwm.h>
#include <timer.h>

unsigned char flag=0;
unsigned long timerint;

void jtagWait(void)
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
  GPIODirModeSet(GPIO_PORTC_BASE,GPIO_PIN_5,GPIO_DIR_MODE_IN);
  if(GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_5)==0x20)
  {
    for(;;);
  }
  SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC);
}


int main(void)
{ 
  SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);  
  jtagWait();
  LcdInit();
  KeyInit();
  
//用B0作为控制,B2作为接收
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);	
  GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_0);
  GPIOPinTypeGPIOInput(GPIO_PORTB_BASE,GPIO_PIN_2);
  GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,0);
//使用定时器0计时
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
  TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);
//以中断方式控制  
  GPIOPinIntEnable(GPIO_PORTB_BASE,GPIO_PIN_2);
  IntMasterEnable();
  
  
  unsigned char key;

  unsigned char str[8];
  unsigned long i,j;
  unsigned long time,dis;
    
   while(1){	
//按任意键开始
     key=KeyRelease();
     if(key==16)continue;
     
     
     GPIOIntTypeSet(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_HIGH_LEVEL);	//设B2允许高电平中断
     //发一个略大于10us
     
     GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,1); 
     for(i=0;i<20;i++);
     GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,0); 
//正式开启B2中断     
     flag=2;     
     IntEnable(INT_GPIOB);
//等待计时结束,将会两次进入中断程序
     while(flag!=1);
//计时完毕,计算显示
     time=3000000-147-timerint;		//147为测得没有高电平的指令运行所需的时间
     dis=time*340/12000;		//*声速/2/6000
     
     for(j=0;j<8;j++) str[j]='0';
     str[8]='\0';
     j=time;
     i=1;
     while(j>=10){
       str[8-i]=j%10+48;
       j=j/10;
       i++;
     }
     str[8-i]=j+48;
     LcdPst(0,1);
     LcdWriteWord(&str);
     
     for(j=0;j<8;j++) str[j]='0';
     str[8]='\0';
     j=dis;
     i=1;
     while(j>=10){
       str[8-i]=j%10+48;
       j=j/10;
       i++;
     }
     str[8-i]=j+48;
     LcdPst(0,2);
     LcdWriteWord(&str);  
  }
}
void GPIO_Port_B_ISR(void)
{
    unsigned long ulStatus;

    ulStatus = GPIOPinIntStatus(GPIO_PORTB_BASE, true);
    GPIOPinIntClear(GPIO_PORTB_BASE, ulStatus);
    
    if (ulStatus & GPIO_PIN_2)
    {
      if(flag==2){	//高电平进入中断,开定时器,开始计时,设为低电平中断
        TimerLoadSet(TIMER0_BASE, TIMER_A,3000000);
        TimerEnable(TIMER0_BASE, TIMER_A);
        GPIOIntTypeSet(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_LOW_LEVEL);
        flag=0;
      }else{
        IntDisable(INT_GPIOB); 	低电平进入中断,关定时器,读取,示意计时完毕
        timerint=TimerValueGet(TIMER0_BASE, TIMER_A);
        TimerDisable(TIMER0_BASE,TIMER_A);
        flag=1;
      }
    }    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -