;
;          trbspi_mb1.txt
;
;     UPGM
;    KOTUINO (PGX051)
; /master board/
;
;----------------------------------------------
;
; bus_dtr  equ 2 ;  / 
        ;  reset      +5 
        ;       0
        ;       
				;     
; bus_clc  equ 3 ;    
        ;  reset/cold init      +5 
        ;    ()  ()
        ;   0
; bus_qt   equ 4 ;  
        ;  reset/cold init      +5 
        ;   0
        ;   ,   
;
;----------------------------------------------
;
;  
;
; .equ bits_ct = 8 ;   cntbit_t
; .define cntbit_t (rbt0+2) ; r2 rb0  
; .define cnt_tm (rbt0+3) ; r3 rb0   
; .define data_t (rbt0+7) ; r7 rb0   


; data_key: .dbit 1 ;   /
           ; data_key=0 -   
           ; data_key=1 -   
           
;
;----------------------------------------------
;
;   data_key   
;        
; data_t (r7)
;      data_key
;(data_key=0 -   
; data_key=1 -   )
;     0
;
;
 pspi_txd:
       push cntbit_t
       push cnt_tm ;      
     orl P1,#(1<<bus_dtr || 1<<bus_clc || 1<<bus_qt) ;  
      ;   at89s52    
      ; bus_dtr=bus_clc=bus_qt=
 tx_on:
    mov r2,#bits_ct ; mov cntbit_t,#bits_ct
    mov c,data_key
    acall strob ;    
 data_tx:
    xch a,r7
    rrc a ;   
    xch a,r7
    acall strob ;   
     djnz cntbit_t,data_tx
 tx_off:
  setb P1.bus_dtr ;   bus_dtr
  ;   at89s52    
	;  bus_dtr=bus_clcbus_qt=
  ;  bus_dtr=bus_clcbus_qt=1
   pop cnt_tm
   pop cntbit_t
  ret
;----------------------------------------------------------
 strob:
    mov P1.bus_dtr,c ;   data_key  bus_dtr
     acall time ;   
    clr P1.bus_clc ;   
    acall time ;   
 tx_tp0:
     mov a,P1 ;    1  
     jb ACC.bus_qt,tx_tp0 ;    (bus_qt=0)
      setb P1.bus_clc ;   
      acall time ;   
 tx_tp1:
     mov a,P1 ;    1  
     jnb ACC.bus_qt,tx_tp1 ;    (bus_qt=1)
     acall time ;   
   ret
;----------------------------------------------------------
 time:
   mov r3,#10 ;  ~40uS  = 0,00004*5= ~0,0002 /
 ttime:
   nop ;
   nop
   djnz r3,ttime ; cnt_tm = R3
   ret
;----------------------------------------------------------
;

;
;----------------------------------------------
;
;             
;
;        
;    ,    
;        
; 
; ..    
;
;
 pspi_rxd:
       push cntbit_t
       push cnt_tm ;      
     mov r2,#bits_ct ;    cntbit_t =r2
    orl P1,#(1<<bus_dtr || 1<<bus_clc || 1<<bus_qt) ;  
      ;   at89s52    
      ; /bus_dtr=bus_clc=, bus_qt=/
      ; bus_dtr=bus_clc=bus_qt=
      ; bus_dtr=bus_clc=bus_qt=1
 rx_on:
     acall strobinp
      mov a,r7
      rlc a
      mov data_key,c
 data_rx:
     acall strobinp
      djnz r2,data_rx
     pop cnt_tm
     pop cntbit_t ;
    ret
;-------------------------------------------------------------
 strobinp:
     mov a,P1
      jb ACC.bus_clc,strobinp ;   
 rx_tp0:
     acall time ;   
     mov a,P1
     mov c,ACC.bus_dtr
     xch a,r7 ; mov a,data_t
     rrc a
     xch a,r7
      clr P1.bus_qt ;   
      acall time ;   
 rx_tp1:
     mov a,P1
     jnb ACC.bus_clc,rx_tp1 ;   
      setb P1.bus_qt ;   
       acall time ;   
    ret
;-------------------------------------------------------------
;  
;  data_key      (0  1)
;  R7 (data_t)       
;----------------------------------------------