sdq通信(one-wire单线通信)发送汇编代码

;----------------designe by luoqice 24-0305---------------
;SDQ send and recv control
;---------------------------------------------------------

delay_n_us:
	movwf	R_Delay3
delay_n_us_loop:
	decfsz	R_Delay3,1
	goto	delay_n_us_loop
	return

return

set_sdq_input:
    ;movlw   00100010B
	;bsf   PT3PU,1
    bcf   PT3EN,1
return

set_sdq_output:
	bsf   PT3EN,1 
return
;----------------------------------------------------------	
sdq_send_n_byte:  ;send 4byte 0x74,0x00 0x01,0xfd
    btfss	   CCB_current_mode,B_sinkB_get_power_ok
    return
    ;---------------wait sdq_send_delay ms to send-------------------
    ;call set_sdq_input
    decfsz  sdq_send_delay,1 ;delay n ms
	return
    ;-----------send  count-----------
    movlw  0H
    subwf  sdq_send_cnt,0 
    btfsc   status,z
    return
    decf	sdq_send_cnt,1
    ;-------------start flg-----------
    call set_sdq_output
    send_start:
    bcf  pt3,1
    movlw	14 ;delay 14us  value
    call delay_n_us
    bsf  pt3,1
    movlw	2 ;delay 5us  value
    call delay_n_us
    ;-------------------------------
    movlf 74H,sdq_date
    call sdq_send_one_byte
    ;-----------add delay-----------
    bsf  pt3,1
    movlw	9 ;delay 15us  value
    call delay_n_us
    ;--------------------------
    movlf 00H,sdq_date
    call sdq_send_one_byte
    ;-----------add delay-----------
    bsf  pt3,1
    movlw	9 ;delay 15us  value
    call delay_n_us
    ;--------------------------
    movlf 01H,sdq_date
    call sdq_send_one_byte
    ;-----------add delay-----------
    bsf  pt3,1
    movlw	9 ;delay 15us  value
    call delay_n_us
    ;--------------------------
    movlf fdH,sdq_date
    call sdq_send_one_byte
    ;-----------send end flg-----------
    bsf  pt3,1 
    movlw	12 ;delay 20us  value
    call delay_n_us
    ;---------------------
    bcf  pt3,1 ;set low,send break 14us
    movlw	14 ;delay 13us  value
    call delay_n_us
    bsf  pt3,1 ;set low,send break 14us
    ;---------reset delay cnt---------
    call set_sdq_input
    movlf 70,sdq_send_delay
    ;----------------------
    call  sdq_recv_one_byte
return

sdq_send_one_byte:
    call set_sdq_output
    movlf 8,sdq_bit_cnt

    send_data_loop:
    btfss  sdq_date,0
    goto   send_7us_low_3us_high
    goto   send_1_5us_low_8_3us_high
    ;-------------send logic 0-------------------
    send_7us_low_3us_high: 
    nop
    bcf  pt3,1 
    movlw	6 ;delay 8.3us  value
    call delay_n_us
    bsf  pt3,1 	
    nop;delay 3us
    ;nop
    RRF     sdq_date,1
    goto dec_fun
    ;-------------send logic 1-------------------
    send_1_5us_low_8_3us_high:   
    bcf  pt3,1 
    nop
    nop
    nop
    nop
    bsf  pt3,1 
    movlw	6 ;delay 8.3us  value
    call delay_n_us
    RRF     sdq_date,1
    ;-----------------------------
    dec_fun:
   	decfsz	sdq_bit_cnt,1
	goto    send_data_loop
    ;bsf GLOBLE_STA_FLG1,B6_read_sdq_flg
    ;call set_sdq_input
return

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值