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

📄 mpu.asm

📁 scara机器人的一种简单的实现方法
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;====================================================================
;Procedure name: quick.asm
;The date of development: 1999.04
;Crystal Oscillator: 11.0592MHz
;Microcontroller: AT89C51 (Producted by ATEMEL Corporation)
;Developing devices: Personal Computer(486DX);EMP-100A;Avsim51
;Author:  Lixiufeng
;====================================================================
;----------------------------------------------------------------
;//define all the pins of the Micocontrollor(AT89C51)
res4            bit     p0.0    ;"res1-res4"reserving for the
res3            bit     p0.1    ; future.
res2            bit     p0.2
res1            bit     p0.3
ldat            bit     p0.4    ;display shifting data pin.
lclk            bit     p0.5    ;display shifting clock pin.
dtr             bit     p0.6    ;RS232C data terminal ready(DTR).
dsr             bit     p0.7    ;RS232C data set ready(DSR).
        
ad7             bit     p1.0    ;"ad0-ad7":the A/D convertor data
ad6             bit     p1.1    ; port.
ad5             bit     p1.2
ad4             bit     p1.3
ad3             bit     p1.4
ad2             bit     p1.5
ad1             bit     p1.6
ad0             bit     p1.7

kclk            bit     p2.0    ;key board shifting clock pin.
col1            bit     p2.1    ;the first colum key pin.
col2            bit     p2.2    ;the second colum key pin.
kdat            bit     p2.3    ;key board shifting data pin.
scl             bit     p2.4    ;SEEROM R/D clock pin.
sda             bit     p2.5    ;SEEROM R/D data pin.
adrc            bit     p2.6    ;(AD574A)start A/D to convert.
ada0            bit     p2.7    ;two byte data output control pin.

;rxd            bit     p3.0    ;RS232C receiving data pin.
;txd            bit     p3.1    ;RS232C transmiting data pin.
adst            bit     p3.2    ;AD574A statue pin.
keyi            bit     p3.3    ;key board interrupt input pin.
sspd_cp         bit     p3.4    ;SSPD external clock output pin. 
sspd_st         bit     p3.5    ;SSPD external start output pin. 
sspd_eos        bit     p3.6    ;SSPD external end input pin.
sspd_rst        bit     p3.7    ;the reset pin of S/H.
;--------------------------------------------------------------------
;//define the flag
keybuffl        equ     20h     ;key board flag(l).
keybuffh        equ     21h     ;key board flag(h).
s0              bit     00h     ;"0" key flag.
s1              bit     01h     ;"1" key flag.
s2              bit     02h     ;"2" key flag.
s3              bit     03h     ;"3" key flag.
s4              bit     04h     ;"4" key flag.
s5              bit     05h     ;"5" key flag.
s6              bit     06h     ;"6" key flag.
s7              bit     07h     ;"7" key flag.
s8              bit     08h     ;"8" key flag.
s9              bit     09h     ;"9" key flag.
s10             bit     0ah     ;"A" key flag.
s11             bit     0bh     ;"B" key flag.
s12             bit     0ch     ;"C" key flag.
s13             bit     0dh     ;"D" key flag.
s14             bit     0eh     ;"E" key flag.
s15             bit     0fh     ;"F" key flag.

firstflag       equ     22h     ;the first menu flag register.
fst_aflag       bit     10h     ;"A":s10 first pressed flag.
fst_bflag       bit     11h     ;"B":s11 first pressed flag.
fst_cflag       bit     12h     ;"C":s12 first pressed flag.
fst_dflag       bit     13h     ;"D":s13 first pressed flag.
fst_eflag       bit     14h     ;"E":s14 first pressed flag.
fst_fflag       bit     15h     ;"F":s15 first pressed flag.
;               bit     16h     ;
;               bit     17h     ;

secondflag      equ     23h     ;the second menu flag register.
sec_aflag       bit     18h     ;"A":s10 second pressed flag.
sec_bflag       bit     19h     ;"B":s11 second pressed flag.
sec_cflag       bit     1ah     ;"C":s12 second pressed flag.
sec_dflag       bit     1bh     ;"D":s13 second pressed flag.
sec_eflag       bit     1ch     ;"E":s14 second pressed flag.
sec_fflag       bit     1dh     ;"F":s15 second pressed flag.
;               bit     1eh     ;
;               bit     1fh     ;

