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

📄 yalibiao18.s43

📁 基于MSP430单片机的压力表程序。MSP430汇编实现的。比较好。
💻 S43
📖 第 1 页 / 共 3 页
字号:
	  mov    @SP,Distmp2	    ;
       	  call   #FLT_REC	    ;             
          mov    Distmp2,R8     
End_cal   call   #outLCD
          ret    

xiaoy0    mov.b  #07Bh,LCDM11       ;小于下限时显示0.000
          mov.b  #07Bh,LCDM12
          mov.b  #07Bh,LCDM13
          mov.b  #07Bh,LCDM14
          bis.b  #080h,LCDM14  
          mov.b  #067h,LCDM17
          ret

	EVEN
	
F10H    DW   08320h
F10L    DW   0000h	
F100H   DW   08648h
F100L	DW   0000h
F1000H  DW   0897Ah
F1000L  DW   0000h
F36H    DW   08166h
F36L    DW   06666h
F45H    DW   08210h         ;现在以2.5V时2238为计算,等真正测时再具体
F45L    DW   0000h
FxxxxH  DW   08D41h         ;12379.6  是4.5V是4次AD转换值总和      
FxxxxL  DW   06E66h
F58PH   DW   08239h         ;暂时以0.5V变到4.5V是压力从0变到5.8 psi为计算 1 psi=6.89476 kPa
F58PL   DW   09999h
F20PH   DW   08100h         ;暂时以0.5V变到4.5V是压力从0变到2.0 psi为计算
F20PL   DW   0000h 
;-----------------------------------------------------------------------


;-------------------------------------------------------------------
;         
;--------------------------------------------------------------------
setup     mov    #05A80h,&WDTCTL      
          bis.b  #WDTIE,&IE1
          
          dint  
setupLCD  ;mov.b  #05Dh,&LCDCTL                    ;初始化LCD 
          mov.b  #LCDON+LCD4MUX+LCDP2,&LCDCTL      ;9Dh     
          ;bis.b  #0FCh,&P5SEL                     ;set Rxx and COM pins for LCD 
          bis.b  #0FFh,&P5SEL
                           
setupBT   mov.b  #BT_ADLY_2000,&BTCTL       ;Basic Timer interrupt = 1 second  初始化BT 
          bic.b  #BTFRFQ1,&BTCTL            ;set freqLCD = ACLK / 64*
          ;bis.b  #BTIE,&IE2                 ;**
          bic.b   #BTIE,&IE2
          
          mov    #10000,R16
FLL_Wait  dec    R16                        ;delay for FLL to lock
          jnz    FLL_Wait		 
	  bic.b  OFIFG,&IFG1
          clr.b  index
          
setupP1   mov.b  #0FFh,&P1IES               ;初始化P1
	  mov.b  #0FFh,&P1DIR               ;
	  mov.b  #00h,&P1OUT
	  clr.b  &P1IFG
	
setupP2   mov.b  #0Fh,&P2IE                 ;*初始化P2
	  mov.b  #0F0h,&P2DIR               ;
	  mov.b   #00h,&P2OUT               ;*
	  ;bis.b  #BIT1,&P2DIR
	  ;bis.b  #BIT1,&P2OUT
	  clr.b  &P2IFG	

setupP6	  mov.b  #0FFh,&P6DIR               ;04/09/10 初始化P6
	  mov.b  #00h,&P6OUT
	  
	
setupP34  mov.b  #00h,&P3OUT                ;初始化P34
          mov.b  #0FFh,&P3DIR
          mov.b  #00h,&P4OUT
          mov.b  #0FFh,&P4DIR
          mov.b  #00h,&P5OUT 
          mov.b  #0FFh,&P5DIR
            
setupCA   mov.b  #P2CA0,&CACTL2             ;初始化CA
          clr.b  &CACTL1
          mov.b  #040h,&CAPD             
         
          
setupADC  bis.b  #01h,&P6SEL                ;初始化ADC12
          bic    #ENC,&ADC12CTL0
          mov    #BIT6+REFON+ADC12ON,&ADC12CTL0     ;2.5V ,打开参考电压发生器
         
          mov    #CONSEQ_0,&ADC12CTL1
          bis    #BIT3,&ADC12CTL1                   ;04/10/8  用ACLK做AD的时钟
          mov.b  #00h,&ADC12MCTL0
          mov    #BIT0,&ADC12IE
          bis    #ENC,&ADC12CTL0          
                                                                 
          mov.b  #a+b+c+d+e+f+g+h,LCDM11     ;检查LCD显示
          mov.b  #a+b+c+d+e+f+g+h,LCDM12
          mov.b  #a+b+c+d+e+f+g+h,LCDM13
          mov.b  #a+b+c+d+e+f+g+h,LCDM14
          mov.b  #a+b+c+d+e+f+g+h,LCDM15
          mov.b  #a+b+c+d+e+f+g+h,LCDM16
          mov.b  #a+b+c+d+e+f+g+h,LCDM17
          mov.b  #a+b+c+d+e+f+g+h,LCDM18

          mov.b   #12,R14                     ; 
waiting   ;mov    #2500,R16
          mov     #62500,R16                  ;*
          call    #Delay
          dec.b   R14
          jnz     waiting                   
          clr.b   &P1IFG
          clr.b   &P2IFG          
clearLCD  call    #clrRAM_LCD                 ;清除LCD             
         
;---------------------------------以下这一段是初始化时读取存入内部flash的上下限放入CN1-7----------          
          mov     #01080h,R13
          cmp     #0FFFFh,0(R13)
          jne     read_CNX
          clr.b   CN1
          clr.b   CN2
          clr.b   CN3
          clr.b   CN5
          clr.b   CN6
          clr.b   CN7
          clr     TEMP1
          clr     TEMP2
          jmp     setupTA
                   
read_CNX  mov     0(R13),TEMP1
          mov     2(R13),TEMP2
          mov     TEMP1,R5
          call    #BINtoBCD
          mov     R8,R11
          and     #000Fh,R11
          mov.b   R11,CN1
          mov     R8,R11
          rra.b   R11
          rra.b   R11
          rra.b   R11
          rra.b   R11
          and     #000Fh,R11
          mov.b   R11,CN2
          swpb    R8
          and     #000Fh,R8
          mov.b   R8,CN3      
          
          mov     TEMP2,R5        
          call    #BINtoBCD
          mov     R8,R11
          and     #000Fh,R11
          mov.b   R11,CN5
          mov     R8,R11
          rra.b   R11
          rra.b   R11
          rra.b   R11
          rra.b   R11
          and     #000Fh,R11
          mov.b   R11,CN6
          swpb    R8
          and     #000Fh,R8
          mov.b   R8,CN7
;-------------------------------------------------------------------------                                                              
setupTA   ;mov     #05A1Ch,&WDTCTL
          mov     #05A1Eh,&WDTCTL      ;16ms interrupt
          mov.b   #SCFQ_2M,&SCFQCTL    ;2M MCLK
          mov     #20000,R16           ;待MCLK稳定
          call    #Delay
          nop
          eint                         ;开放总中断
          ret
 
;----------------------------------------------------------------------------

clrRAM_LCD                    ;清RAM和LCDMX
          clr    R13
RCL       clr.b  200h(R13) 
          inc    R13
          cmp    #048h,R13
          jlo    RCL
          clr.b  &IFG1
          clr.b  &IFG2
 
clrLCD1   clr    R13
clrLCD    clr.b  9BH(R13)     ;
          inc    R13
          cmp    #09h,R13
          jlo    clrLCD  
          ret 

;--------------------------------------------------------------------------------
;	擦除内部flash 块A     
;--------------------------------------------------------------------------------
Eflash1	
	   xor    #FXKEY+LOCK,&FCTL3
TestBusy31 bit    #BUSY,&FCTL3
	   jnz    TestBusy31
           mov    #(FWKEY+FSSEL0+FN0+FN2),&FCTL2
	   mov    #FWKEY+ERASE,&FCTL1
	   clr    &01000h
           clr    &01002h
TestBusy41 bit    #BUSY,&FCTL3
	   jnz    TestBusy41
	   xor    #FXKEY+LOCK,&FCTL3
	   ret

;--------------------------------------------------------------------------------
;	擦除内部flash 块B      
;--------------------------------------------------------------------------------
Eflash	
	  xor    #FXKEY+LOCK,&FCTL3
TestBusy3 bit    #BUSY,&FCTL3
	  jnz    TestBusy3
          mov    #(FWKEY+FSSEL0+FN0+FN2),&FCTL2
	  mov    #FWKEY+ERASE,&FCTL1
	  clr    &01080h
          clr    &01082h
TestBusy4 bit    #BUSY,&FCTL3
	  jnz    TestBusy4
	  xor    #FXKEY+LOCK,&FCTL3
	  ret
;--------------------------------------------------------------------------------
;	flash 写
;--------------------------------------------------------------------------------
Wflash	
TestBusy1 bit    #BUSY,&FCTL3
	  jnz    TestBusy1
	  mov    #FWKEY,&FCTL3	;clean LOCK bit
          mov    #(FWKEY+FSSEL0+FN0+FN2),&FCTL2
          mov    #FWKEY+WRT,&FCTL1    ;enable FLASH write
	  mov    R18,0(R13)       ;save a word in info memory
TestBusy2 bit    #BUSY,&FCTL3         ;check busy flag
          jnz    TestBusy2            ;loop until not busy 
	  mov    #FWKEY,&FCTL1        ;lock FLASH memory
          xor    #FXKEY+LOCK,&FCTL3        
          ret


;-------------------------------------------------------------------------------
;        Delay Subroutines     use R16,R16=2500 for 10ms;R16=25000 for 100ms;
;		          R16=62500 for 250ms	 	
;-------------------------------------------------------------------------------
Delay	  dec    R16
	  jnz    Delay
	  ret      
;--------------------------------------------------------------------------
;         P2口中断  
;--------------------------------------------------------------------------
P2x_ISR   bic    #LPM3,0(SP)              
          
          bit.b  #02h,&P2IFG
          jnz    P21_ISR
          
          bit.b  #01h,&P2IFG
          jnz    P20_ISR
          
          bit.b  #08h,&P2IFG
          jnz    P23_ISR           
          
          bit.b  #04h,&P2IFG
          jz     EndP2x
                                
P22_ISR   bic.b  #04h,&P2IFG     ;清P2.2中断标志                             
flag_0    cmp.b  #02h,index
          jne    pd_index        ;跳去判断index?=4(设置下限)
          cmp.b  #1,flag         ;index=2(设置上限)
          jeq    flag_1          ;flag=1表示在设置状态下时的上限最后一位可以修改,对应于变量CN1和LCDM11,表示修改到LCDM11
          cmp.b  #2,flag         ;flag=2表示在设置状态下时的上限最后2位可以修改,对应于变量CN2和LCDM12,表示修改到LCDM12
          jeq    flag_2
          cmp.b  #3,flag         ;flag=2表示在设置状态下时的上限最高位可以修改,对应于变量CN3和LCDM13,表示修改到LCDM13
          jeq    flag_3
          jmp    EndP2x
          
flag_1    inc.b  CN1             ;按一次P2.2键,CN1将加1,变量对应关系 :flag=1-------CN1-----LCDM11     
          cmp.b  #0Ah,CN1        ;                                      flag=2-------CN2-----LCDM12
          jlo    EndP2x          ;                                      flag=3-------CN3-----LCDM13
          clr.b  CN1
          jmp    EndP2x
flag_2    inc.b  CN2          
          cmp.b  #0Ah,CN2
          jlo    EndP2x
          clr.b  CN2
          jmp    EndP2x
flag_3    inc.b  CN3          
          cmp.b  #0Ah,CN3
          jlo    EndP2x
          clr.b  CN3
          jmp    EndP2x
        

pd_index  cmp.b  #04h,index       ;设置下限,变量的对于关系:flag=5-------CN5-----LCDM11
          jne    EndP2x           ;                          flag=6-------CN6-----LCDM12
          cmp.b  #5,flag          ;                          flag=7-------CN7-----LCDM13
          jeq    flag_5           ;                         
          cmp.b  #6,flag
          jeq    flag_6
          cmp.b  #7,flag
          jeq    flag_7
          jmp    EndP2x
          
flag_5    inc.b  CN5          
          cmp.b  #0Ah,CN5
          jlo    EndP2x
          clr.b  CN5
          jmp    EndP2x
flag_6    inc.b  CN6
          cmp.b  #0Ah,CN6            
          jlo    EndP2x
          clr.b  CN6
          jmp    EndP2x
flag_7    inc.b  CN7
          cmp.b  #0Ah,CN7
          jlo    EndP2x
          clr.b  CN7
          jmp    EndP2x 
;;------------------------------------
                                                            
P20_ISR   bic.b  #01h,&P2IFG     ;进入上下限设定
          ;mov    #2500,R16      ;要了延时会进不去
          ;call   #Delay
          ;bit.b  #01h,&P2IN
          ;jnz    EndP2x
          inc.b  flag4
          cmp.b  #1,flag4

⌨️ 快捷键说明

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