📄 read_sen.asm
字号:
; File name : Read_Sen.asm
; Function : Read pressure senser and store the data
; Variable : up_val, left_val, L1_val, R1_val,
; down_val, right_val, L2_val, R2_val
; O_val, X_val, tri_val, square_val
; (All in page 0 RAM)
; Constant : #define sen_group1 -> PORT X output
; #define sen_group2 -> PORT X output
; #define sen_group3 -> PORT X output
; Setting: A/D
;
;==============================================================
read_sen:
bsf STATUS,RP0
movlw adc_ana_in
movwf adcon1
bcf STATUS,RP0
bsf ADCON0,ADON ;turn on ADC, start sampling
;First Group analogy key (UP LEFT L1 R1 )-------------------
bsf sen_group1 ;Set "H"
bcf sen_group2 ;Set "L"
bcf sen_group3 ;Set "L"
call read_chn_delay
;A/D channel 4
bcf ADCON0,CHS0 ;Channel 4 (RA0) "100"
bcf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf up_val ;result -> up_val
;A/D channel 5
bsf ADCON0,CHS0 ;Channel 5 (RA0) "101"
bcf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf left_val ;result -> left_val
;A/D channel 6
bcf ADCON0,CHS0 ;Channel 6 (RA0) "110"
bsf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf L1_val ;result -> L1_val
;A/D channel 7
bsf ADCON0,CHS0 ;Channel 7 (RA0) "111"
bsf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf R1_val ;result -> R1_val
;Second Group analogy key (DOWN RIGHT L2 R2 )-----------------------
bcf sen_group1 ;Set "L"
bsf sen_group2 ;Set "H"
bcf sen_group3 ;Set "L"
call read_chn_delay
;A/D channel 4
bcf ADCON0,CHS0 ;Channel 4 (RA0) "100"
bcf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf down_val ;result -> down_val
;A/D channel 5
bsf ADCON0,CHS0 ;Channel 5 (RA0) "101"
bcf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf right_val ;result -> right_val
;A/D channel 6
bcf ADCON0,CHS0 ;Channel 6 (RA0) "110"
bsf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf L2_val ;result -> L2_val
;A/D channel 7
bsf ADCON0,CHS0 ;Channel 7 (RA0) "111"
bsf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf R2_val ;result -> R2_val
;Thrid Group analogy key (O X TRI SQUARE)-----------------------
bcf sen_group2 ;Set "L"
bsf sen_group3 ;Set "L"
bcf sen_group1 ;Set "H"
call read_chn_delay
;A/D channel 4
bcf ADCON0,CHS0 ;Channel 4 (RA0) "100"
bcf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf O_val ;result -> O_val
;A/D channel 5
bsf ADCON0,CHS0 ;Channel 5 (RA0) "101"
bcf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf X_val ;result -> X_val
;A/D channel 6
bcf ADCON0,CHS0 ;Channel 6 (RA0) "110"
bsf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf tri_val ;result -> tri_val
;A/D channel 7
bsf ADCON0,CHS0 ;Channel 7 (RA0) "111"
bsf ADCON0,CHS1 ;
bsf ADCON0,CHS2
call read_chn ;A/D conversion
movwf square_val ;result -> square_val
;Reset port-----------------------------------------------
bsf STATUS,RP0
movlw adc_dig_in
movwf adcon1
bcf STATUS,RP0
bcf ADCON0,ADON ;turn off ADC
bcf sen_group3
bcf sen_group2
bcf sen_group1
;Exit
return
;------------------------------------------------------------
; Name : read_chn
; Parm : nil
; Retn : W: A/D convertor value
; Desc : read A/D convertor of current analogue channel.
;------------------------------------------------------------
read_chn:
call read_chn_delay
bsf ADCON0,GO ; start A/D conversion
rdch_conv: ; wait for A/D complete
; bsf PCLATH,3
; call p_timer
; bcf PCLATH,3
btfsc ADCON0,GO
goto rdch_conv
btfsc f_siointr
goto read_chn
movf ADRES,W ; return result
return
;-------------------------
; read_chn_delay:
;-------------------------
read_chn_delay:
bcf f_siointr
movlw 0x20
movwf delay0
rdch_dly: ; sample and hold delay
; bsf PCLATH,3
; call p_timer
; bcf PCLATH,3
btfsc f_siointr
goto read_chn_delay
decfsz delay0,F
goto rdch_dly
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -