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

📄 yalibiao18.s43

📁 基于MSP430单片机的压力表程序。MSP430汇编实现的。比较好。
💻 S43
📖 第 1 页 / 共 3 页
字号:
          jeq    shangx_H
          cmp.b  #2,flag4
          jeq    xiax_L
          cmp.b  #3,flag4
          jne    shed_no
                                   
shed_ok   clr.b  flag            ;设定后确定      
          clr.b  stlim
          call   #clrLCD1
          jmp    set_ok
          
shangx_H  mov.b  #02h,index      ;上限         
          mov.b  #1,flag
          mov.b  #55,stlim       ;55为修改上下限,0则相反04/10/9
          jmp    EndP2x 
xiax_L    mov.b  #04h,index      ;下限        
          mov.b  #5,flag
          jmp    EndP2x
shed_no   clr.b  flag4
          clr.b  index            ;04/10/9
          clr.b  stlim
          jmp    EndP2x
;;------------------------------------------------          
                       
set_ok    clr.b  index            ;设置ok                         
          mov    #01080h,R13      ;如果FLASH没有使用过,则直接把CN1-7转换成16进制存入FLAHS
          cmp    #0FFFFh,0(R13)   
          jeq    cunflash
          ;mov    0(R13),TEMP1
          ;mov    2(R13),TEMP2
          call   #BCDtoBIN        ;存入内部flash前比较CN1-7里的数是否被改动过,如果没有被改动过则放弃存入
          cmp    TMPF1,0(R13)
          jne    E_cflash
          cmp    TMPF2,2(R13)
          jne    E_cflash
          jmp    EndP2x
          
cunflash  call   #BCDtoBIN        ;这一段与上面一段是一样的,以后可以简化
          mov    TEMP1,R6
          cmp    TMPF1,R6         ;判断上下限是否被改动过
          jne    cunflash1
          mov    TEMP2,R6
          cmp    TMPF2,R6
          jne    cunflash1
          jmp    EndP2x 
                      
E_cflash  call   #Eflash                          
cunflash1 mov    TMPF1,R18
          call   #Wflash
          incd   R13
          mov    TMPF2,R18
          call   #Wflash          
          mov    TMPF1,TEMP1
          mov    TMPF2,TEMP2    
          jmp    EndP2x


;;----------校准-------------------------

P21_ISR   bic.b  #02h,&P2IFG     ;jiao zhu
          mov    #2500,R16
          call   #Delay
          bit.b  02h,&P2IN
          jnz    EndP2x
          mov    #01000h,R13     ;
          cmp    #0FFFFh,0(R13)  ;因为只准修一次,所以先得判断地址1000H里是否有数
          jne    EndP2x          ;如果有数则将结束P2.1中断                  
          inc.b  flag3           ;flag=1----进入0校准     flag=2----进入最大值校准  flag=3----校准OK
          cmp.b  #01h,flag3
          jeq    jiu_f1
          cmp.b  #02h,flag3
          jeq    jiu_f2
          cmp.b  #03h,flag3
          jeq    jiu_f3
          clr.b  index
          clr.b  flag3
          clr.b  &P2IFG
          reti
jiu_f3    
          clr.b  index           ;校准OK,把校准值存入内部flash
          clr.b  flag3
          mov    #01000h,R13
          cmp    #0FFFFh,0(R13)
          jeq    cunjiaozh
          call   #Eflash1         
cunjiaozh mov    jiaozh,R18     ;;记住 地址1000H存入的是4.5V校准值       
          call   #Wflash
          incd   R13
          mov    jzhun,R18
          call   #Wflash                                
          jmp    EndP2x
jiu_f1                                   
          mov.b  #06h,index
          jmp    EndP2x
          
jiu_f2    mov    jiaozh,jzhun
          mov.b  #08h,index
          jmp    EndP2x
;;-------------------------------------------------
         
P23_ISR   bic.b  #08h,&P2IFG         ;P2.3中断作用是左右移动要修改的上下限某一位数
          cmp.b  #02h,index
          jne    pd_index1
          inc.b  flag
          cmp.b  #4,flag
          jlo    EndP2x
          mov.b  #1,flag
          jmp    EndP2x
          
pd_index1 cmp.b  #04h,index         
          jne    EndP2x
          inc.b  flag
          cmp.b  #8,flag
          jlo    EndP2x
          mov.b  #5,flag
          jmp    EndP2x        ;;end P23_ISR
                        
EndP2x    clr.b  &P2IFG        ;结束P2口中断
          reti
;--------------------------------------------------------------------------------  
                 
;------------------------------------------------------------------
;    P1X_ISR  没用到   
;-------------------------------------------------------------------
P1x_ISR   bic.b  #LPM3,0(SP) 
          
          bit.b  #02h,&P1IFG
          jz     EndP1x 
       
P11_ISR   bic.b  #02h,&P1IFG
          jmp    EndP1x        
EndP1x    reti
;--------------------------------------------------------------------------
;                   BT_ISR_XX没用到
;--------------------------------------------------------------------------
BT_ISR    bic      #LPM3,0(SP)       
          
EndBT     reti

;-----------------------------------------
;            看门狗中断
;-----------------------------------------
WDTInt    bic     #LPM3,0(SP)
          bis     #ENC,&ADC12CTL0     ;04/10/8              
          cmp.b   #55,stlim           ;55为修改上下限标志,0为通常状态
          jne     EndWDT
          inc.b   limCN               ;这一段是修改上下限时屏幕一闪一灭有关 
          cmp.b   #01Eh,limCN         ;因为16ms中断一次,闪得太快,所以要累积50次=50x16=800ms
          jlo     EndWDT
          clr.b   limCN
          cmp.b   #00h,limIFG         ;      
          jeq     set_1         
          clr.b   limIFG
          jmp     EndWDT
set_1     mov.b   #01h,limIFG                             
EndWDT    reti 

         
;-------------------------------------------
; ADC interrupt  AD中断
;----------------------------------
ADC_ISR   bic     #LPM3,0(SP)
          add     &ADC12IV,PC
          reti                ;no 
          reti                ;no 
          reti                ;no 
          jmp     ISR_A0      ;no 
          reti                ;no
          reti                ;no
          reti                ;no          
          reti                ;no
          reti                ;no
          reti                ;no                   
          reti                ;no
          reti                ;no
          reti                ;no
          reti                ;no  
          reti                ;no
          reti                ;no
          reti                ;no
          reti                ;no
          reti                ;no  
 
ISR_A0    
Loop      bit     #ADC12BUSY,&ADC12CTL1
          jnz     Loop
          bic     #ENC,&ADC12CTL0
          inc.b   ADcount
          cmp.b   #1,ADcount
          jeq     END_ADC
          cmp.b   #12,ADcount             ;AD每进行11次才被计算,而且第一次AD转换值将被去掉
          ;cmp.b   #6,ADcount
          jlo     Loop1
          clr.b   ADcount
          call    #DISADC
          clr     ADCvalue          
          jmp     END_ADC            
Loop1     add     &ADC12MEM0,ADCvalue               
   
END_ADC   reti
                       
;---------------------------------------------------------------------------
TAX_ISR  ;ISR for CCR1   没用到
;---------------------------------------------------------------------------
CCR1_ISR  bic    #LPM0,0(SP)    ;exit LPM0 on reti
	  add    &TAIV,PC	;
	  reti		        ;no interrupt
	  reti		        ;CCIFG1	
          reti		        ;CCIFG2
	  reti		        ;no used
	  reti		        ;no used
	  mov.b                 #0AAh,&TOVES
	  ;reti	                ;jmp TAIFG
	  reti		        ;no used
	  reti		        ;no used

;-----------------------------------------------------------------------------------------------
;已经转换完为BCD码后存于R8,R9里(5位十进制,R9只用到低字节的低4位,低字节的高4位和高字节以后再用)
;------------------------------------------------------------------------------------------------
outLCD    mov    R8,R11
          and    #000Fh,R11        
          mov.b  LCD_Tab(R11),LCDM11
          mov    R8,R11
          rra.b  R11
          rra.b  R11
          rra.b  R11
          rra.b  R11
          and    #000Fh,R11
          mov.b  LCD_Tab(R11),LCDM12
          swpb   R8
          
          mov    R8,R11       ;
          and    #000Fh,R11        
          mov.b  LCD_Tab(R11),LCDM13          
          mov    R8,R11
          rra.b  R11
          rra.b  R11
          rra.b  R11
          rra.b  R11          
          and    #000Fh,R11
          mov.b  LCD_Tab(R11),LCDM14
          bis.b  #080h,LCDM14          
          
          ;mov    R9,R11
          ;and    #000Fh,R11
          ;mov.b  LCD_Tab(R11),LCDM15
          ret
;-----------------------------------------------------------------
;BCD-convBIN   3位BCD码 转换CN1,2,3,5,6,7 这几个变量  结果放入TMPF1和TMPF2
;------------------------------------------------------------------
BCDtoBIN  clr    TMPF1
          clr    TMPF2
          mov.b  CN3,R11
          mov.b  #100,R12
          call   #D_MUL8    
          mov    R14,TMPF1     ;CN3x100
          mov.b  CN2,R11
          mov.b  #10,R12
          call   #D_MUL8       ;CN2x10
          add    TMPF1,R14     ;
          mov.b  CN1,R12
          add    R12,R14
          mov    R14,TMPF1     ;(下错,应该为上限)限保存在TMPF1里
          
          mov.b  CN7,R11
          mov.b  #100,R12
          call   #D_MUL8    
          mov    R14,TMPF2     ;CN3x100
          mov.b  CN6,R11
          mov.b  #10,R12
          call   #D_MUL8       ;CN2x10
          add    TMPF2,R14     
          mov.b  CN5,R12
          add    R12,R14
          mov    R14,TMPF2     ;(上错)下限保存在TMPF2里          
          ret
;---------------------------------------------------
;BIN-convBCD  R5为待转换的二进制数  INPUT  R5
;--------------------------------------------------
BINtoBCD  mov   #16,R10
          clr   R8
          clr   R9
xiaoyu    rla   R5
          dadd  R8,R8
          dadd  R9,R9
          dec   R10
          jnz   xiaoyu
          ret         

;---------------------------------------------------------------
;入口:R11xR12(16x16)    出口:R15(H字),R14(L字)  yi jing OK!
;===============================================================================
D_MUL16  clr   R14
        clr   R15
MACU    clr   R9
        mov   #1,R10
MPY2    bit   R10,R11        
        jz    MPY1
        add   R12,R14
        addc  R9,R15
MPY1    rla   R12
        rlc   R9
        rla   R10
        jnc   MPY2       
        ret
               
;-------------------------------------------------------------------------------        
; 入口:R11 x 12(8x8)   结果:R14 ,需要用到的R10   yi jing OK!
;-------------------------------------------------------------------------------        

D_MUL8
MPYU8   clr   R14
MACU8   mov   #1,R10
L$002   bit   R10,R11
        jz    L$01
        add   R12,R14     
L$01    rla   R12
        rla.b R10
        jnc   L$002
        ret

;---------------------------------------------------------------------------------
;入口参数(32位/16位):R13和R12为除数,R11为被除数,出口参数:R14为商

⌨️ 快捷键说明

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