📄 mpu.asm
字号:
;//set X coordinate and coordinate the decimal point.
led_dsp_hide: mov r0,#dspbuffx3
mov b,#4
led_adjust_x: cjne @r0,#0,led_adjust_ff
mov @r0,#0ffh
dec r0
djnz b,led_adjust_x
led_adjust_ff: mov r0,#dspbuffy3
mov b,#4
led_adjust_y: cjne @r0,#0,led_display
mov @r0,#0ffh
dec r0
djnz b,led_adjust_y
;//hide the zero ahead
led_display: mov r0,#dspbuffy0
mov r1,#dspbufflenth
mov dptr,#led_data
led_loop: mov a,@r0
movc a,@a+dptr
lcall ls164l
inc r0
djnz r1,led_loop
;//shift the data in display buffer into display led.
pop dpl
pop dph
pop r0
pop r1
pop b
pop acc
pop psw
ret
;==================================================================
;name: hexdec
;number:
;used resoures: external hex_l to hex_h,dec_l to dec_h
; internal acc,b,r0,r1
;algorithm: r0--hex buffer pointer,r1--dec buffer pointer
;entry: hex buffer:hex_l-hex_h
;exit: dec buffer:dec_l-dec_h
;------------------------------------------------------------------
hexdec: push psw
push acc
push b
push r1
push r0
mov b,#decbufflenth
mov r0,#dec_l
hexdec_clrdec: mov @r0,#0
inc r0
djnz b,hexdec_clrdec
;//clear the decimal buffer region to zero.
mov a,#hexbufflenth
mov b,#8
mul ab
mov r1,a
;//calculating the total circulating times:8(bit)*4(byte)=32(times).
hexdec_loop: mov r0,#hex_l
mov b,#hexbufflenth
clr c
hexdec_shiftc: mov a,@r0
rlc a
mov @r0,a
inc r0
djnz b,hexdec_shiftc
;//left shifting the hex_buffer region a bit.
mov r0,#dec_l
mov b,#decbufflenth
hexdec_addc: mov a,@r0
addc a,@r0
da a
mov @r0,a
inc r0
djnz b,hexdec_addc
;//(dec_buffer region)*2+Cy,decimal addition operation.
djnz r1,hexdec_loop
pop r0
pop r1
pop b
pop acc
pop psw
ret
;==================================================================
;name: sspdtest
;number:
;used resoures: external:
; internal:
;algorithm:
;entry: sspdflag=1
;exit:
;------------------------------------------------------------------
sspdtest: push psw
mov sspdcp_count,#0
; mov sample_number, #0
setb sspd_cp
setb sspd_st
clr sspd_rst
mov th0,#0ffh
mov tl0,#0
setb et0
setb tr0
pop psw
ret
;==================================================================
;name: reverse
;number:
;used resoures:
;algorithm:
;entry: r0--the first data pointer, r1--data amount
;exit:
;------------------------------------------------------------------
reverse: push psw
push acc
push b
reverse_big: mov b,#8
mov a,@r0
reverse_small: rrc a
push acc
mov a,@r0
rlc a
mov @r0,a
pop acc
djnz b,reverse_small
inc r0
djnz r1,reverse_big
;//reverse the data region.
pop b
pop acc
pop psw
ret
;==================================================================
;name:adjust
;number:
;used resoures:
;algorithm:
;entry: r0--the first data pointer, b--processing time.
;exit:
;------------------------------------------------------------------
adjust: push psw
push acc
push r1
adjust_loop: mov adbuffl,@r0
inc r0
mov adbuffh,@r0
mov r1,#adbuffh
mov a,adbuffl
xchd a,@r1
swap a
mov adbuffl,a
mov a,@r1
swap a
clr acc.7
clr acc.6
clr acc.5
clr acc.4
mov adbuffh,a
dec r0
mov @r0,adbuffl
inc r0
mov @r0,adbuffh
inc r0
djnz b,adjust_loop
;//deal with the AD data.
pop r1
pop acc
pop psw
ret
;==================================================================
;name:bufadd
;number:
;used resoures:
;algorithm:
;entry:
;exit:
;------------------------------------------------------------------
bufadd: push psw
push acc
bufadd_sec: mov @r1,#0
inc r1
mov @r1,#0
mov r3,#3
bufadd_fst: dec r1
mov a,@r0
add a,@r1
mov @r1,a
inc r0
inc r1
mov a,@r0
addc a,@r1
mov @r1,a
inc r0
djnz r3,bufadd_fst
inc r1
djnz r2,bufadd_sec
pop acc
pop psw
ret
;==================================================================
;name:rshift
;number:
;used resoures:
;algorithm:
;entry:
;exit:
;------------------------------------------------------------------
rshift: push psw
push acc
rshift_loop: clr c
mov a,@r0
rrc a
mov @r0,a
dec r0
mov a,@r0
rrc a
mov @r0,a
dec r0
djnz r1,rshift_loop
pop acc
pop psw
ret
;******************************************************************
; DELAY SUB_PROGRAM
;******************************************************************
;==================================================================
;name: delay100ms
;number:
;used resoures: time1,time2
;algorithm: Crystal Oscillator: 11.0592MHz
; delay 110.8ms*(11/12)=100ms
;entry: no
;exit: no
;------------------------------------------------------------------
delay100ms: push time1
push time2
mov time1,#220 ;2us
delay100ms_lp: mov time2,#250 ;2us 200*4us=800us
djnz time2,$ ;2us 250*2us=500us
djnz time1,delay100ms_lp ;2us 220*0.5ms=110ms
pop time2
pop time1
ret ;2us 110ms+800us=110.8ms
;==================================================================
;name: delay5ms
;number:
;used resoures: time1,time2
;algorithm: Crystal Oscillator: 11.0592MHz
; delay 5.4ms*(11/12)=5ms
;entry: no
;exit: no
;------------------------------------------------------------------
delay5ms: push time1
push time2
mov time1,#10 ;2us
delay5ms_lp: mov time2,#250 ;2us 10*4=40us
djnz time2,$ ;2us 250*2=500us
djnz time1,delay5ms_lp ;2us 10*500+40=5.4ms
pop time2
pop time1
ret ;2us
;==================================================================
;name: delay1ms
;number:
;used resoures: time1,time2
;algorithm: Crystal Oscillator: 11.0592MHz
; delay 5.4ms*(11/12)=5ms
;entry: no
;exit: no
;------------------------------------------------------------------
delay1ms: push time1
push time2
mov time1,#2 ;2us
delay1ms_lp: mov time2,#250 ;2us 2*4=8us
djnz time2,$ ;2us 250*2=500us
djnz time1,delay1ms_lp ;2us 2*500+8=5.008ms
pop time2
pop time1
ret ;2us
;==================================================================
;name: serial
;number:
;used resoures: internal:acc
; lcall ls164k
;algorithm:
;entry: No
;exit:
;------------------------------------------------------------------
serial: clr ea
clr tr0
clr et0
acall read_rsc_port
jb rderr_flag, err_jump
lcall portscan
sjmp serial_a
err_jump: ajmp rs_err_treat
serial_a: jnb pc_a_flag, serial_b
clr pc_a_flag
setb sspd_adsmpl ; sample 1,2,3 detectors
mov dspbuffx0, #_ledhiden
mov dspbuffx1, #_ledhiden
mov dspbuffx2, #_ledhiden
mov dspbuffx3, #_ledhiden
mov dspbuffy3, #_ledhiden
mov dspbuffy2, #_ledhiden
mov dspbuffy1, #_ledhiden
mov dspbuffy0, #_A
lcall led
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -