📄 kma2b.asm
字号:
;====================================================================
;Procedure name: kma200.asm
;The date of development: 2007.11
;Crystal Oscillator: 12MHz
;Microcontroller: AT89C51 (Producted by ATEMEL Corporation)
;Developing devices: Personal Computer(486DX);EMP-100A;Avsim51
;Author: yu yun-chang
;====================================================================
;----------------------------------------------------------------
;//define all the pins of the Micocontrollor(AT89C51)
data bit p1.0 ;data line for kma200
clk bit p1.1 ;clock for kma200
cs bit p1.2 ;select kma200
;define variable
delay1 equ 30h ;延时变量1
delay2 equ 31h
;延时变量2
delay3 equ 32h ;延时变量3
command equ 33h ;延时变量2
ram_datah equ 34h
ram_datal equ 35h
ram_data equ 36h
ram_add equ 37h
;**************************************************************
; 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,#60h
;---------------------------------------------
; command model
;---------------------------------------------
; enter command model
clr clk
clr p1.7
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
setb clk
lcall delay1ms
;------read data from a ram unit------------------
m1:
mov command, #1Fh
lcall write_command
setb cs
lcall delay1ms
lcall read_ram
mov r1, ram_datal
mov r0, ram_datah
setb cs
m2:
mov p0, r1
clr p2.0
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
setb p2.0
mov p0, r0
clr p2.1
lcall delay1ms
lcall delay1ms
lcall delay1ms
lcall delay1ms
setb p2.1
sjmp m1
delay1ms: mov delay1, #100
delay1ms_1: nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
djnz delay1, delay1ms_1
ret
delay2s: push psw
push delay1
push delay2
push delay3
mov delay1,#100
delay2s_0p: mov delay2,#100 ;2us
delay2s_lp: mov delay3,#100 ;2us
djnz delay3,$ ;2us (248+1)*2=498us
djnz delay2,delay2s_lp ;2us 200*(498+2)=200ms
djnz delay1,delay2s_0p ;2us 10*(200+3)=2s
pop delay2
pop delay1
pop psw
ret ;
;==========================================================
; read one word from kma200.
;ram_datal and ram_datah is the data.
;----------------------------------------------------------
read_ram: push acc
push psw
push r7
setb clk ;clk out 1.
setb cs
nop
clr cs ; select slave .
mov r7, #8 ;set cycle data..
re_r_1:
clr clk ;clk out 0.
nop
setb clk
mov c, data ;slave data to c.
rlc a ;shift to a.
djnz r7, re_r_1 ; one byte?
mov ram_datah, a
mov r7, #8 ;set cycle data..
re_r_2:
clr clk ;clk out 0.
nop
setb clk
mov c, data ;slave data to c.
rlc a ;shift to a.
djnz r7, re_r_2 ; one byte?
mov ram_datal, a
setb cs
pop r7
pop psw
pop acc
ret
;==========================================================
; write one word to kma200.
; ram_datah and ram_datal is the ram data.
;----------------------------------------------------------
write_ram:
push acc
push psw
push r7
setb clk ;clk out 1.
nop
clr cs ; select slave .
mov r7, #8 ;set cycle data.
mov a, ram_datah ;one byte send acc.
wr_r_1:
clr clk ;clk out 0.
rlc a ;shift MSB to c.
mov data, c ;c to slave data.
nop
setb clk ;clk out 1.
nop
djnz r7, wr_r_1 ; one byte?
mov r7, #8 ;set cycle data.
mov a, ram_datal ;one byte send acc.
wr_r_2:
clr clk ;clk out 0.
rlc a ;shift MSB to c.
mov data, c ;c to slave data.
nop
setb clk ;clk out 1.
nop
djnz r7, wr_r_2 ; one byte?
nop
setb cs
pop r7
pop psw
pop acc
ret
;==========================================================
; write one command byte to spi.
;
;----------------------------------------------------------
write_command:
push acc
push psw
push r7
setb clk ;clk out 1.
setb cs
nop
clr cs ; select slave .
mov r7, #8 ;set cycle data.
mov a, command ;one byte send acc.
wr_c_1:
clr clk ;clk out 0.
rlc a ;shift MSB to c.
mov data, c ;c to slave data.
nop
setb clk ;clk out 1.
nop
djnz r7, wr_c_1 ; one byte?
nop
pop r7
pop psw
pop acc
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -