⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpu.asm

📁 scara机器人的一种简单的实现方法
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;//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 + -