请问怎么才能在这个例程中加入串口中断接收和发送程序...

2019-07-15 16:48发布

#include <msp430x14x.h>
#include "systerminit.h"
#include "lcd.h"
#include "lcd.c"
#include "ds1302.c"
#include "18b20.c"
#include "flash.c"
#include "display.c"

void main(void)

{

  P1DIR|=0xff;P1OUT|=0xff;
  P2DIR|=0xff;P2OUT|=0xff;
  P3DIR|=0xff;P3OUT|=0xff;
  P4DIR|=0xff;P4OUT|=0xff;
  P5DIR|=0xff;P5OUT|=0xff;
  P6DIR|=0xff;P6OUT|=0xff;

  unsigned char i;

  WDTCTL=WDT_ADLY_250;               //定时器模式250ms中断一次   
  IE1|=WDtiE;
  BCSCTL1&=~XT2OFF;                 //打开XT2振荡器
  BCSCTL2|=SELM1;                   //MCLK为8MHZSMCLK时钟源选择DCO 800khz
  do{
    IFG1&=~OFIFG;                   //清楚振荡器错误标志
    for(i=0;i<100;i++)
     _NOP();
  }
  while((IFG1&OFIFG)!=0);          //如果标志位1则继续循环等待
  IFG1&=~OFIFG;   
  delay_ms(5);
  P3DIR|=BIT0+BIT1+BIT2;//将液晶相关控制位设为输出
  LCDDATOUT;                      //液晶数据口设置输出
  P4OUT=0xff;                     //初始化液晶数据口为高电平
  LCD_INIT();                     //初始化液晶
  delay_ms(500);
  P1DIR=0xdf;                     //键盘端口初始化
  P1OUT=0xFF;
  P1IE|=BIT5;                     //允许中断
  P1IES=0xff;                     //下降沿中断
  P2DIR=0xff;
  P2OUT=0xff;
  /********初始化flash********/

  FCTL2=FWKEY+FSSEL1+FN0;

  /********初始化定时器*********/

  TACTL|=TASSEL_1+MC_2+TACLR;
  TACCR0=1;
  TACCR1=2048;   
  wellcomplay();        //显示欢迎画面
  read_segA();          //读取flash闹钟数据  
  LCD_CLEAR();          //清屏
  DS1302_INIT();        //初始化DS1302
  GET_TIME();           //读取一次时间
  lunar_calendar();     //进行一次阴历的转换
  display();            //显示时间画面
  DS_INIT();            //初始化18B20
  DS_write(0xcc);       //跳过ROM指令
  DS_write(0x44);       //启动转换
  _BIS_SR(GIE);         //开总中断
  while(1)

  {

    _BIS_SR(LPM2_bits);//进入低功耗     
    if(keydownflag)//如果有按键按下进入键值分析处理函数

    {

      keydownflag=0;//清除标志
      //keyvalue_const();//键值分析处理

    }

    if(flag&&(setflag==0))//1s刷新一次数据

    {

      flag=0;         

      GET_TIME();//读取时间

      temperature=GET_TEMP();//获取温度     

      display(); //刷新屏幕

    }

    switch(setflag)//根据状态标志的值显示相应的画面

    {

    case 1:play_menu_1();IE1&=~WDTIE;  _EINT();break;//主菜单一

    case 2:play_menu_2();IE1&=~WDTIE;   _EINT();break;//主菜单二

    case 3:play_menu_1_0();lastplay=1;IE1&=~WDTIE;   _EINT();break;//时间设置画面

    case 4:play_menu_2_0();lastplay=1;IE1&=~WDTIE;   _EINT();break;//闹钟设置画面

    default :break;

    }



  }

}



#pragma vector=WDT_VECTOR

__interrupt void wdt_time(void)

{



  temp=second;

  second=READ_DS1302(READ_SECOND);

  if(second!=temp)

  {

   flag=1;

  _BIC_SR_IRQ(LPM2_bits);

  }

}

#pragma vector=PORT1_VECTOR

__interrupt void port1(void)

{

  P1IFG&=~BIT5;

  keydownflag=1;

  _DINT();//关闭总中断

  _BIC_SR_IRQ(LPM2_bits);

}
#pragma vector=TIMERA0_VECTOR

__interrupt void time_A0(void)

{

  if(acflag1&&hour==achour1&&minute==acminute1)  P2OUT&=~BIT1;

  if(acflag2&&hour==achour2&&minute==acminute2)  P2OUT&=~BIT2;

  P6DIR|=BIT2;//蜂鸣器端口设为输出模式

  BUZ_ON;

}

#pragma vector=TIMERA1_VECTOR

__interrupt void time_A1(void)

{

  if(acflag1&&hour==achour1&&minute==acminute1) P2OUT|=BIT1;

  if(acflag2&&hour==achour2&&minute==acminute2) P2OUT|=BIT2;

  BUZ_OFF;

  P6DIR&=~BIT2;//蜂鸣器端口设为输出模式

  TACCTL1&=~CCIFG;  

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。