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

📄 28sf040a.asm

📁 C51源程序集合 包括以下目录源码 ├─AD-MSP430f149D ├─ADC8535 ├─bin ├─c51源程序 ├─c51源程序锦集 ├─ct2Timer ├─
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;------------------------------
;通过串口发送一个存储在外部RAM的定长字符串
;入口:    [DPTR,R7,XRAM_BLOCK_BIT]
;出口:    [C=1 500ms发送超时,C=0 正确]
;使用:    [ACC,DPTR,C]
;------------------------------
COM_SEND_STRING:
    LCALL    HD_SELECT_XRAM
    LCALL    HD_XRAM_PAGE_SEL
CSS_1:        
    MOVX    A,@DPTR
    LCALL    COM_SEND_BYTE
    JNC    CSS_3
    RET
CSS_3:    
    INC    DPTR
    DJNZ    R7,CSS_1
    CLR    C
    RET    

;------------------------------
;通过串口限时接收一个字节
;入口:    [无]
;出口:    [Acc, C=1 500ms接收超时,C=0 正确]
;使用:    [ACC,DPH,DPL,SBUF,C,RI]
;------------------------------
COM_RECV_BYTE:
    PUSH    DPH
    PUSH    DPL
CRB_03:
    MOV    DPH,#250
CRB_06:
    MOV    DPL,#250    ;2US
CRB_09:
    NOP            ;1
    NOP            ;1
    NOP            ;1
    NOP            ;1
    JBC    RI,CRB_15    ;2US
    DJNZ    DPL,CRB_09    ;2US
    DJNZ    DPH,CRB_06    ;2US
CRB_12:
    SETB    C        ;TIMEOUT=(8*250+4)*250 us=500ms
    LJMP    CRB_18
CRB_15:
    MOV    A,SBUF
    PUSH    ACC
    MOV    A,#4
    LCALL    HD_FLUSH_A_LED
    POP    ACC
    CLR    C        
CRB_18:
    POP    DPL
    POP    DPH
    RET

;------------------------------
;通过串口限时发送一个字节
;入口:    [Acc]
;出口:    [C=1 500ms发送超时,C=0 正确]
;使用:    [ACC,DPH,DPL,SBUF,C,TI]
;------------------------------
COM_SEND_BYTE:
    PUSH    DPH
    PUSH    DPL
    CLR    TI
    MOV    SBUF,A
    PUSH    ACC
    MOV    A,#5
    LCALL    HD_FLUSH_A_LED
    POP    ACC
CSB_03:
    MOV    DPH,#250
CSB_06:
    MOV    DPL,#250    ;2US
CSB_09:
    NOP            ;1
    NOP            ;1
    NOP            ;1
    NOP            ;1
    JBC    TI,CSB_15    ;2US
    DJNZ    DPL,CSB_09    ;2US
    DJNZ    DPH,CSB_06    ;2US
CSB_12:
    SETB    C        ;TIMEOUT=(8*250+4)*250 us=500ms
    LJMP    CSB_18
CSB_15:
    CLR    C        
CSB_18:
    POP    DPL
    POP    DPH
    RET

;--------------------------------------------
;入口:[无]
;出口:[无]
;使用:[Acc,TR1,TH1,TL1,TMOD,PCON,SCON]
;串口初始化程序: 9600,8,1,n(f=11.0592MHz)
;--------------------------------------------
COM_INIT_SET:
    PUSH    ACC
    CLR    TR1
    MOV    A,TMOD
    ANL    A,#0FH
    ORL    A,#20H
    MOV    TMOD,A            
    MOV    TH1,#0FDH        
    MOV    TL1,#0FDH            
    MOV    PCON,#00H
    MOV    SCON,#50H            
    CLR    RI
        CLR    TI
    SETB    TR1
    POP    ACC
    RET    

   


;==========================================================
;硬件操作模块
;--------------------------------
;延时100us
;--------------------------------
PUB_DELAY_100us:
    PUSH   ACC            
    CLR    A
PD100_0:
    INC    A
    CJNE   A,#27,PD100_0
    POP    ACC
    NOP
    NOP
    RET

;------------------------------------------------------------------------------
;入口    [无]
;出口    [无]
;使用    [A]
;------------------------------------------------------------------------------
    
PUB_DELAY_1ms:
    PUSH   ACC            
    CLR    A
PD1_0:
    INC    A
    NOP
    CJNE   A,#228,PD1_0
    POP    ACC
    RET    

;------------------------------------------------------------------------------
;入口    [A]
;出口    [无]
;使用    [A]
;------------------------------------------------------------------------------
    
PUB_DELAY_100ms:
    PUSH    ACC
    MOV    A,#100
PD250:    
    LCALL    PUB_DELAY_1ms
    DEC    A
    JNZ    PD250
    POP    ACC
    RET
            
;-------------------------------
;测试如果是出错应答则红灯闪烁三次
;-------------------------------
PUB_JUDGE_GIVE_RED:
    CJNE    A,#OPERATE_SUCCESS,JGR_0
    RET
JGR_0:
    LCALL    PUB_FLUSH_RED_TRHEE
    RET    
    
;-------------------------------
;开机时灯的测试
;灯全部关闭,依次点亮,依次关闭
;-------------------------------
HD_LED_TEST_START:
            LCALL    HD_LED_ALL_OFF
    LCALL    PUB_DELAY_100ms

    SETB    LED_GRE_PIN        
    LCALL    PUB_DELAY_100ms
    SETB    LED_YEL_PIN
    LCALL    PUB_DELAY_100ms
    SETB    LED_RED_PIN
    LCALL    PUB_DELAY_100ms
    SETB    LED_IC1_PIN
    LCALL    PUB_DELAY_100ms
    SETB    LED_IC2_PIN
    LCALL    PUB_DELAY_100ms

    CLR    LED_GRE_PIN        
    LCALL    PUB_DELAY_100ms
    CLR    LED_YEL_PIN
    LCALL    PUB_DELAY_100ms
    CLR    LED_RED_PIN
    LCALL    PUB_DELAY_100ms
    CLR    LED_IC1_PIN
    LCALL    PUB_DELAY_100ms
    CLR    LED_IC2_PIN
    RET

;-------------------------------
;红灯闪烁三次
;入口:[无]
;出口:[无]
;使用:[Acc,PUB_DELAY_100ms]
;-------------------------------
PUB_FLUSH_RED_TRHEE:
    SETB    LED_RED_PIN
    LCALL    PUB_DELAY_100ms
    CLR    LED_RED_PIN
    LCALL    PUB_DELAY_100ms

    SETB    LED_RED_PIN
    LCALL    PUB_DELAY_100ms
    CLR    LED_RED_PIN
    LCALL    PUB_DELAY_100ms

    SETB    LED_RED_PIN
    LCALL    PUB_DELAY_100ms
    CLR    LED_RED_PIN
    RET
        
;-------------------------------
;闪烁一个指定的灯
;入口:[Acc=1,2,3,4,5表示绿/黄/红/IC1/IC2灯]
;出口:[无]
;使用:[Acc,PUB_DELAY_100us]
;-------------------------------
HD_FLUSH_A_LED:
    CJNE    A,#1,HFAL_2
    SETB    LED_GRE_PIN
    LCALL    PUB_DELAY_100us
    LCALL    PUB_DELAY_100us
    CLR    LED_GRE_PIN
    RET
HFAL_2:    
    CJNE    A,#2,HFAL_3
    SETB    LED_YEL_PIN
    LCALL    PUB_DELAY_100us
    LCALL    PUB_DELAY_100us
    CLR    LED_YEL_PIN
            RET
HFAL_3:
    CJNE    A,#3,HFAL_4
        SETB    LED_RED_PIN
        LCALL    PUB_DELAY_100us
        LCALL    PUB_DELAY_100us
    CLR    LED_RED_PIN
        RET
HFAL_4:
    CJNE    A,#4,HFAL_5
        SETB    LED_IC1_PIN
        LCALL    PUB_DELAY_100us
        LCALL    PUB_DELAY_100us
        CLR    LED_IC1_PIN
        RET
HFAL_5:
    CJNE    A,#5,HFAL_6
        SETB    LED_IC2_PIN
        LCALL    PUB_DELAY_100us
        LCALL    PUB_DELAY_100us
        CLR    LED_IC2_PIN
HFAL_6:        
    RET    

;-------------------------------
;点亮一个指定的灯
;入口:[Acc=1,2,3,4,5表示绿/黄/红/IC1/IC2灯]
;出口:[无]
;-------------------------------
HD_LIGHT_A_LED:
    CJNE    A,#1,HLAL_2
    SETB    LED_GRE_PIN
    MOV    A,P1_HIGH_3BIT
    SETB    ACC.6
    MOV    P1_HIGH_3BIT,A
    RET
HLAL_2:    
    CJNE    A,#2,HLAL_3
        SETB    LED_YEL_PIN
        MOV    A,P1_HIGH_3BIT
    SETB    ACC.5
    MOV    P1_HIGH_3BIT,A
        RET
HLAL_3:
    CJNE    A,#3,HLAL_4
        SETB    LED_RED_PIN
        RET
HLAL_4:
    CJNE    A,#4,HLAL_5
        SETB    LED_IC1_PIN
        RET
HLAL_5:
    CJNE    A,#5,HLAL_6
        SETB    LED_IC2_PIN
HLAL_6:        
    RET

;-------------------------------
;熄灭一个指定的灯
;入口:[Acc=1,2,3,4,5表示绿/黄/红/IC1/IC2灯]
;出口:[无]
;-------------------------------
HD_SHUT_A_LED:
    CJNE    A,#1,HSAL_2
    CLR    LED_GRE_PIN
    MOV    A,P1_HIGH_3BIT
    CLR    ACC.6
    MOV    P1_HIGH_3BIT,A
    RET
HSAL_2:    
    CJNE    A,#2,HSAL_3
        CLR    LED_YEL_PIN
        MOV    A,P1_HIGH_3BIT
    CLR    ACC.5
    MOV    P1_HIGH_3BIT,A
        RET
HSAL_3:
    CJNE    A,#3,HSAL_4
     CLR    LED_RED_PIN
    RET
HSAL_4:
    CJNE    A,#4,HSAL_5
        CLR    LED_IC1_PIN
        RET
HSAL_5:
    CJNE    A,#5,HSAL_6
        CLR    LED_IC2_PIN
HSAL_6:        
    RET

;-------------------------------
;所有灯都关闭
;入口:[无]
;出口:[无]
;-------------------------------
HD_LED_ALL_OFF:
        CLR    LED_GRE_PIN
        CLR    LED_YEL_PIN
        CLR    LED_RED_PIN
        CLR    LED_IC1_PIN
        CLR    LED_IC2_PIN
    RET

;-------------------------------
;所有灯都打开
;入口:[无]
;出口:[无]
;-------------------------------    
HD_LED_ALL_ON:
    SETB    LED_GRE_PIN
        SETB    LED_YEL_PIN
        SETB    LED_RED_PIN
        SETB    LED_IC1_PIN
        SETB    LED_IC2_PIN
    RET
    
;-------------------------------------
;对FLASH操作的逻辑地址加1
;输入:[LADD_H3BIT,LADD_8TF,LADD_0T7]
;输出:[LADD_H3BIT,LADD_8TF,LADD_0T7,LADD_OVERFLOW_BIT=1 OVERFLOW]
;使用:[ACC,C]
;-------------------------------------
F_INC_LADD:
    CLR    C
    MOV    A,#1
    ADDC    A,LADD_0T7
    MOV    LADD_0T7,A
    MOV    A,LADD_8TF
    ADDC    A,#0
    MOV    LADD_8TF,A
    MOV    A,LADD_H3BIT
    ADDC    A,#0
    SETB    LADD_OVERFLOW_BIT
    JBC    ACC.3,FIL_RESET_ADD
    CLR    LADD_OVERFLOW_BIT
FIL_RESET_ADD:
    MOV    LADD_H3BIT,A
    RET

;-------------------------------
;设置P1端口和DPTR的值
;输入:[FADD_PAGE,FADD_HIGH,FADD_LOW]
;输出:[P1_DATA,DPTR]
;使用:[ACC,B,P1_HIGH_3BIT]
;-------------------------------
F_GET_P1_DATA_AND_DPTR:
    MOV    A,FADD_PAGE
    ANL    A,#1FH
    MOV    FADD_PAGE,A
    MOV    A,P1_HIGH_3BIT
    ANL    A,#0E0H
    ORL    A,FADD_PAGE
    MOV    P1_DATA,A
    MOV    DPH,FADD_HIGH
    MOV    DPL,FADD_LOW
    RET

;-----------------------------------
;将FLASH的逻辑操作地址转换为芯片工作地址
;入口:[LADD_H3BIT,LADD_8TF,LADD_0T7]
;出口:[FADD_PAGE,FADD_HIGH,FADD_LOW]
;使用:[ACC,B]
;-----------------------------------
F_LADD_TO_FADD:
    MOV    FADD_LOW,LADD_0T7
    MOV    B,LADD_8TF
    MOV    A,LADD_H3BIT
    JBC    B.7,FLTF_2
    CLR    ACC.7
    LJMP    FLTF_3
FLTF_2:
    SETB    ACC.7
FLTF_3:
    JBC    B.6,FLTF_5
    CLR    ACC.6
    LJMP    FLTF_6
FLTF_5:
    SETB    ACC.6
FLTF_6:
    SETB    B.6
    MOV    FADD_HIGH,B
    RL    A
    RL    A
    MOV    FADD_PAGE,A
    RET

;-------------------------------
;操作P1口,进行外部RAM的块的选择
;入口:[XRAM_BLOCK_BIT=0/1(2块)]
;出口:[无]
;-------------------------------
HD_XRAM_PAGE_SEL:
    JB    XRAM_BLOCK_BIT,SEL_PAGE1
SEL_PAGE0:
    CLR    P1.4
    RET
SEL_PAGE1:
    SETB    P1.4
    RET

;-------------------------------
;使外部RAM的使能有效
;入口:[无]
;出口:[无]
;-------------------------------
HD_SELECT_XRAM:
    CLR    P2.6
    CLR    P2.7
    RET

;-------------------------------
;使外部ROM(flash)的使能有效
;入口:[无]
;出口:[无]
;-------------------------------
HD_SELECT_FLASH:
HD_SELECT_XROM:
    SETB    P2.6
    CLR    P2.7
    RET

⌨️ 快捷键说明

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