device sx28l,stackx_optionx device oscxt5,turbo freq 50000000 reset reset_entry org 10h dato ds 1 CLK equ rb.6 D0 equ rb.7 CS equ rb.5 ;**************************************************************************************************************** ;**************************************************************************************************************** salidapuerto jmp @salida_puerto ret conversion jmp @conver_sion ret sacodato jmp @saco_dato ret pausa jmp @pau_sa ret ;**************************************************************************************************************** org 50h reset_entry mov rc,#%00000000 ;init rc mov !rc,#%00000000 mov rb,#%00100000 ;init rb mov !rb,#%10000010 mov w,#0ドルE ; mov M,w ; mov !rb,#%011111111 ; mov w,#0ドルF ; mov M,w ; clrb CLK setb CS ;**************************************************************************************************************** ; MAIN ;**************************************************************************************************************** ; principal call @conversion mov rc,dato call @salidapuerto jmp principal ;****************************************************************************************************************** org 400 ;**************************************************************************************************************** ; SUBRUTINAS ;**************************************************************************************************************** salida_puerto clrb rb.0 ; WAIT line nopasa snb rb.1 ; Data Strobe line jmp nopasa ; nop setb rb.0 yafue sb rb.1 ; finish the handshaking when the rb.1 is high jmp yafue retp ;**************************************************************************************************************** conver_sion ; devuelve el valor leido del conversor en la variable DATO. mov dato,#0 clrb CLK clrb CS call @pausa setb CLK call @pausa clrb CLK call @pausa setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa ; call @sacodato ; setb CLK call @pausa clrb CLK call @pausa setb CS retp ;**************************************************************************************************************** saco_dato snb D0 ; comparo el D0 para ver si era alto jmp @cenalto jmp @cenbajo cenalto setb 03ドル.0 rl dato ; retp cenbajo clrb 03ドル.0 rl dato ; retp ;**************************************************************************************************************** pau_sa ; 0.25 uSeg minimo total 13 ciclos de reloj a 50 Mhz nop nop nop nop nop retp ;****************************************************************************************************************
.