📄 bcd.asm
字号:
bmbin_bcd: mov r3, #8
bmsjcl: clr c
mov a, bmqdata0 ;将采集的数据左移一位
rlc a
mov bmqdata0, a
mov a, bmbcd0
addc a, bmbcd0
da a
mov bmbcd0, a
mov a, bmbcd1
addc a, bmbcd1
da a
mov bmbcd1, a
djnz r3, bmsjcl
;====================================================================
;Procedure name: test.asm
;The date of development: 2002.05
;Crystal Oscillator: 11.0592MHz
;Microcontroller: AT89C51 (Producted by ATEMEL Corporation)
;Developing devices: Personal Computer(486DX);EMP-100A;Avsim51
;Author: YZTC
;====================================================================
;----------------------------------------------------------------
;//define all the pins of the Microcontrollor(AT89C51)
Q1 bit p0.0 ;七段编码器数据输入0
Q2 bit p0.1 ;七段编码器数据输入1
Q3 bit p0.2 ;七段编码器数据输入2
Q4 bit p0.3 ;七段编码器数据输入3
AQ1 bit p0.4 ;译码器数据输入0
BQ2 bit p0.5 ;译码器数据输入1
CQ3 bit p0.6 ;译码器数据输入2
dp1 bit p0.7 ;显示小数点
line1 bit p1.0 ;键盘行线输入1
line2 bit p1.1 ;键盘行线输入2
col1 bit p1.2 ;键盘列线输入1
col2 bit p1.3 ;键盘列线输入2
col3 bit p1.4 ;键盘列线输入3
bmqa bit p1.5 ;编码器输入信号a
bmqs bit p1.6 ;编码器输入信号c
bmqb bit p1.7 ;编码器输入信号b
M1A bit p2.0 ;电机1信号A输入
M1B bit p2.1 ;电机1信号B输入
M1C bit p2.2 ;电机1信号C输入
M1D bit p2.3 ;电机1信号D输入
M2A bit p2.4 ;电机2信号A输入
M2B bit p2.5 ;电机2信号B输入
M2C bit p2.6 ;电机2信号C输入
M2D bit p2.7 ;电机2信号D输入
_RXD bit p3.0 ;extra pin
_TXD bit p3.1 ;extra pin
; bit p3.2 ;extra pin
; bit p3.3 ;key board interrupt input pin.
; bit p3.4 ;extra pin
gsa bit p3.5 ;光栅输入信号a
gss bit p3.6 ;光栅输入信号c
gsb bit p3.7 ;光栅输入信号b
;--------------------------------------------------------------------
;//define the flag
;--------------------------------------------------------------------
;dir_flag bit 24h ;for direction
commu_state equ 25h
s6 bit 28h
s7 bit 29h ;0 represent 1
s5 bit 2ah ;show communication state
s4 bit 2bh ;
s3 bit 2ch ;
key_state equ 26h
;key_pressed bit 30h ;1表示有键压下,0表示无键压下
key1_f bit 31h ;1表示键1压下
key2_f bit 32h ;1表示键2压下
key3_f bit 33h ;1表示键3压下
key4_f bit 34h ;1表示键4压下
key5_f bit 35h ;1表示键5压下
key6_f bit 36h ;1表示键6压下
moveflag equ 27h ;single shaft movement flag
m1_s bit 38h ;move to right
m2_s bit 39h ;move to left
m1_p bit 3ah ;move forward
m1_n bit 3bh ;move backward
m2_p bit 3ch ;move up
m2_n bit 3dh ;move down
gs_state equ 28h ;光栅状态
gsa_f bit 40h ;
gsb_f bit 41h ;
gss_f bit 42h
dir0_f bit 43h
bmq_state equ 29h ;编码器状态
bmqa_f bit 48h ;
bmqb_f bit 49h
bmqs_f bit 4ah
dir_f bit 4bh
ychu_state equ 2ah
yczb_f bit 51h ;编码器反转加脉冲标志
yczb1_f bit 52h ;编码器正转减脉冲标志
yczb0_f bit 53h ;光栅负移动加脉冲标志
yczb01_f bit 54h ;光栅正移动加脉冲标志
;-----------------------------------------------------------------
;//define the RAM region
;-----------------------------------------------------------------
movement equ 30h ;data from computer to show 26 kinds of
;movements such as +x, +x+y, +x+y+z
wait_time equ 31h ;data from computer to timer0 for waiting
moveempty equ 32h
time1 equ 33h
time2 equ 34h
number12 equ 35h ;存放显示数据1,2位
number34 equ 36h ;存放显示数据3,4位
number56 equ 37h ;存放显示数据5,6位
number78 equ 38h ;存放显示数据7,8位
move_type equ 39h ;设置电机转动组合类型
gsshanju equ 40h ;存放光栅的栅距
bmshanju equ 41h ;存放编码器的栅距
gsdata0 equ 42h ;存放光栅采集的数据
gsdata1 equ 43h
gsdata2 equ 44h
gsbcd0 equ 45h ;处理后光栅bcd码
gsbcd1 equ 46h
gsbcd2 equ 47h
gsbcd3 equ 48h
bmqdata0 equ 49h ;存放编码器采集的数据
bmqdata1 equ 4ah
bmqdata2 equ 4bh
bmbcd0 equ 4ch ;处理后编码器bcd码
bmbcd1 equ 4dh
bmbcd2 equ 4eh
bmbcd3 equ 4fh
bmqa_sign equ 50h
bmqb_sign equ 51h
direction equ 52h
motor1_phase equ 53h
motor2_phase equ 54h
gsa_sign equ 55h
gsb_sign equ 56h
direction0 equ 57h
motor_move equ 58h
;--------------------------------------------------------------
;//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 ;
;--------------------------------------------------------------
;//define the display data symbol for the purpose of reading.
;**************************************************************
; MAIN PROGRAM
; (General board for the Optical Sensor and SCARA)
;**************************************************************
org 0
sjmp main ;main procedure entry.
; org 0003h ;int0 entrance.
; org 000bh
; ajmp motor_t ;t0 int_procedure entry.
; org 0013h
; ajmp menu ;int1 int_procedure entry.
; org 001bh ;t1 entrance.
; ljmp intc
; org 0023h ;serial entrance.
; ajmp intc
;==================================================================
;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 bmqdata0, #0ffh
mov bmqdata1, #0ffh
mov bmqdata2, #1
lcall decoder
jjjj: nop
sjmp jjjj
;--------------------------------------------------------------------
decoder: mov r3, #8
bms: clr c
mov a, bmqdata0 ;将采集的数据左移一位
rlc a
mov bmqdata0, a
mov a, bmbcd0
addc a, bmbcd0
da a
mov bmbcd0, a
mov a, bmbcd1
addc a, bmbcd1
da a
mov bmbcd1, a
djnz r3, bms
mov a, bmqdata1
jz bmsjcl_2
bmsjcl_1: clr c
mov a, bmbcd0
add a, #56h
da a
mov bmbcd0, a
mov a, bmbcd1
addc a, #2h
da a
mov bmbcd1, a
clr a
addc a, bmbcd2
da a
mov bmbcd2, a
djnz bmqdata1, bmsjcl_1
bmsjcl_2: mov a, bmqdata2
jz sjcl_end
loop4: clr c
mov a, bmbcd0
add a, #36h
da a
mov bmbcd0, a
mov a, bmbcd1
addc a, #55h
da a
mov bmbcd1, a
mov a, bmbcd2
addc a, #6h
da a
mov bmbcd2, a
clr a
addc a, bmbcd3
da a
mov bmbcd3, a
djnz bmqdata2,loop4
sjcl_end: ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -