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

📄 main.asm

📁 Synchronous Serial Communications (SSC) is a synchronous serial communications protocol between
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; Read Capacitance; result in Result variable
; ( cmd: 1 / arg: 0 )

cmd01

        clrf    Result_L            ; clear Result variable
        clrf    Result_H
        clrf    Result_U

        movlw   D'8'
        movwf   Count

cmd01_00

        call    CAP_Read            ; read capacitance

        movfw   K2_L                ; average eight readings
        addwf   Result_L, F

        movfw   K2_H
        btfsc   STATUS, C           ;   if lower byte generated a carry
        incfsz  K2_H, W             ;       increment middle byte
        addwf   Result_H, F         ;       then add middle byte

        btfsc   STATUS, C           ;   if middle byte generated a carry
        incf    Result_U, F

        decfsz  Count, F            ; loop
         goto   cmd01_00

        bcf     STATUS, C           ; divide by 8
        rrf     Result_U, F
        rrf     Result_H, F
        rrf     Result_L, F

        bcf     STATUS, C
        rrf     Result_U, F
        rrf     Result_H, F
        rrf     Result_L, F

        bcf     STATUS, C
        rrf     Result_U, F
        rrf     Result_H, F
        rrf     Result_L, F

        movlw   CMD_01_ACK
        movwf   CmdStatus

        movfw   PORTA               ; clear any interrupt on change conditions
        bcf     INTCON, RABIF

        goto    End_ISR

;----------------------------------------
; Send Capacitance value
; ( cmd: 1 / arg: 0 )

cmd02

        movlw   .75                 ; take some time to turn the bus around
        movwf   DelayCounter
        decfsz  DelayCounter, F
         goto   $ - 1

        movfw   Result_H            ; send capacitance value
        call    SSC_SendByte

        movfw   Result_L
        call    SSC_SendByte

        movlw   CMD_02_ACK
        movwf   CmdStatus

        movfw   PORTA               ; clear any interrupt on change conditions
        bcf     INTCON, RABIF

        goto    End_ISR

;----------------------------------------
; Calculate Humidity from Capacitance
; ( cmd: 1 / arg: 0 )

cmd03

        movlw   .20                 ; take some time to turn the bus around
        movwf   DelayCounter
        decfsz  DelayCounter, F
         goto   $ - 1

        movlw   0x14                ; subtract 1300 (0x0514) from Result
        subwf   Result_L, F

        movlw   0x05
        btfss   STATUS, C           ;   ( a borrow occurred )
        movlw   0x06
        subwf   Result_H, F
        
        movfw   Result_H
        movwf   Humid_PwLI_IN + 1   ; (little-endian)

        movfw   Result_L
        movwf   Humid_PwLI_IN

        call    Humid_PwLI

        movfw   Humid_PwLI_OUT + 1  ; (little-endian)
        call    SSC_SendByte

        movfw   Humid_PwLI_OUT
        call    SSC_SendByte

        movlw   CMD_03_ACK
        movwf   CmdStatus

        movfw   PORTA               ; clear any interrupt on change conditions
        bcf     INTCON, RABIF

        goto    End_ISR

;----------------------------------------
; 
; ( cmd: 1 / arg: - )

cmd04



        movlw   CMD_04_ACK
        movwf   CmdStatus

        movfw   PORTA               ; clear any interrupt on change conditions
        bcf     INTCON, RABIF

        goto    End_ISR

;----------------------------------------
; 
; ( cmd: 1 / arg: - )

cmd05

        movlw   .75                 ; take some time to turn the bus around
        movwf   DelayCounter
        decfsz  DelayCounter, F
         goto   $ - 1





        movlw   CMD_05_ACK
        movwf   CmdStatus

        movfw   PORTA               ; clear any interrupt on change conditions
        bcf     INTCON, RABIF

        goto    End_ISR

;----------------------------------------
; 
; ( cmd: 1 / arg: - )

cmd06



        movlw   CMD_06_ACK
        movwf   CmdStatus

        movfw   PORTA               ; clear any interrupt on change conditions
        bcf     INTCON, RABIF

        goto    End_ISR

;----------------------------------------
; Return command status
; ( cmd: 1 / arg: - )

cmdGetStatus

        movlw   .75                 ; take some time to turn the bus around
        movwf   DelayCounter
        decfsz  DelayCounter, F
         goto   $ - 1

        movfw   CmdStatus           ; report that last status message
        call    SSC_SendByte

        movlw   CMD_UNSUCCESSFUL    ; clear status message
        movwf   CmdStatus

        movfw   PORTA               ; clear any interrupt on change conditions
        bcf     INTCON, RABIF

;        goto    End_ISR

;----------------------------------------
End_ISR

        movfw   PCLATH_TEMP         ; restore PCLATH_TEMP register
        movwf   PCLATH
        movfw   FSR_TEMP            ; restore FSR_TEMP register
        movwf   FSR
        swapf   STATUS_TEMP, W      ; swap status_temp into W, sets bank to original state
        movwf   STATUS              ; restore STATUS register
        swapf   W_TEMP, F
        swapf   W_TEMP, W           ; restore W register

        retfie

; end Interrupt Service Routine (ISR)

;----------------------------------------------------------------------

Program code

;----------------------------------------------------------------------
;----------------------------------------------------------------------
; Main Program
;----------------------------------------------------------------------
;----------------------------------------------------------------------

MAIN

;----------------------------------------
; Initialize PICmicro
;----------------------------------------

        call    init_f690

;----------------------------------------
; Initialize Modules
;----------------------------------------

        call    SSC_Init            ; initialize SSC routines
        call    CAP_Init            ; initializw Capacitance routines

;----------------------------------------
; Initialize Variables
;----------------------------------------

        banksel CmdStatus
        movlw   CMD_UNSUCCESSFUL
        movwf   CmdStatus


        bsf     INTCON, GIE         ; enable global interrupts


MAINLOOP

        sleep
        nop

        goto    MAINLOOP


;----------------------------------------------------------------------
; Data EEPROM Memory
;
; The PIC16F690 device has 256 bytes of data EEPROM with address
; range 0x00 to 0xFF.

        ; Initialize Data EEPROM Memory locations

;DEEPROM code
;        DE      0x00, 0x01, 0x02, 0x03


;----------------------------------------------------------------------
        end                         ; end of program directive
;----------------------------------------------------------------------

⌨️ 快捷键说明

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