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

📄 sample.s43

📁 这是本人编的基于MSP430CPU的远程测量各种参数的程序
💻 S43
📖 第 1 页 / 共 2 页
字号:
        BIS R7,R5           ;Y1=R5
        BIS R7,R6           ;Y2=R6
        AND R5,R8
        AND R6,R8
        RET                
        
;----------------------------------------------------
;延时子程序DELAY20MS
;----------------------------------------------------
DELAY20MS:
        PUSH R5
        MOV #2000,R5
DELAYLOOP
        CALL #DELAY10US
        DEC R5
        JNZ DELAYLOOP
        POP R5
        RET
DELAY10US
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        RET 
        
;----------------------------------------------------
;显示左屏子程序LCDLPRO
;---------------------------------------------------- 
LCDLPRO
        BIS.B #RST,&P5OUT
        CALL #DELAY10US
        BIC.B #RST,&P5OUT                 ;复位LCD
        MOV #00B8H,R5
        CALL #LCDWRI                      ;设置页地址=0
        MOV #0040H,R5
        CALL #LCDWRI                      ;设置Y地址=0
        MOV #64,R6
        MOV #CH_TABLE1,R7
LCDLPRO1
        MOV @R7+,R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO1
        MOV #00B9H,R5
        CALL #LCDWRI                      ;设置页地址=1
        MOV #64,R6
        MOV #CH_TABLE1,R7
LCDLPRO2
        MOV @R7+,R5
        SWPB R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO2                       ;显示第一行汉字
        MOV #00BAH,R5
        CALL #LCDWRI                      ;设置页地址=2                
        MOV #64,R6
        MOV #CH_TABLE2,R7
LCDLPRO3
        MOV @R7+,R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO3
        MOV #00BBH,R5
        CALL #LCDWRI                      ;设置页地址=3
        MOV #64,R6
        MOV #CH_TABLE2,R7
LCDLPRO4
        MOV @R7+,R5
        SWPB R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO4                       ;显示第二行汉字 
        MOV #00BCH,R5
        CALL #LCDWRI                      ;设置页地址=4 
        MOV #0070H,R5
        CALL #LCDWRI                      ;设置Y地址=48        
        MOV #16,R6
        MOV #CH_TABLE3,R7
LCDLPRO5
        MOV @R7+,R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO5
        MOV #00BDH,R5
        CALL #LCDWRI                      ;设置页地址=5
        MOV #0070H,R5
        CALL #LCDWRI                      ;设置Y地址=48        
        MOV #16,R6
        MOV #CH_TABLE3,R7
LCDLPRO6
        MOV @R7+,R5
        SWPB R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO6                       ;显示第三行汉字  
        MOV #00BEH,R5
        CALL #LCDWRI                      ;设置页地址=6 
        MOV #0070H,R5
        CALL #LCDWRI                      ;设置Y地址=48        
        MOV #16,R6
        MOV #CH_TABLE4,R7
LCDLPRO7
        MOV @R7+,R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO7
        MOV #00BFH,R5
        CALL #LCDWRI                      ;设置页地址=7
        MOV #0070H,R5
        CALL #LCDWRI                      ;设置Y地址=48        
        MOV #16,R6
        MOV #CH_TABLE4,R7
LCDLPRO8
        MOV @R7+,R5
        SWPB R5
        AND #00FFH,R5
        CALL #LCDWRD
        DEC R6
        JNZ LCDLPRO8                       ;显示第四行汉字
        MOV.B &P4IN,R14                   ;读通道号
        AND #00FFH,R14
        CALL #HBCD
        MOV #12,R6
        CLRC
LCDLPRO9
        RLC R12
        RLC R13
        DEC R6
        JNZ LCDLPRO9
        AND #0,R12
        BIS #0DDDDH,R12
        MOV #6,R6
        MOV #0BDH,R7
        CLR R8
        CALL #REFRESH
        MOV #0DDDDH,R12
        MOV #0DDDDH,R13
        MOV #6,R6
        MOV #0BCH,R7
        CALL #REFRESH
        MOV #0DDDDH,R12
        MOV #0DDDDH,R13
        MOV #6,R6
        MOV #0BEH,R7
        CALL #REFRESH
        MOV #0DDDDH,R12
        MOV #0DDDDH,R13
        MOV #6,R6
        MOV #0BFH,R7
        CALL #REFRESH
        MOV #003FH,R5
        CALL #LCDWRI                    ;开显示        
        RET                
                       
;----------------------------------------------------
;显示右屏子程序LCDRPRO
;---------------------------------------------------- 
LCDRPRO
        MOV #ADCDATA,R9
        MOV #00B7H,R7
        MOV #0100H,R8
        MOV #6,R10
LCDRPRO1
        MOV @R9+,R11
        MOV #5,R6
        CALL #TRANSVOLT
        CALL #HBCD
        MOV #8,R6
        INC R7
        CALL #REFRESH
        DEC R10
        JNZ LCDRPRO1
        MOV #2,R10
LCDRPRO2
        MOV @R9+,R11
        MOV #1,R6
        CALL #TRANSVOLT
        CALL #HBCD
        MOV R13,R15
        SWPB R15
        AND #0F00H,R15
        BIS #00B0H,R15
        MOV #4,R6
LCDRPRO3
        CLRC
        RLC R12
        RLC R13
        DEC R6
        JNZ LCDRPRO3
        AND #0F00FH,R13
        BIS R15,R13
        AND #0FF00H,R12
        BIS #00EFH,R12
        MOV #8,R6
        INC R7
        CALL #REFRESH
        DEC R10
        JNZ LCDRPRO2
        RET

;----------------------------------------------------
;换算成电压值子程序TRANSVOLT,R11,R6输入,R14输出
;---------------------------------------------------- 
TRANSVOLT
        PUSH R7
        PUSH R8
        DINT
        MOV #2500,&MPY
        MOV R6,&OP2
        NOP
        NOP
        MOV &RESHI,R6
        MOV &RESLO,&MPY
        MOV R11,&OP2
        NOP
        NOP
        MOV &RESHI,R8
        MOV &RESLO,R7
        MOV R6,&MPY
        MOV R11,&OP2
        NOP
        NOP
        ADD &RESLO,R8
        MOV #12,R6
TRANSLOOP
        CLRC
        RRC R8
        RRC R7
        DEC R6
        JNZ TRANSLOOP
        MOV R7,R14
        POP R8
        POP R7
        EINT
        RET
        

;----------------------------------------------------
;刷新屏子程序REFRESH,输入数据R12\R13,字符数R6
;           页地址R7,R8:高字节非零选择CS2
;---------------------------------------------------- 
REFRESH
        PUSH R9
        PUSH R10
        MOV R7,R5
        CALL #LCDWRI
        MOV #40H,R5
        CALL #LCDWRI
REFLOOP
        CLRC
        MOV #4,R9
REFLOOP0
        RLC R12
        RLC R13
        RLC R10
        DEC R9
        JNZ REFLOOP0
        RLC R10
        RLC R10
        RLC R10
        AND #0078H,R10
        MOV #8,R9
        ADD #D_TABLE,R10
REFLOOP1
        MOV.B @R10+,R5
        BIS R8,R5
        CALL #LCDWRD
        DEC R9
        JNZ REFLOOP1
        DEC R6
        JNZ REFLOOP
        POP R10
        POP R9
        RET                        

;----------------------------------------------------
;写LCD命令子程序LCDWRI,R5放命令字
;----------------------------------------------------
LCDWRI
        BIC.B #EN+RW+DI,&P5OUT
        BIS.B #CS1+CS2,&P5OUT
        BIS.B #EN,&P5OUT
        NOP
        MOV.B R5,&P1OUT
        NOP
        BIC.B #EN,&P5OUT
        RET
        
;----------------------------------------------------
;读LCD状态子程序RDSTATUS,R5输出
;----------------------------------------------------
RDSTATUS
        MOV.B #0,&P1DIR
        BIC.B #EN+DI,&P5OUT
        BIS.B #RW+CS1+CS2,&P5OUT
        BIS.B #EN,&P5OUT
        NOP
        MOV.B &P1IN,R5
        NOP
        BIC.B #EN,&P5OUT
        MOV.B #0FFH,&P1DIR
        RET

;----------------------------------------------------
;写LCD数据子程序LCDWRD,R5放数据字节,高字节非零选择CS2
;----------------------------------------------------        
LCDWRD
        BIC.B #EN+RW+CS1+CS2,&P5OUT
        BIS.B #DI,&P5OUT
        PUSH R5
        BIT #0FF00H,R5
        JZ LCDWRD1
        BIS.B #CS2,&P5OUT
        JMP LCDWRD2
LCDWRD1
        BIS.B #CS1,&P5OUT
LCDWRD2
        POP R5
        BIS.B #EN,&P5OUT
        NOP                        
        MOV.B R5,&P1OUT
        NOP
        BIC.B #EN,&P5OUT
        RET        
;----------------------------------------------------
;16进制转换成BCD码子程序HBCD,IN:R14,OUT:R13,R12
;----------------------------------------------------
HBCD
        PUSH R10
        PUSH R11
        CLR R12
        CLR R13
        MOV #10000,R11
        CALL #BCDDIV
        SWPB R10
        RLA R10
        RLA R10
        RLA R10
        RLA R10        
        MOV R10,R13                   ;万位
        MOV #1000,R11
        CALL #BCDDIV
        SWPB R10
        BIS R10,R13                   ;千位
        BIS #00B0H,R13                ;小数点
        MOV #100,R11
        CALL #BCDDIV
        BIS R10,R13                   ;百位
        MOV #10,R11
        CALL #BCDDIV
        SWPB R10
        RLA R10
        RLA R10
        RLA R10
        RLA R10
        BIS R10,R12                   ;十位
        AND #000FH,R14
        SWPB R14
        BIS R14,R12                   ;个位
        BIS #00DAH,R12                ;空+V
        POP R11
        POP R10
        RET

;----------------------------------------------------
;BCD码除法子程序BCDDIV,被除数R14,除数R11,返回 R10
;----------------------------------------------------
BCDDIV
        CLR R10
BCDDIV0
        CMP R11,R14
        JL BCDDIVEND
        SUB R11,R14
        INC R10
        JMP BCDDIV0
BCDDIVEND
        RET                

;----------------------------------------------------
;ADC转换子程序ADCPRO
;----------------------------------------------------
ADCPRO
        CLR &ADC12IFG
        BIS #ADC12SC+ENC,&ADC12CTL0
ADCLOOP
        BIT #BIT8,&ADC12IFG
        JZ ADCLOOP
        BIC #ADC12SC+ENC,&ADC12CTL0
        RET
  
;----------------------------------------------------
;FLASH数据段擦除、写操作子程序ERASESEG、WRSEG,R15放段首地址
;----------------------------------------------------
ERASESEG
        MOV #WDTPW+WDTHOLD,&WDTCTL        ;关WDT
        DINT                              ;禁止中断
        MOV #FWKEY+FSSEL0+FN1,&FCTL2
        MOV #FWKEY+ERASE,&FCTL1
        MOV #FWKEY,&FCTL3
        MOV #0FFH,0(R15)
        MOV #FWKEY,&FCTL1 
        MOV #FWKEY+LOCK,&FCTL3
        EINT
        RET
        
WRSEG
        PUSH R13
        PUSH R14
        MOV #WDTPW+WDTHOLD,&WDTCTL        ;关WDT
        DINT                              ;禁止中断
        MOV #FWKEY+FSSEL0+FN1,&FCTL2
        MOV &DATAPOINT,R15
        MOV #8,R14
        MOV #ADCDATA,R13        
