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

📄 nc.asm

📁 一个简单得数控中心源代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;====================================================================
;Procedure name: gri.asm
;The date of development: 2001.12
;Crystal Oscillator: 12MHz
;Microcontroller: AT89C51 (Producted by ATEMEL Corporation)
;Developing devices: Personal Computer(486DX);EMP-100A;Avsim51
;Author:  Lixiufeng
;====================================================================
;----------------------------------------------------------------
;//define all the pins of the Micocontrollor(AT89C51)
YAB             bit     p0.0    ;Y axis a phase
YB              bit     p0.1    ;Y axis b phase
YBB             bit     p0.2    ;Z axis a phase
YA              bit     p0.3    ;Z axis b phase
XStop           bit     p0.4    ;X axis stop switch
minus           bit     p0.5    ;display "-"
LDAT            bit     p0.6    ;display dada
LCLK            bit     p0.7    ;display clock
        
Xr              bit     p1.0    ;right side switch of X axis
Xl              bit     p1.1    ;left side switch of X axis
Man             bit     p1.2	;Manual operation
Sauto           bit     p1.3    ;Semi auto operation
Auto            bit     p1.4    ;Auto operation
Cylin           bit     p1.5    ;Alow cylinder work
IN1             bit     p1.6    ;extra inport 1
IN2             bit     p1.7    ;extra inport 2

Line1           bit     p2.0    ;keyboard line 1
Line2           bit     p2.1    ;keyboard line 2
Line3           bit     p2.2    ;keyboard line 3
Line4           bit     p2.3    ;keyboard line 4
ZB              bit     p2.4    ;extra outport 1 with amplfier
ZBB             bit     p2.5    ;extra outport 2
ZA              bit     p2.6    ;extra outport 3
ZAB             bit     p2.7    ;extra outport 4

Col1            bit     p3.0    ;keyboard column 1
Col2            bit     p3.1    ;keyboard column 2
Col3            bit     p3.2    ;keyboard column 3
Col4            bit     p3.3    ;keyboard column 4
Col5            bit     p3.4    ;keyboard column 5 
Col6            bit     p3.5    ;keyboard column 6 
Col7            bit     p3.6    ;keyboard column 7
O5              bit     p3.7    ;extra outport 5
;--------------------------------------------------------------------
;//define the flag
keybuff0        equ     20h     ;keyboard line 1
keybuff1        equ     21h     ;keyboard line 2
keybuff2        equ     22h     ;keyboard line 3
keybuff3        equ     23h     ;keyboard line 4
k00             bit     00h     ;"k1" key flag.
k01             bit     01h     ;"k2" key flag.
k02             bit     02h     ;"k3" key flag.
k03             bit     03h     ;"k4" key flag.
k04             bit     04h     ;"k5" key flag.
k05             bit     05h     ;"k6" key flag.
k06             bit     06h     ;"k7" key flag.
k07             bit     07h     ;

k10             bit     08h     ;"k8" key flag.
k11             bit     09h     ;"k9" key flag.
k12             bit     0ah     ;"k10" key flag.
k13             bit     0bh     ;"k11" key flag.
k14             bit     0ch     ;"k12" key flag.
k15             bit     0dh     ;"k13" key flag.
k16             bit     0eh     ;"k14" key flag.
k17             bit     0fh     ;

k20             bit     10h     ;"k15" key flag.
k21             bit     11h     ;"k16" key flag.
k22             bit     12h     ;"k17" key flag.
k23             bit     13h     ;"k18" key flag.
k24             bit     14h     ;"k19" key flag.
k25             bit     15h     ;"k20" key flag.
k26             bit     16h     ;"k21" key flag.
k27             bit     17h     ;

k30             bit     18h     ;"k22" key flag.
k31             bit     19h     ;"k23" key flag.
k32             bit     1ah     ;"k24" key flag.
k33             bit     1bh     ;"k25" key flag.
k34             bit     1ch     ;"k26" key flag.
k35             bit     1dh     ;"k27" key flag.
k36             bit     1eh     ;"k28" key flag.
k37             bit     1fh     ;

