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

📄 bcd.asm

📁 一种简单可行的串行通讯方式
💻 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 + -