步进电机控制试验

源代码在线查看: 步进电机控制试验.asm

软件大小: 3 K
上传用户: wuqiweipp
关键词: 步进电机控制
下载地址: 免注册下载 普通下载 VIP

相关代码

				;步进电机控制试验
				;试验准备:用连接线分别将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时钟				  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			

相关资源