flag1           equ     24h     ;the first status flag register.
x_dir	      bit     20h     ;0向右移动,1向左移动
y_dir	      bit     21h     ;0向前移动,1向后移动

no_move_f       bit     22h     ;point key is pressed
;	      bit     23h     ;motor y phase flag
zphaseflag      bit     24h     ;motor z phase flag
zdis_f          bit     25h     ;display z coordinates
auto_exit_f     bit     26h     ;
;               bit     27h     ;

flag2           equ     25h     ;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.
ysign_flag      bit     30h     ;1 is posive, 0 is negtive, y axis position
zsign_flag      bit     31h     ;1 is posive, 0 is negtive, z axis position
ymove_flag      bit     32h     ;0 is posive, 1 is negtive
zmove_flag      bit     33h     ;
yinsign_flag    bit     34h     ;1 is posive, 0 is negtive, value to be moved
zinsign_flag    bit     35h     ;
r_y_flag        bit     36h     ;flag for reduce ratio of y, 4 steps for 0.01mm
r_z_flag        bit     37h     ;flag for reduce ratio of z, 8 steps for 0.01mm

flag4           equ     27h     ;the fourth status flag register.
yfeed_flag      bit     38h     ;"1" y need a feed move
zfeed_flag      bit     30h     ;
;               bit     3ah     ;
;               bit     3bh     ;
;               bit     3ch     ;speed up stage
;               bit     3dh     ;speed down state
;               bit     3eh     ;have level stage
disp_flag       bit     3fh     ;display y or z

;           	equ   	28h     ;sspd clock counter.
num_k_f     	bit   	40h		;number key flag
x_f		bit	41h
y_f		bit	42h
H_f		bit	43h
a_f		bit	44h
b_f		bit	45h
c_f		bit	46h
d_f		bit	47h

;keyvalue       equ     29h     ;
e_f		bit	48h
f_f		bit	49h
o_f		bit	4ah

;ecount_menu    equ     2ah     ;
oy1		equ     2bh     ;
oy2       	equ     2ch     ;
oy3         	equ     2dh     ;current position value of z axis
oy4         	equ     2eh     ;-640.00mm to 640.00mm
oy5         	equ     2fh     ;
;-----------------------------------------------------------------
;//define the RAM region
indata1      	equ     30h     ;buffer of shifting data 
indata2      	equ     31h     ;
indata3      	equ     32h     ;
indata4      	equ     33h     ;
indata5      	equ     34h     ; 
ox1        	equ     35h     ;
ox2         	equ     36h
ox3          	equ     37h     ;number of pulse movement

ox4          	equ     38h     ;
ox5         	equ     39h     ;y axis value to be moved
ax3         	equ     3ah     ;
ax4          	equ     3bh     ;
ax5          	equ     3ch     ;
ay1         	equ     3dh     ;z axis value to be moved
ay2         	equ     3eh     ;
ay3          	equ     3fh     ;

ay4		equ     40h     ;
ay5		equ     41h     ;
bx1		equ     42h     ;
bx2		equ     43h     ;
bx3		equ     44h     ;
bx4		equ     45h     ;
bx5		equ     46h     ;
by1		equ     47h     ;

by2         	equ     48h     ;current position value of y axis 
by3		equ     49h     ;-640.00mm to 640.00mm
by4		equ     4ah     ;
by5		equ     4bh     ;
cx1		equ     4ch     ;
cx2		equ     4dh     ;
cx3		equ     4eh     ;
cx4		equ     4fh     ;motor move speed, 64000 is the highest value

cx5		equ     50h     ;
cy1		equ     51h     ;
cy2		equ     52h     ;
cy3		equ     53h     ;
cy4		equ     54h     ;
cy5		equ     55h     ;
ax1          	equ     56h     ;

ax2      	equ     57h     ;

data1        	equ     58h     ;
data2        	equ     59h     ;
data3        	equ     5ah     ;for speed up 
data4        	equ     5bh     ;
data5		equ     5ch     ;

time1		equ     5dh     ;
time2		equ     5eh     ;
time3		equ     5fh     ;


;--------------------------------------------------------------
;//define the data used in the procedure.
_stack          data    60h     ;stack pointer=60h
dspbufflenth    data    8       ;

;--------------------------------------------------------------
;//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
_H             data    16

_x             data    17
_y             data    18
_o             data    19
_4.             data    20
_5.             data    21
_6.             data    22
_7.             data    23
_8.             data    24
_9.             data    25
_P.             data    26
;_Y              data    27
_BK		data	28

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

;               org     0003h           ;int0 entrance.

                org     000bh
               ajmp    motory          ;t0 int_procedure entry.

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

 ;               org     001bh           ;t1 entrance.
  ;              ajmp    motorz
;               org     0023h           ;serial entrance.
;               ajmp    serial
;==================================================================
;name: main procedure
;number:
;used resoures:
;algorithm:
;------------------------------------------------------------------
                org     40h
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     th0, #0ffh
                mov     tl0, #014h      ;normal cp of motor stopped
                mov     th1, #0ffh
                mov     tl1, #014h
                mov     indata1, #0;
                mov     indata2, #1
                mov     indata3, #2
                mov     indata4, #3
                mov     indata5, #4   ;send "P." to Y coordinate.
                lcall   led

                mov     tmod,#00010001b ;set T0, T1 mode 1.
                clr    ea
                setb    ex0             ;enable interrupt0
                setb    ex1             ;enable interrupt1
                setb    tr0             ;start timer0
                setb    tr1             ;start timer1 

		setb	ea
		setb	et0

key_return:   lcall   keyscane
              jb     k00, x1     ;1
		lcall	number_tri
		ajmp	key_return
x1:           jb     k01, x2    ;2
		lcall	number_tri
		ajmp	key_return
x2:           jb     k02, x3     ;3
		lcall	number_tri
		ajmp	key_return
x3:           jb     k03, x4    ;0
		lcall  number_tri
		ajmp	key_return

x4:           jb     k04, x5     ;a key pressed
		jb	o_f, x4_2
		jb	x_f, x4_1
		jb	y_f, x4_1
		jb	H_f, x4_1
		sjmp	x5
x4_1:		setb	a_f
		mov	indata2, #_A
		lcall	led
		sjmp	x5

x4_2:		jnb	x_f, x4_21
		mov	indata1, ax1
		mov	indata2, ax2
		mov	indata3, ax3
		mov	indata4, ax4
		mov	indata5, ax5
		clr	o_f
		clr	x_f
		lcall	led
x4_21:		jnb	y_f, x4_22
		mov	indata1, ay1
		mov	indata2, ay2
		mov	indata3, ay3
		mov	indata4, ay4
		mov	indata5, ay5
		clr	y_f
		lcall	led
x4_22:		clr	o_f

x5:        	jb     k05, x6   ;b key pressed
		jb	o_f, x5_2
		jb	x_f, x5_1
		jb	y_f, x5_1
		jb	H_f, x5_1
		sjmp	x6
x5_1:		setb	b_f
		mov	indata2, #_b
		lcall	led
		sjmp	x6
x5_2:		jnb	x_f, x5_21
		mov	indata1, bx1
		mov	indata2, bx2
		mov	indata3, bx3
		mov	indata4, bx4
		mov	indata5, bx5
		clr	o_f
		clr	x_f
		lcall	led
x5_21:		jnb	y_f, x5_22
		mov	indata1, by1
		mov	indata2, by2
		mov	indata3, by3
		mov	indata4, by4
		mov	indata5, by5
		clr	y_f
		lcall	led
x5_22:		clr	o_f


x6:         	jb     k06, y0     ;x key pressed
		jb	o_f, x6_1
		clr	num_k_f
		mov	data1, indata1
		mov	data2, indata2
		mov	data3, indata3
		mov	data4, indata4
		mov	data5, indata5

		setb	x_f
		mov	indata1, #_x
		mov	indata2, #_BK
		mov	indata3, #_BK
		mov	indata4, #_BK
		mov	indata5, #_BK
		lcall	led
		sjmp	y0

x6_1:		setb	x_f
		mov	indata2, #_x
		lcall	led

