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

📄 步进电机控制试验.asm

📁 步进电机控制试验
💻 ASM
字号:
;步进电机控制试验
;试验准备:用连接线分别将CN4的P12,P13,P14,P15端子与CN1的LED1
;LED2,LED3,LED4相连.
;运行此程序,观察步进电机的转速和旋转方向,LED的变化情况.

$INCLUDE (C8051F020.INC)

CPTIME  EQU 4

X DATA 07FH    			;循环控制变量X,I,J和
                                ;延时参数DELAYTT
I DATE 07EH
J DATA 07DH
DELAYTT DATA 07CH
COUNT1MS DATE 07BH

  ORG 0000H
STRT:
  AJMP MAIN
  ORG 000BH
TIMER0_ISR:             	;定时器0中断服务程序
  PUSH ACC              	;寄存器A入栈
  MOV TH0,#0DCH         	;定时器重新装入初值
  MOV TL0,#66H
  MOV A,COUNT1MS        	;如果COUNT1MS不是0则减一
  JZ RETURN1
  DEC COUNT1MS
RETURN1:
  POP ACC                 	;寄存器A出栈
  RETI  

MAIN:                   	;主程序
  MOV WDTCN,#0DEH       	;关看门狗
  MOV WDTCN,#0ADH
  LCALL SYSCLK_INIT 		;初始化时钟
  LCALL TIMER0_INIT 		;初始化定时器
  LCALL PORT_INIT   		;初始化端口
  LCALL SPI0_INIT   		;初始化SPI0
  ORL CPT1CN,#80H 		;使能比较器1
  MOV REF0CN,#03H 		;使能片内参考电压
  ORL DAC0CN,#80H 		;使能DAC0
  M0V DAC0H,#00H  
  MOV DAC0L,#00H
  SETB EA         		;开中断
  LCALL TESTSTEPM
  RET  

DELAYXMS:               	;延时(COUNT1MS)ms,输入参数在
                                ;变量COUNT1MS,无返回值
  MOV A,COUNT1MS
  JNZ DELAYXMS
  RET

DELAY1S:                	;延时(DELAYTT)秒
  MOV COUNT1MS,#200
  LCALL DELAYXMS
  MOV COUNT1MS,#200
  LCALL DELAYXMS
  MOV COUNT1MS,#200
  LCALL DELAYXMS
  MOV COUNT1MS,#200
  LCALL DELAYXMS
  MOV COUNT1MS,#200
  LCALL DELAYXMS
  DJNZ DELAYTT,DELAY1S
  RET

SYSCLK_INIT:        		;时钟初始化子程序,
                                ;没有输入参数和返回值
  M0V OSCXCN,#67H   		;选择外部晶体振荡器方式11.0592MHz
  CLR A
  DJNZ ACC,$
  DJNZ ACC,$
WAIT_OSC_SETTLE1:    		;查询XTLVLD '0'->'1'?
  MOV A,OSCXCN
  JNB ACC.7,WAIT_OSC_SETTLE1
  MOV OSCICN,#88H   		;换到外部振荡器,允许时钟丢失检测
  RET

PORT_INIT:          		;端口初始化子程序,
                                ;没有输入参数和返回值
  MOV XBR0,#07H     		;允许SMBus,SPIO和UART0
  MOV XBR1,#00H
  MOV XBR2,#44H     		;允许交叉开关和端口I/O弱上拉
  MOV EMI0CF,#27H   		;EMIF在P4-P7,EMIF工作在
                                ;数据/地址复用方式,
                                ;不带块选择的分片方式
                    		;ALE高和ALE低脉冲宽度是4个SYSCLK
  MOV EMI0TC,#21H   		;外部存储器时序控制
  MOV P74OUT,#0FFH  		;端口P7-P4为推挽方式
  MOV P0MDOUT,#15H  		;端口0输出方式设置
  ORL P1MDOUT,#3CH  		;端口1输出方式设置,
                                ;P1.2-P1.5为推挽输出
  ANL P1,#0C3H      		;P1.2-P1.5置零
  RET

SPI0_INIT:          		;串行外设接口总线初始化子程序,
                                ;没有输入参数和返回值
  MOV SPI0CFG,#07H  		;在SCK第一个上升沿采样,8位数据字
  ORL SPI0CFG,#0C0H 		;时钟极性:空闲状态是高电平
  MOV SPI0CN,#03H   		;主模式,SPI使能,清除标志位
  MOV SPI0CKR,#5    		;SPI时钟<=8Mhz
  RET
  
TIMER0_INIT:            	;定时器0初始化子程序,
                                ;没有输入参数和返回值
  ORL CKCON,#08H
  ORL TMOD,#01H         	;16位定时器
  MOV COUNT1MS,#10
  CLR TR0               	;停止定时器
  MOV TH0,#0DCH         	;1MS定时
  MOV TL0,#66H  
  SETB TR0              	;启动定时器
  ORL IE,#02H
  RET      
  
TESTSTEPM:                   	;子程序TESTSTEPM
                                ;没有输入参数和返回值
  MOV X,#0
LOOPX:
  SETB P2.7
  MOV I,#0
LOOPI:  
  MOV J,#0
LOOPJ:
  MOV DPTR,#FTAB
  MOV A,J
  MOVC A,@A+DPTR
  MOV P1,A
  MOV A,I
  MOV B,#10
  DIV AB
  MOV R0,A
  M0V A,#20
  SUBB A,R0
  MOV B,#CPTIME
  MUL AB
  MOV COUNT1MS,A
  LCALL DELAYXMS
  INC J
  MOV A,J
  CJNE A,#4,LOOPJ
  INC I
  MOV A,I
  CJNE A,#100,LOOPI
  
  MOV I,#0
LOOPI2:
  MOV J,#0
LOOPJ2:
  MOV DPTR,#FTAB
  MOV A,J
  MOVC A,#A+DPTR
  MOV P1,A  
  MOV A,#10
  MOV B,#CPTIME
  MUL AB
  MOV COUNT1MS,A
  LCALL DELAYXMS
  INC J
  MOV A,J
  CJNE A,#4,LOOPJ2
  INC I
  MOV A,I
  CJNE A,#100,LOOPI2
  
  MOV I,#0
LOOPI3:
  MOV J,#0
LOOPJ3:
  MOV DPTR,#FTAB
  MOV A,J
  MOVC A,@A+DPTR
  MOV P1,A  
  MOV A,I
  MOV B,#10
  DIV AB
  MOV R0,A
  MOV A,#10
  ADD A,R0
  MOV B,#CPTIME
  MUL AB
  MOV COUNT1MS,A
  LCALL DELAYXMS
  INC J
  MOV A,J
  CJNE A,#4,LOOPJ3
  INC I
  MOV A,I
  CJNE A,#100,LOOPI3
  
  CLR P2.7      
  MOV I,#0
LOOPII:  
  MOV J,#0
LOOPJJ:
  MOV DPTR,#CTAB
  MOV A,J
  MOVC A,@A+DPTR
  MOV P1,A
  MOV A,I
  MOV B,#10
  DIV AB
  MOV R0,A
  MOV A,#20
  SUBB A,R0
  MOV B,#CPTIME
  MUL AB
  MOV COUNT1MS,A
  LCALL DELAYXMS
  INC J
  MOV A,J
  CJNE A,#4,LOOPJJ
  INC I
  MOV A,I
  CJNE A,#100,LOOPII
  
  MOV I,#0
LOOPII2:
  MOV J,#0
LOOPJJ2:
  MOV DPTR,#CTAB
  MOV A,J
  MOVC A,@A+DPTR
  MOV P1,A  
  MOV A,#10
  MOV B,#CPTIME
  MUL AB
  MOV COUNT1MS,A
  LCALL DELAYXMS
  INC J
  MOV A,J
  CJNE A,#4,LOOPJJ2
  INC I
  MOV A,I
  CJNE A,#100,LOOPII2
  
  MOV I,#0
LOOPII3:
  MOV J,#0
LOOPJJ3:
  MOV DPTR,#CTAB
  MOV A,J
  MOVC A,@A+DPTR
  MOV P1,A  
  MOV A,I
  MOV B,#10
  DIV AB
  MOV R0,A
  MOV A,#10
  ADD A,R0
  MOV B,#CPTIME
  MUL AB
  MOV COUNT1MS,A
  LCALL DELAYXMS
  INC J
  MOV A,J
  CJNE A,#4,LOOPJJ3
  INC I
  MOV A,I
  CJNE A,#100,LOOPII3
  
  INC X
  MOV A,X
  CJNE A,#5,LOOPXX
  
  SETB P2.7
  SJMP RETURN0
LOOPXX:
  LJMP LOOPX
RETURN0:  
  RET  

FTAB: 
  DB 0C7H,0CBH,0D3H,0E3H  	;正方向A-B-C-D-A-...
CTAB: 
  DB 0C7H,0E3H,0D3H,0CBH  	;反方向A-D-C-B-A-...
END

⌨️ 快捷键说明

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