flag1           equ     24h     ;the first status flag register.
keyflag         bit     20h     ;keyflag=1 imply that a key is pressed.
dsppointflag    bit     21h     ;decimal point displaying flag.
dsp_xflag       bit     22h     ;deal with X coordinate displaying flag.
dsp_yflag       bit     23h     ;deal with Y coordinate displaying flag.
ledflag         bit     24h     ;display changed flag.
sspd_adsmpl     bit     25h     ;
serial_flag     bit     26h     ;RS-232C in action.
;               bit     27h     ;

flag2           equ     26h     ;the second status flag register.
pc_a_flag       bit     28h     ;
pc_b_flag       bit     29h     ;
pc_c_flag       bit     2ah     ;
pc_d_flag       bit     2bh     ;
pc_e_flag       bit     2ch     ;
pc_f_flag       bit     2dh     ;
tderr_flag      bit     2eh     ;
rderr_flag      bit     2fh     ;

flag3           equ     26h     ;the third status flag register.
;               bit     30h     ;
;               bit     31h     ;
;               bit     32h     ;
;               bit     33h     ;
;               bit     34h     ;
;               bit     35h     ;
;               bit     36h     ;
;               bit     37h     ;

flag4           equ     27h     ;the fourth status flag register.
;               bit     38h     ;
;               bit     30h     ;
;               bit     3ah     ;
;               bit     3bh     ;
;               bit     3ch     ;
;               bit     3dh     ;
;               bit     3eh     ;
;               bit     3fh     ;

sspdcp_count    equ     28h     ;sspd clock counter.
sspdcp_countb   bit     40h

keyvalue        equ     29h     ;
ecount_menu     equ     2ah     ;
rscbufft        equ     2bh     ;
rscbuffr        equ     2ch     ;
sspdcpbuffl     equ     2dh     ;
sspdcpbuffh     equ     2eh     ;
;               equ     2fh     ;
;-----------------------------------------------------------------
;//define the RAM region
dspbuffy0       equ     30h     ;Y coordinate buffer of the shifting 
dspbuffy1       equ     31h     ; data.
dspbuffy2       equ     32h
dspbuffy3       equ     33h
dspbuffx0       equ     34h     ;X coordinate buffer of the shifting 
dspbuffx1       equ     35h     ; data. 
dspbuffx2       equ     36h
dspbuffx3       equ     37h

dec_l           equ     38h     ;buffer(l) of the decimal data.
dec_h           equ     39h     ;buffer(h) of the decimal data.
hex_l           equ     3ah     ;buffer(l) of the hex data.
hex_h           equ     3bh     ;buffer(h) of the hex data.
dsp_xl          equ     3ch     ;X(hex) coordinate input buffer(l).
dsp_xh          equ     3dh     ;X(hex) coordinate input buffer(h).
dsp_yl          equ     3eh     ;Y(hex) coordinate input buffer(l).
dsp_yh          equ     3fh     ;Y(hex) coordinate input buffer(h).

sspd_adbuff11l  equ     40h     ;
sspd_adbuff11h  equ     41h     ;
sspd_adbuff12l  equ     42h     ;
sspd_adbuff12h  equ     43h     ;
sspd_adbuff13l  equ     44h     ;
sspd_adbuff13h  equ     45h     ;
sspd_adbuff21l  equ     46h     ;
sspd_adbuff21h  equ     47h     ;

sspd_adbuff22l  equ     48h     ;
sspd_adbuff22h  equ     49h     ;
sspd_adbuff23l  equ     4ah     ;
sspd_adbuff23h  equ     4bh     ;
sspd_adbuff31l  equ     4ch     ;
sspd_adbuff31h  equ     4dh     ;
sspd_adbuff32l  equ     4eh     ;
sspd_adbuff32h  equ     4fh     ;

sspd_adbuff33l  equ     50h     ;
sspd_adbuff33h  equ     51h     ;

time1           equ     52h     ;
time2           equ     53h     ;
time3           equ     54h     ;

adbuffl         equ     55h     ;
adbuffh         equ     56h     ;

sspddata1l      equ     59h     ;
sspddata1h      equ     5ah     ;
sspddata2l      equ     5bh     ;
sspddata2h      equ     5ch     ;
sspddata3l      equ     5dh     ;
sspddata3h      equ     5eh     ;
;               equ     5fh     ;


;--------------------------------------------------------------
;//define the data used in the procedure.
_stack          data    60h     ;stack pointer=60h
dspbufflenth    data    8       ;
dspbuffxlenth   data    4       ;
dspbuffylenth   data    4       ;
decbufflenth    data    4       ;
hexbufflenth    data    4       ;
b_rate          data    0fdh    ;baud rate : 9600bps.

;--------------------------------------------------------------
;//define the display data symbol for the purpose of reading.
_ledhiden       data    0ffh   
_0              data    0
_1              data    1
_2              data    2
_3              data    3
_4              data    4
_5              data    5
_6              data    6
_7              data    7
_8              data    8
_9              data    9
_A              data    10
_b              data    11
_c              data    12
_d              data    13
_E              data    14
_F              data    15
_Hl             data    16
_hs             data    17
_i              data    18
_J              data    19
_L              data    20
_n              data    21
_o              data    22
_P              data    23
_q              data    24
_Rl             data    25
_rs             data    26
_S              data    27
_T              data    28
_U              data    29
_v              data    30
_Y              data    31

_0.             data    32
_1.             data    33
_2.             data    34
_3.             data    35
_4.             data    36
_5.             data    37
_6.             data    38
_7.             data    39
_8.             data    40
_9.             data    41
_A.             data    42
_b.             data    43
_c.             data    44
_d.             data    45
_E.             data    46
_F.             data    47
_Hl.            data    48
_hs.            data    49
_i.             data    50
_J.             data    51
_L.             data    52
_n.             data    53
_o.             data    54
_P.             data    55
_q.             data    56
_Rl.            data    57
_rs.            data    58
_S.             data    59
_T.             data    60
_U.             data    61
_v.             data    62
_Y.             data    63

;**************************************************************
;               MAIN PROGRAM
;       (General board for the Optical Sensor and SCARA)
;**************************************************************
                org     0
                sjmp    main            ;main procedure entry.

;               org     0003h           ;int0 entrance.

                org     000bh
                ajmp    glisten0        ;t0 int_procedure entry.

;                org     0013h
;                ajmp    menu            ;int1 int_procedure entry.

;               org     001bh           ;t1 entrance.
                org     0023h           ;serial entrance.
                ajmp    serial
;==================================================================
;name: main procedure
;number:
;used resoures:
;algorithm:
;------------------------------------------------------------------
                org     30h
main:           mov     sp,#_stack
;//set stack pointer "#_stack",stack amount:32byte.

                mov     r0,#20h         ;initialize the clr_pointer.
                mov     r1,#64          ;endow "R1" with initial value.
main_clr_RAM:   mov     @r0,#0
                inc     r0
                djnz    r1,main_clr_RAM
;//clear the used RAM region from 20h to 5fh(64byte).
                mov     dspbuffy0,#_P.  ;send "P." to Y coordinate.
                mov     dspbuffx0,#_P.  ;send "P." to X coordinate.
                lcall   led

                mov     scon,#11010000b ;set serial communicating mode.
                mov     tmod,#00100001b ;set T1 mode for rs232c.
                mov     tl1,#b_rate     ;baud rate:9600bps(0fdh).
                mov     th1,#b_rate
                setb    tr1             ;start timer1

                mov     sspdcpbuffl, #0fah
                mov     sspdcpbuffh, #0ffh

;//X coordinate display "P.",and also Y coordinate.

                setb    ea              ;enable interrupt.
;                setb    et0
;                setb    tr0
                setb    it1             ;set the down edge valid.
                setb    es              ;enable rs-232c interrupt

                jnb     ledflag,$       ;waiting for the display change.
                clr     ledflag
                sjmp    main

;******************************************************************
;               Interrupt sub_procedure
;******************************************************************
;==================================================================
;name: glisten0(t0,sspd_cpflag=1)
;number:
;used resoures: external:T0,sspdcp_count,sspdcpbuffl/h,
;                       sspd_cp,sspd_st,sspd_eos,sspd_rst
;               internal:A,dptr,psw.
;algorithm:
;note:  In order to increase the SSPD clock frequency,the register 
;       "A","dptr","psw" that used in this procedure for internal
;       use have not been protected. Before using this procedure,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -