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

2019-04-15 17:57发布

  期末考完试无聊,整理整理本学期的单片机学习经历。本系列包含吉林大学单片机课程的三、四、五、六、八次实验的详细教程及可运行代码(原创)。   写这个教程是为了向对单片机不感兴趣和学习过程中卡住的童鞋提供一条坦途,可能你只是想拿个成绩,亦或是想认真学习却卡在某个点上,都可以参考本教程,大佬请跳过。   单片机的前两个实验没代码,都是基础知识学习(软件的使用什么的),就没必要写了,直接从实验三开始。   实验三要求——默认整圈旋转,按下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  若有问题请斧正,欢迎留言交流。(转载请注明)