y0:           jb     k10, y1    ;4
		lcall	number_tri
		ajmp	key_return
y1:           jb     k11, y2     ;5
		lcall	number_tri
		ajmp	key_return
y2:           jb     k12, y3    ;6
		lcall	number_tri
		ajmp	key_return

y3:           jb     k13, y4     ;		output data
		clr	num_k_f
		setb	o_f
		mov	indata1, #_o
		mov	indata2, #_BK
		mov	indata3, #_BK
		mov	indata4, #_BK
		mov	indata5, #_BK
		lcall	led

y4:         	jb     k14, y5    ;c key pressed
		jb	o_f, y4_2
		jb	x_f, y4_1
		jb	y_f, y4_1
		jb	H_f, y4_1
		sjmp	y5
y4_1:		setb	c_f
		mov	indata2, #_c
		lcall	led
		sjmp	y5
y4_2:		jnb	x_f, y4_21
		mov	indata1, cx1
		mov	indata2, cx2
		mov	indata3, cx3
		mov	indata4, cx4
		mov	indata5, cx5
		clr	o_f
		clr	x_f
		lcall	led
y4_21:		jnb	y_f, y4_22
		mov	indata1, cy1
		mov	indata2, cy2
		mov	indata3, cy3
		mov	indata4, cy4
		mov	indata5, cy5
		clr	y_f
		lcall	led
y4_22:		clr	o_f


y5:         	jb     k15, y6     ;
		nop

y6:         	jb     k16, z0    ;y key pressed
		jb	o_f, y6_1
		clr	num_k_f
		mov	data1, indata1
		mov	data2, indata2
		mov	data3, indata3
		mov	data4, indata4
		mov	data5, indata5

		setb	y_f
		mov	indata1, #_y
		mov	indata2, #_BK
		mov	indata3, #_BK
		mov	indata4, #_BK
		mov	indata5, #_BK
		lcall	led
		sjmp	z0

y6_1:		setb	y_f
		mov	indata2, #_y
		lcall	led


z0:           jb     k20, z1     ;7
		lcall	number_tri
		ajmp	key_return
z1:           jb     k21, z2    ;8
		lcall	number_tri
		ajmp	key_return
z2:           jb     k22, z3     ;9
		lcall	number_tri
		ajmp	key_return

z3:        	jb     k23, z4    ;H
		clr	num_k_f
		setb	H_f
		mov	indata1, #_H
		mov	indata2, #_BK
		mov	indata3, #_BK
		mov	indata4, #_BK
		mov	indata5, #_BK
		lcall	led

z4:         	jb     k24, z5     ;e
		cpl	p1.0
		nop

z5:        	jb     k25, z6    ;f
		jb	o_f, z5_2
		jb	x_f, z5_1
		jb	y_f, z5_1
		jb	H_f, z5_1
		sjmp	z6
z5_1:		setb	f_f
		mov	indata2, #_F
		lcall	led
		sjmp	z6
z5_2:		jnb	x_f, z5_21
		mov	indata1, ox1
		mov	indata2, ox2
		mov	indata3, ox3
		mov	indata4, ox4
		mov	indata5, ox5
		clr	o_f
		clr	x_f
		lcall	led
z5_21:		jnb	y_f, z5_22
		mov	indata1, oy1
		mov	indata2, oy2
		mov	indata3, oy3
		mov	indata4, oy4
		mov	indata5, oy5
		clr	y_f
		lcall	led
z5_22:		clr	o_f



		nop

z6:         	jb     k26, z7     ;enter
		lcall	tri_enter
  
 
z7:        	jb	k30, zz1
		lcall	x_r_move

zz1:		jb	k32, zz2
		lcall	x_l_move

zz2:		jb	k34, zz3
		lcall	y_f_move

zz3:		jb	k36, zz4
		lcall	y_b_move

zz4:		ajmp    key_return



motory:		push psw
		clr tr0
		cpl	p1.1
		mov	tl0, #0efh
		mov	th0, #0eeh
		setb	tr0
		pop	psw
		reti
;******************************************************************
x_r_move:	push	psw		;move x to right
		clr	x_dir

⌨️ 快捷键说明

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