吉林大学单片机实验课实验三——步进电机原理及应用

  期末考完试无聊,整理整理本学期的单片机学习经历。本系列包含吉林大学单片机课程的三、四、五、六、八次实验的详细教程及可运行代码(原创)。

  写这个教程是为了向对单片机不感兴趣和学习过程中卡住的童鞋提供一条坦途,可能你只是想拿个成绩,亦或是想认真学习却卡在某个点上,都可以参考本教程,大佬请跳过。

  单片机的前两个实验没代码,都是基础知识学习(软件的使用什么的),就没必要写了,直接从实验三开始。

  实验三要求——默认整圈旋转,按下S1后旋转半圈后反向旋转半圈,如此重复直到松开S1,松开后以仍以默认方式旋转。旋转过程中将步数显示在数码管上。

  程序整体思路比较简单,使用一个寄存器记录步数(双四拍),然后根据记录执行相应的代码段,向IN1和IN2输出对应的脉冲即可,数码管的显示方式为串入并出,通过P4.4(时钟口)和P4.5(数据口)分别输入24位数据,字码就可以稳定显示,这种显示方式不同于微机原理实验的数码管显示方式,这种方式只需要传入一次三个数码管的数据即可稳定显示,更改时再传入24位数据即可替换先前的字码。

    ORG 0000H
	LJMP	START
	ORG	000BH
	LJMP T0IN
	TABLE:
	DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字码
	ORG 0040H
	START:
	P4 EQU 0C0H
	P4SW EQU 0BBH
	SLED EQU P4.5
	SCLK EQU P4.4
	HCONT EQU 10
	TCOUNT EQU 6
	F1 EQU PSW.1

	MOV P4SW,#30H
	SETB P1.1
	SETB P1.4
	MOV	SP,#30H
	MOV	TMOD,#01H
	MOV	IE,#82H
	MOV	IP,#02H
	MOV	TH0,#3CH
	MOV	TL0,#0B0H
	MOV	TCON,#10H
	
	MOV R0,#TCOUNT
	MOV R1,#01H
	MOV	R2,#00H
	MOV R3,#HCONT
	CLR F0
	CLR F1
	DISPLAY:
	MOV P0,R2
	
	MOV	DPTR,#TABLE
	MOV	B,#100
	MOV	A,R2
	DIV	AB
	MOVC A,@A+DPTR
	MOV	R4,A
	MOV	A,B
	MOV B,#10
	DIV AB
	MOVC A,@A+DPTR
	MOV	R5,A
	MOV	A,B
	MOVC A,@A+DPTR
	MOV R6,A
	MOV A,R6
	ACALL PUTLOOP
	MOV A,R5
	ACALL PUTLOOP
	MOV A,R4
	ACALL PUTLOOP
	
	CHECK:
	CJNE A,#0FFH,CHECK
	LJMP DISPLAY
	
	PUTLOOP:
	MOV	R7,#08H
	SHIFT:
	CLR SCLK
	RLC A
	MOV	SLED,C
	SETB SCLK
	DJNZ R7,SHIFT
	RET
	
	T0IN:
	CLR TR0
	DJNZ R0,COUNT
	MOV	R0,#TCOUNT
	JNB	P3.6,STEP2
	JMP	STEP1
	COUNT:
	MOV	TH0,#00H
	MOV TL0,#00H
	SETB TR0
	RETI
	
	STEP1:
	INC R2
	CLR F0
	CJNE R1,#01H,C2
	LJMP S0
	C2:
	CJNE R1,#02H,C3
	LJMP S1
	C3:
	CJNE R1,#03H,C4
	LJMP S2
	C4:
	LJMP S3
	
	STEP2:
	INC R2
	SETB F0
	LC1:
	CJNE R1,#01H,LC2
	LJMP S0
	LC2:
	CJNE R1,#02H,LC3
	LJMP S1
	LC3:
	CJNE R1,#03H,LC4
	LJMP S2
	LC4:
	LJMP S3
	
	SEND:
	JB	F0,HALF
	INC	R1
	CJNE R1,#05H,SRET
	MOV	R1,#01H
	JMP	SRET
	HALF:
	JB F1,HALF1
	INC	R1
	CJNE R1,#05H,HALFCOUNT
	MOV	R1,#01H
	HALFCOUNT:
	DJNZ R3,SRET
	MOV	R3,#HCONT
	CPL F1
	JMP SRET
	HALF1:
	DJNZ R1,HALF1COUNT
	MOV	R1,#04H
	HALF1COUNT:
	DJNZ R3,SRET
	MOV	R3,#HCONT
	CPL F1
	
	SRET:
	MOV A,#0FFH
	JMP COUNT
	
	S0:
	CLR	P3.2
	SETB C
	MOV P1.0,C
	JMP	SEND
	S1:
	SETB P3.2
	SETB C
	MOV P1.0,C
	JMP	SEND
	S2:
	SETB P3.2
	CLR C
	MOV P1.0,C
	JMP	SEND
	S3:
	CLR P3.2
	CLR C
	MOV P1.0,C
	JMP	SEND
	
	WAIT:
	MOV R0,#0AFH
	L1:
	MOV	R1,#0FFH
	L2:
	DJNZ R1,L2
	DJNZ R0,L1
	RET
	END

 若有问题请斧正,欢迎留言交流。(转载请注明)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值