使用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写这个代码,易读性会强很多