TI中文支持网
TI专业的中文技术问题搜集分享网站

关于430g2353单片机,p1.2引脚low-to-high使能中断,进入中断后,不能通过RETI命令退出,程序重新执行进入中断后的代码

使用430g2353单片机,开发环境IAR FOR MSP430 

以下是代码:

反;单片机型号:MST430G2231   MSP430G2353
;晶振:  内部1M(校准)
;=====================================================

#include "msp430.h"     ; #define controlled include file

 NAME main     ; module name
 PUBLIC main     ; make the main label vissible outside this module

;———–清看门狗宏定义—————————-
clrwdt MACRO      ;//32.768ms
mov.w   #WDTPW+WDTHOLD,&WDTCTL;    //StopWDT    MOV #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
        ENDM

;============模块选择该定义==============
#define   Module

;============探测器选择该定义============
;//#define   Detector

;——–引脚定义——————————————
;—–P1—-
 
#define        RxdPinReg     P1IN
#define       TxdPinReg     P1OUT    

#define          TxdPin      BIT1   // P1.1
#define          RxdPin      BIT2   // P1.2
#define          CtrRightPin     BIT3   // P1.3   控制向右指示灯组
#define          BeepPin      BIT4   // P1.4
#define          AdRightPin     BIT5   // P1.5   向右指示灯组AD采样
#define          AdNoWayPin     BIT6   // P1.6   安全出口标志灯组AD采样
#define          AdLeftPin     BIT7   // P1.7   向左指示灯组AD采样 

;—–P2—-   #define             CtrPinReg     P2OUT        #define          LedPinReg     P2OUT      

#define          MainLedPin      BIT0  //主电指示灯
#define          FaultLedPin     BIT1   //故障指示灯
#define          EmergencyLedPin  BIT2   //应急指示灯
#define          CtrNoWayPin     BIT3   //控制安全出口灯组
#define          CtrLeftPin      BIT4   //控制向左灯组
//#define         EN              BIT5   //使能DCDC

 

;============加载平台==================================================
#include "T6BusPlat_v002.h"

;——–cpu寄存器定义(R4—R10用于平台,R11—R15用于应用层)————–
#define   Temp             R11    //临时变量
;#define        R12
;#define        R13
;#define        R14
;#define        R15

;——–变量定义—————————–
 ORG  PlatRAMEnd
;——————————
Timer1    DS16   1;  //定时用
RunBase    DS16   1;  //运行背景光

;——–变量位定义————–

;——–常量定义————–

;========================================================================
; 程序开始
      ORG  PlatFlashEnd
;***********************************************************************
L_RESET:;
 mov.w #0300h,SP;        //初始化堆栈指针
 main:;
 mov.b &CALBC1_1MHZ,&BCSCTL1;      //Set DCO to 1MHz:Set range
 mov.b &CALDCO_1MHZ,&DCOCTL;     //Set DCO step + modulation
 bis.b #XT2OFF,&BCSCTL1;
 clr.b &BCSCTL2;        //Set DCO to MCLK and SMCLK; MCLK no divided; SMCLK no divided;
 clrwdt;
 
Init_IO:;
        clr.b   &P1SEL;                   //Set I/O state
 mov.b   #1Bh, &P1DIR;             //P1.0-P1.4 output  P1.2 IN P1.5-1.7 AD
 clr.b   &P1OUT;
 
        clr.b   &P2SEL;              //P2.0-P2.5 I/O
 mov.b   #0FFh, &P2DIR        ;P2.0-P2.5 output
 clr.b   &P2OUT;

 ;/ bis.b #1Bh, &P2OUT
  ;/ bis.b #08h, &P1OUT
              Init_RAM:;    //clear RAM:0200h-02ffh
 mov.w #0200h,Temp;
 
Init_RAM_Loop:;
 clr.w 0(Temp);
 incd.w Temp;
 cmp.w #300h,Temp;
 jl  Init_RAM_Loop;
 
 clr.w PFlagReg;        
 clr.w PStatusReg; 
 clr.w PTempReg;
 clr.w PTimerData;
 mov.w #1,InspectCounter;   
L_Delay200ms:;     //延时200mS,以便正确采样
 mov.w #25000,Temp;
 
L_Delay200msLoop:;
 clrwdt;
 dec.w Temp;
 jne  L_Delay200msLoop;
 
 
Init_Register:;          //初始化寄存器和变量
 clr.w PFlagReg;
 clr.w PStatusReg;
 
Init_EEData:;          //读出EE数据
 mov.w #PEERAMAddrStart,R11;
 mov.w #01040h,R12;
 mov.w #12,R13;
 
Init_EEDataLoop:;
 mov.w @R12,0(R11);
 incd.w R11;
 incd.w R12;
 dec.w R13;
 jne         Init_EEDataLoop;
               mov.w     #1,PDetAddress;
 mov.w #0CAh,PReceiveData;
   bis.w #1,PReceiveData;
 rla.w PReceiveData;              Init_SFR:;
 mov.w #TASSEL_2+ID_3+MC_2,&TACTL; //open timerA, step 2us, Continuous mode
 bis.w   #GIE,SR;        //Enable Interrupt
 clr.b &P1IES;         //set P1.2 low-to-high clr.b &P1IFG;
 mov.b #RxdPin,&P1IE;                   //set P1.2 interrupt
 
;//SetupADC5:
;//    mov.w #ADC10SHT_2+ADC10ON,&ADC10CTL0;         //16x, ;//    mov.w   #INCH_5,&ADC10CTL1 ;                    // select A5
 ;//   bis.b   #20,&ADC10AE0 ;                       //A5    模拟信号输入使能  A6 A7

 
;—————————————————————
; 正常工作模式
;—————————————————————
Main_Loop:;
 clrwdt;
        nop;
        nop;
 bis.b  #1h, &P2OUT;
 jmp             Main_Loop; 
  /*

SetupADC5:
       mov.w #ADC10SHT_2+ADC10ON,&ADC10CTL0;         //16x,        mov.w   #INCH_5,&ADC10CTL1 ;                    // select A5
       bis.b   #20,&ADC10AE0 ;                       //A5    模拟信号输入使能  A6 A7 
       bis.w   #ENC+ADC10SC,&ADC10CTL0               ; //Start sampling/conversion
 
Sample_Wait:
       bit.w #ADC10IFG,&ADC10CTL0;
       jeq  Sample_Wait;
       bic.w #ADC10IFG,&ADC10CTL0;  
       clr.w &ADC10CTL0;
       clr.b ADC10AE0;
       cmp.w   #01FFh,&ADC10MEM        ; ADC10MEM = A1 > 0.5AVcc?
       jlo     Main_Loop                ; Again  ADC10MEM 小于#
       bis.b   #01h,&P1OUT             ; A1大于#
 
 */

 

 
 
 
;//===================存放配置信息值(12个)===================================================
;// PDetType设备类型, PDetAddress地址, PDetSensitivity灵敏度, PDetMode工作模式,
;// PDetID1,   PDetID2,   PDetID3,    PDetID4,
;// PDetOriValue初值, PDetBaseValue基值, PDetThreshold阈值,  PEESum累加和
;//====================================================================================
 ORG  01040h      
 DW 1
 
;——————————————————————————
; Interrupt Vectors
;——————————————————————————
 ORG 0FFE4h
 DW P_Bus;    //P1 interrupt
 
 
 ORG 0FFFEh
 DW L_RESET
 
 END

Peter_Zheng:

建议您写成C代码,如遇到问题再提问。确实读陌生的汇编需要花费很多时间。

Hardy Hu:

1.你的中断服务函数在哪里?

2.建议使用C写这个代码,易读性会强很多

赞(0)
未经允许不得转载:TI中文支持网 » 关于430g2353单片机,p1.2引脚low-to-high使能中断,进入中断后,不能通过RETI命令退出,程序重新执行进入中断后的代码
分享到: 更多 (0)