WRSEGLOOP
        MOV #FWKEY+WRT,&FCTL1
        MOV #FWKEY,&FCTL3
        MOV @R13+,0(R15)
        MOV #FWKEY,&FCTL1
        INCD R15
        DEC R14
        JNZ WRSEGLOOP
        MOV R15,&DATAPOINT
        BIS #FIRSTDATA,&FLAG
	MOV #0100H,R15
	CALL ERASESEG			;擦除信息段
        MOV #FWKEY+WRT,&FCTL1
        MOV #FWKEY,&FCTL3
        MOV #DATAPOINT,0(R15)		;写数据指针DATAPOINT于信息段
        MOV #FWKEY,&FCTL1
        XOR #FXKEY+LOCK,&FCTL3
        POP R14
        POP R13
        EINT
        RET
 
CH_TABLE1
   DW   0000H,0420H,7CC2H,0618H,22C0H,4110H,3FFEH,4090H
   DW   2010H,1FF8H,0048H,0048H,7FC4H,0064H,0040H,0000H   ;"浙"
   DW   0000H,4020H,4020H,2020H,1020H,0820H,0620H,01FEH
   DW   0220H,0420H,0820H,1020H,2020H,6030H,2020H,0000H   ;"大"
   DW   0000H,0000H,0FF0H,0490H,0490H,0490H,3FFEH,4490H
   DW   4490H,4490H,4490H,47F8H,4010H,7000H,0000H,0000H   ;"电"
   DW   0000H,0000H,0000H,0000H,0C484H,0A2FEH,9280H,8C00H
   DW   0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H   ;"1\2\"
CH_TABLE2      
   DW   0000H,2000H,7F7CH,2044H,1FC4H,1144H,117CH,0220H
   DW   7F10H,22AEH,2248H,22A8H,7E9CH,0108H,0100H,0000H   ;"路"
   DW   0000H,4000H,3000H,0FF8H,0128H,4124H,23E6H,1804H
   DW   07F8H,0048H,0048H,0044H,7FC6H,0064H,0040H,0000H   ;"所"
   DW   0000H,0060H,3E5CH,0250H,0250H,7FFEH,0250H,2250H
   DW   3E50H,0000H,07F8H,2000H,4000H,3FFEH,0000H,0000H   ;"制"
   DW   0000H,0000H,0000H,3000H,2844H,2492H,0FE92H,206CH
   DW   0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H   ;"3\4\"
CH_TABLE3   
   DW   0000H,0000H,0000H,7C00H,924EH,928AH,928AH,6072H
   DW   0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H   ;"5\6\"
CH_TABLE4   
   DW   0000H,0000H,0000H,0000H,6C02H,92F2H,920EH,6C02H
   DW   0000H,0000H,0000H,4040H,8080H,0000H,0000H,0000H   ;"7\8\"
D_TABLE
   DB   00H,00H,3EH,7FH,41H,7FH,3EH,00H                   ;"0"
   DB   00H,00H,42H,7FH,7FH,40H,00H,00H                   ;"1"
   DB   00H,00H,62H,73H,59H,4FH,46H,00H                   ;"2" 
   DB   00H,00H,22H,6BH,49H,7FH,36H,00H                   ;"3" 
   DB   00H,18H,1CH,16H,7FH,7FH,10H,00H                   ;"4" 
   DB   00H,00H,27H,67H,45H,75H,39H,00H                   ;"5"
   DB   00H,3EH,7FH,49H,49H,79H,30H,00H                   ;"6"
   DB   00H,00H,01H,79H,7FH,07H,01H,00H                   ;"7"
   DB   00H,00H,36H,7FH,49H,7FH,36H,00H                   ;"8"
   DB   00H,00H,06H,4FH,49H,7FH,3EH,00H                   ;"9"
   DB   01H,07H,39H,40H,39H,07H,01H,00H                   ;"V"(0AH)
   DB   00H,00H,00H,60H,60H,00H,00H,00H                   ;"."(0BH)
   DB   03H,03H,3CH,42H,81H,81H,81H,42H                   ;"℃"(0CH)
   DB   00H,00H,00H,00H,00H,00H,00H,00H                   ;"NULL"(0DH)
   DB   40H,7EH,02H,7EH,02H,7EH,40H,00H                   ;"m"(0EH)
   DB   80H,0E0H,9EH,11H,9EH,0E0H,80H,00H                 ;"A"(0FH)
   
   
END         

⌨️ 快捷键说明

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