📄 spm-02.asm
字号:
;+==========================================================================================+;
;| |;
;| Sound Pressure Meter - 02 (SPM-02) |;
;| |;
;| Date : Since 2008/02/28 |;
;| Author : Yuta Tanemura |;
;| Filename : SPM-02.asm |;
;| File Ver. : Ver_1.00 |;
;| Device : PIC16F877A |;
;| |;
;+==========================================================================================+;
; Part Table Number : AK-0000
; Electric Circuit Diagram Number : A3-0000
; Circuit Wiring Diagram Number : A3-0000
; STDH_LIMIT (H'02 50' < STDH < H'03 50')
; STDL_LIMIT (H'01 00' < STDL < H'01 40')
; FINH_LIMIT (STDH - H'96' < FINH < STDH - H'96')
; FINL_LIMIT (STDL - H'18' < FINL < STDL - H'18')
; It changes with the [Specification of Limit] in the limit.
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
LIST P=PIC16F877
INCLUDE "P16F877.INC"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF
ERRORLEVEL -302 ;Suppress bank warning
;-----------------------------------------------------------
; OSC : 20MHz
;-----------------------------------------------------------
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Label Definition
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CBLOCK H'20'
;Temporary Register
W_TEMP
STATUS_TEMP
;Send Temporary Register
SEND_TEMP
;Wait Count Register
WAIT_CNT0
WAIT_CNT1
WAIT_CNT2
;Status Register
MODE_STATUS ;(x/x/x/x/x/FIN/MEA/STD)
JUDG_STATUS ;(x/x/x/x/x/x/x/1[NG] or 0[OK])
LABEL_STATUS ;(x/x/FINL/FINH/MEAL/MEAH/STDL/STDH)
;Number Character Register
NUM_CHAR_010
NUM_CHAR_001
;Hexadecimal Temporary Register
HEX_TEMP
;Conversion Temporary Register
CONV_TEMP
;Conversion Data register
CONV_DATA_HB
CONV_DATA_LB
;Calcuation Temporary Register
CAL_TEMP1_HB
CAL_TEMP1_LB
;A/D Conversion Data Register
AD_DATA1_HB
AD_DATA1_LB
AD_DATA2_HB
AD_DATA2_LB
AD_DATA3_HB
AD_DATA3_LB
AD_DATA4_HB
AD_DATA4_LB
AD_DATA5_HB
AD_DATA5_LB
AD_DATA6_HB
AD_DATA6_LB
AD_DATA7_HB
AD_DATA7_LB
AD_DATA8_HB
AD_DATA8_LB
;Sort Temporary Register
SORT_TEMP
;Sort Count Register
SORT_COUNT
;Sort Data Register
SORT_DATA1_HB
SORT_DATA1_LB
SORT_DATA2_HB
SORT_DATA2_LB
SORT_DATA3_HB
SORT_DATA3_LB
SORT_DATA4_HB
SORT_DATA4_LB
SORT_DATA5_HB
SORT_DATA5_LB
SORT_DATA6_HB
SORT_DATA6_LB
SORT_DATA7_HB
SORT_DATA7_LB
SORT_DATA8_HB
SORT_DATA8_LB
;Standard High-Level Register
STDH_DATA_HB
STDH_DATA_LB
;Standard Low-Level Register
STDL_DATA_HB
STDL_DATA_LB
;Measurement High-Level Register
MEAH_DATA_HB
MEAH_DATA_LB
;Measurement Low-Level Register
MEAL_DATA_HB
MEAL_DATA_LB
;Finish Measurement High-Level Register
FINH_DATA_HB
FINH_DATA_LB
;Finish Measurement Low-Level Register
FINL_DATA_HB
FINL_DATA_LB
;STDH_LIMIT Register
STDH_LLMT_HB
STDH_LLMT_LB
STDH_ULMT_HB
STDH_ULMT_LB
;STDL_LIMIT Register
STDL_LLMT_HB
STDL_LLMT_LB
STDL_ULMT_HB
STDL_ULMT_LB
;FINH_LIMIT Register
FINH_LMT
;FINL_LIMIT Register
FINL_LMT
;FINL_LIMIT High-Level Register
FINH_LLMT_LB
FINH_LLMT_HB
FINH_ULMT_LB
FINH_ULMT_HB
;FINL_LIMIT Low-Level Register
FINL_LLMT_LB
FINL_LLMT_HB
FINL_ULMT_LB
FINL_ULMT_HB
ENDC
;MODE_STATUS"MODE_STATUS" (x/x/x/x/x/FIN/MEA/STD)
STD EQU H'01' ;B'0000 0001'
MEA EQU H'02' ;B'0000 0010'
FIN EQU H'04' ;B'0000 0100'
;"LABEL_STATUS" (x/x/FINL/FINH/MEAL/MEAH/STDL/STDH)
STDH EQU H'01' ;B'0000 0001'
STDL EQU H'02' ;B'0000 0010'
MEAH EQU H'04' ;B'0000 0100'
MEAL EQU H'08' ;B'0000 1000'
FINH EQU H'10' ;B'0001 0000'
FINL EQU H'20' ;B'0010 0000'
;Port Designation
RC0 EQU H'00' ;RC0 Port Designation
RC1 EQU H'01' ;RC1 Port Designation
RC2 EQU H'02' ;RC2 Port Designation
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Program Start
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ORG 0x00 ;Reset Vector
GOTO INIT ;Initial Process
ORG 0x04 ;Interrupt Vector
CALL INT ;Interruption Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Initial Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INIT
;*************** Port Initialization ***************
BSF STATUS,RP0 ;Change to Bank1
MOVLW H'03' ;B'0000 0011' = D'3'
MOVWF TRISA ;"Wreg" --> "TRISA"
;Set RA0 & RA1 to Input mode, RA2 <==> RA7 to Output mode
MOVLW H'00' ;B'0000 0000' = D'0'
MOVWF TRISB ;"Wreg" --> "TRISB"
;Set PB0 <==> RB7 to Output mode
MOVLW H'81' ;B'1000 0001' = D'129'
MOVWF TRISC ;"Wreg" --> "TRISC"
;Set RC0 & RC7 to Input mode, Other to Output mode
MOVLW H'00' ;B'0000 0000' = D'0'
MOVWF TRISD ;"Wreg" --> "TRISD"
;Set PORTD to Output mode
MOVLW H'00' ;B'0000 0000' = D'0'
MOVWF TRISE ;"Wreg" --> "TRISE"
;Set PORTE to Output mode
MOVLW H'24' ;B'0010 0100' = D'36' (TXEN = 1, BRGH = 1)
MOVWF TXSTA ;"Wreg" --> "TXSTA"
MOVLW H'81' ;B'1000 0001' = D'129' (9600bps)
MOVWF SPBRG ;"Wreg" --> "SPBRG"
BCF STATUS,RP0 ;Change to Bank0
MOVLW H'90' ;B'1001 0000' = D'144' (SPEN = 1, CREN = 1)
MOVWF RCSTA ;"Wreg" --> "RCSTA"
;*************** A/D Converter Initialization ***************
MOVLW H'81' ;B'1000 0001' = D'129' (ADCS = 10, CHS = AN0 ADON = ON)
MOVWF ADCON0 ;"Wreg" --> "ADCON0"
MOVLW H'89' ;B'1000 1001' = D'137' (ADCS = 10, CHS = AN1 ADON = ON)
MOVWF ADCON0 ;"Wreg" --> "ADCON0"
BSF STATUS,RP0 ;Change to Bank1
MOVLW H'84' ;B'1000 0100' = D'132' (ADFM = 1, PCFG = 0100)
MOVWF ADCON1 ;"Wreg" --> "ADCON1"
;(RA0 & RA1 & RA3 are Analog Input,
; Another is Digital I/O mode)
BCF STATUS,RP0 ;Change to Bank0
GOTO START
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Interruption Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INT
MOVWF W_TEMP ;"Wreg" --> "W_TEMP"
MOVF STATUS,W ;"STATUS" --> "Wreg"
MOVWF STATUS_TEMP ;"Wreg" --> "STATUS_TEMP"
MOVF STATUS_TEMP,W ;"STATUS_TEMP" --> "Wreg"
MOVWF STATUS ;"Wreg" --> "STATUS"
SWAPF W_TEMP,F ;"W_TEMP" B'xxxx yyyy' --> "W_TEMP" B'yyyy xxxx'
SWAPF W_TEMP,W ;"W_TEMP" B'xxxx yyyy' --> "Wreg" B'yyyy xxxx'
RETFIE
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Main Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
START
;*************** Initial Value Setting ***************
CLRF PORTB ;RB0 <==> RB7 default to Low
CLRF PORTC ;RC0 <==> RC7 default to Low
CLRF PORTD ;RD0 <==> RD7 default to Low
;Clear of Temporary Register
CLRF W_TEMP
CLRF STATUS_TEMP
;Clear of Send Temporary Register
CLRF SEND_TEMP
;Clear of Wait Count Register
CLRF WAIT_CNT0
CLRF WAIT_CNT1
CLRF WAIT_CNT2
;Clear of Status Register
CLRF MODE_STATUS
CLRF JUDG_STATUS
CLRF LABEL_STATUS
;Clear of Number Character Register
CLRF NUM_CHAR_010
CLRF NUM_CHAR_001
;Clear of Hexadecimal Temporary Register
CLRF HEX_TEMP
;Clear of Conversion Temporary Register
CLRF CONV_TEMP
;Clear of Conversion Data register
CLRF CONV_DATA_HB
CLRF CONV_DATA_LB
;Clear of Calcuation Temporary Register
CLRF CAL_TEMP1_HB
CLRF CAL_TEMP1_LB
;Clear of A/D Conversion Data Register
CLRF AD_DATA1_HB
CLRF AD_DATA1_LB
CLRF AD_DATA2_HB
CLRF AD_DATA2_LB
CLRF AD_DATA3_HB
CLRF AD_DATA3_LB
CLRF AD_DATA4_HB
CLRF AD_DATA4_LB
CLRF AD_DATA5_HB
CLRF AD_DATA5_LB
CLRF AD_DATA6_HB
CLRF AD_DATA6_LB
CLRF AD_DATA7_HB
CLRF AD_DATA7_LB
CLRF AD_DATA8_HB
CLRF AD_DATA8_LB
;Clear of Sort Temporary Register
CLRF SORT_TEMP
;Clear of Sort Count Register
CLRF SORT_COUNT
;Clear of Sort Data Register
CLRF SORT_DATA1_HB
CLRF SORT_DATA1_LB
CLRF SORT_DATA2_HB
CLRF SORT_DATA2_LB
CLRF SORT_DATA3_HB
CLRF SORT_DATA3_LB
CLRF SORT_DATA4_HB
CLRF SORT_DATA4_LB
CLRF SORT_DATA5_HB
CLRF SORT_DATA5_LB
CLRF SORT_DATA6_HB
CLRF SORT_DATA6_LB
CLRF SORT_DATA7_HB
CLRF SORT_DATA7_LB
CLRF SORT_DATA8_HB
CLRF SORT_DATA8_LB
;Clear of Standard High-Level Register
CLRF STDH_DATA_HB
CLRF STDH_DATA_LB
;Clear of Standard Low-Level Register
CLRF STDL_DATA_HB
CLRF STDL_DATA_LB
;Clear of Measurement High-Level Register
CLRF MEAH_DATA_HB
CLRF MEAH_DATA_LB
;Clear of Measurement Low-Level Register
CLRF MEAL_DATA_HB
CLRF MEAL_DATA_LB
;Clear of Finish Measurement High-Level Register
CLRF FINH_DATA_HB
CLRF FINH_DATA_LB
;Clear of Finish Measurement Low-Level Register
CLRF FINL_DATA_HB
CLRF FINL_DATA_LB
;Clear of FINL_LIMIT High-Level Register
CLRF FINH_LLMT_LB
CLRF FINH_LLMT_HB
CLRF FINH_ULMT_LB
CLRF FINH_ULMT_HB
;Clear of FINL_LIMIT Low-Level Register
CLRF FINL_LLMT_LB
CLRF FINL_LLMT_HB
CLRF FINL_ULMT_LB
CLRF FINL_ULMT_HB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -