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

📄 main.asm

📁 基于凌阳61和pwm电机实现的智能车总程序
💻 ASM
字号:
//========================================================================//
//                     电子设计大赛程序                                   //                           
//  功能:初始化061,8279,一些功能函数(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               //传入参数为1延时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               //传入参数为1延时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
  r2 = 4
  r1 = [P_TimerB_Data]
  r3 = [Start]
  r1 = r1 - r3
  mr = r1*r2,us
retf
.endp

.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -