?? main.asm
字號(hào):
//========================================================================//
// 電子設(shè)計(jì)大賽程序 //
// 功能:初始化061,8279,一些功能函數(shù)(DRIVERS.ASM) //
// Designed by lzq ,V group //
// E-mail: lzqtim@tom.com //
// Date: 2003.8.20 //
// Last modified Date: 2003.9.14 //
//
////////////////////////////////////////////////////////////////////////////
.INCLUDE HARDWARE.ASM
.EXTERNAL _SP061_INIT
.external delay
.external TurnLeft,TurnRight,Forward,Backward,Stop,F_TestState,TestObjectFlag
.external CPointFlag,F_Pwm,delay,Time5SecFlag,LastMetalFlag
.iram
.var count=0
.var save = 0
.var Start = 0
SET_IOA_IN: .MACRO //USING R1 FOR TEMP
R1 = 0x00ff
[P_IOA_Dir] = R1
R1 = 0xFFFF
[P_IOA_Attrib] = R1
.ENDM
SET_IOA_OUT: .MACRO //USE R1 FOR TEMP
R1 = 0xFFFF
[P_IOA_Attrib] = R1
[P_IOA_Dir] = R1
.ENDM
.code
.public _main
_main:
//int off
CALL _SP061_INIT
// call TurnLeftNoPwm
// call Backward
// call delay
// call TurnRight
// irq on
MainDeadLop:
r1 = [Time5SecFlag]
test r1,1
jz LOP
jmp MainDeadLop
LOP:
r1 = [LastMetalFlag] ///[CPointFlag]
test r1,1
jz QuitTestObject
pc = ObjectMode
QuitTestObject:
pc = NoObjectExit
ObjectMode:
r1 = [TestObjectFlag]
cmp r1,0
je NoObject
pc = Go
NoObject:
pc = NoObjectExit
Go:
r1 = [P_INT_Ctrl]
r2 = 0xfffd
r1 = r1 & r2
[P_INT_Ctrl ]= r1
[P_INT_New ] = r1
cmp r1,3
je MidObject
pc = Next2Status
MidObject:
r1 = 0
[TestObjectFlag] = r1
call Stop
call Backward
call TestDistance1
// r1 = [TestObjectFlag]
// cmp r1,0
// jne
// call F_Delay_1
call TurnLeft
call delay
call delay
call ForwardNoPwm
call TestDistance2
// call F_Delay_1
// call stop
call TurnRightNoPwm
call ForwardNoPwm
call TurnRightNoPwm
// call SearchLight
call StopLong
pc = NoObjectExit
Next2Status:
cmp r1,1
je LeftObject
pc = LastStatus
LeftObject:
r1 = 0
[TestObjectFlag] = r1
pc = NoObjectExit
LastStatus:
r1 = 0
[TestObjectFlag] = r1
NoObjectExit:
pc = LOP
.PUBLIC F_Delay //傳入?yún)?shù)為1延時(shí)2.5ms
F_Delay: .proc
int off
r3 = 200
Loop:
push r1,r5 to [sp];
bp=sp+3
r1=[bp+1];
R1=200;
L_Loop1:
R2=1248;
nop;
L_Loop2:
R2-=1;
JNZ L_Loop2;
R1-=1;
JNZ L_Loop1;
pop r1,r5 from [sp];
irq on
r3 -= 1
cmp r3,0
jne Loop
retf
.endp
.PUBLIC F_Delay_1 //傳入?yún)?shù)為1延時(shí)2.5ms
F_Delay_1: .proc
int off
push r1,r5 to [sp];
bp=sp+3
r1=[bp+1];
R1=20;
L_Loop1_1:
R2=1248;
nop;
L_Loop2_1:
R2-=1;
JNZ L_Loop2_1;
R1-=1;
JNZ L_Loop1_1;
pop r1,r5 from [sp];
irq on
retf
.endp
.public TurnLeftNoPwm
TurnLeftNoPwm: .proc
push r1,r2 to [sp]
r1 = 0
r2 = 0
call F_Pwm
SET_IOA_IN;
r1 = 0x000f
r2 = [P_IOA_Data]
r1 = r1 | r2
R2 = r1 & 0xFFF5
SET_IOA_OUT
[P_IOA_Data] = R2
// r1 = [P_IOB_Data]
// r2 = 0x0100
// r1 = r1 | r2
// [P_IOB_Data] = r1
r1 = 0xa000
r2 = 0x00f0
call F_Pwm
pop r1,r2 from [sp]
retf
.endp
.public TurnRightNoPwm
TurnRightNoPwm: .proc
push r1,r2 to [sp]
r1 = 0
r2 = 0
call F_Pwm
SET_IOA_IN;
r1 = 0x000f
r2 = [P_IOA_Data]
r1 = r1 | r2
R2 = r1 & 0xFFFa
SET_IOA_OUT
[P_IOA_Data] = R2
r1 = [P_IOB_Data]
r2 = 0x0100
r1 = r1 | r2
[P_IOB_Data] = r1
pop r1,r2 from [sp]
retf
.endp
.public ForwardNoPwm
ForwardNoPwm: .proc
push r1,r2 to [sp]
r1 = 0
r2 = 0
call F_Pwm
SET_IOA_IN;
r1 = 0x000f
r2 = [P_IOA_Data]
r1 = r1 | r2
R2 = r1 & 0xFFF9
SET_IOA_OUT
[P_IOA_Data] = R2
// r1 = [P_IOB_Data]
// r2 = 0x0100
// r1 = r1 | r2
// [P_IOB_Data] = r1
r1 = 0xa000
r2 = 0x0100
call F_Pwm
pop r1,r2 from [sp]
retf
.endp
.public StopLong
StopLong: .proc
call Stop
finish:
int off
nop
jmp finish
retf
.endp
.public TestDistance1
TestDistance1: .proc
push r1 to [sp]
r3 = [P_TimerB_Data]
[Start]= r3
r1 = 0
callop:
call Cal
cmp r3,80
jb callop
pop r1 from [sp]
retf
.endp
.public TestDistance2
TestDistance2: .proc
push r1 to [sp]
r3 = [P_TimerB_Data]
[Start]= r3
r1 = 0
callop1:
call Cal
cmp r3,50
jb callop1
pop r1 from [sp]
retf
.endp
.public Cal
Cal: .proc
r1 = [P_TimerB_Data]
r3 = [Start]
r1 = r1 - r3
mr = r1*r2,us
retf
.endp
.end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -