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

📄 kma2b.asm

📁 set kma2b to command model
💻 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 + -