2022年步进电动机驱动程序 .pdf
步进电机正转loop:mov R3,#0FFh ;30h送 ff即-1 main:INC R3 mov a,R3 tt:MOV DPTR,#TAB MOVC A,A+DPTR MOV P1,A ;送显示 mov r7,#5 dec r7 lcall delay ;延时一段时间 cjne a,#06H,main ;如果是最后一个数据重新开始 ljmp loop ;否则 R3 清除 ret TAB:DB 03H,09H,0CH,06H;步进电机正转表 DELAY:;延时程序MOV R5,#255 D3:MOV R2,#25 D4:DJNZ R2,D4 DJNZ R5,D3 RET ;步进电机控制程序p3.2 正转,p3.3反转,p3.4 停止步进电机接p1.0p1.1p1.2p1.3 org 00h stop:orl p1,#0ffh ;步进电机停止loop:jnb p3.2,for2 ;如果 p3.2 按下正转 jnb p3.3,rev2 ;如果 p3.3 按下反转 jnb p3.4,stop1 ;如果 p3.4 按下停止 jmp loop ;反复监测键盘for:mov r0,#00h ;正转到 tab 取码指针初值for1:mov a,r0 ;取码 mov dptr,#table ;movc a,a+dptr jz for ;是否到了结束码00h cpl a ;把 acc 反向 mov p1,a ;输出到 p1 开始正转 jnb p3.4,stop1 ;如果 p3.4 按下停止 jnb p3.3,rev2 ;如果 p3.3 按下反转 call delay ;转动的速度 inc r0 ;取下一个码 jmp for1 ;继续正转rev:mov r0,#05h ;反转到 tab 取码指针初值rev1:mov a,r0 mov dptr,#table ;取码 movc a,a+table jz rev ;是否到了结束码00h cpl a ;把 acc 反向 mov p1,a ;输出到 p1 开始反转 jnb p3.4,stop1 ;如果 p3.4 按下停止 jnb p3.3,rev2 ;如果 p3.3 按下反转 call delay ;转动的速度 inc r0 ;取下一个码名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 8 页 -jmp rev1 ;继续反转stop1:call delay ;按 p3.4 的消除抖动 jnb p3.4,$;p3.4放开否?call delay ;放开消除抖动 jmp stop for2:call delay ;按 p3.2 的消除抖动 jnb p3.2,$;p3.2放开否?call delay ;放开消除抖动 jmp for rev2:call delay ;按 p3.3 的消除抖动 jnb p3.3,$;p3.3放开否?call delay ;放开消除抖动 jmp rev delay:mov r1,#40 ;步进电机的转速20ms d1:mov r2,#248 djnz r2,$djnz r1,d1 ret table:db 03h,09h,0ch,06h ;正转表 db 00 ;正转结束 db 03h,06h,0ch,09h ;反转 db 00 ;反转结束 end;步进电机正转,反转各3 圈org 00h x1:mov r3,#250 start:mov r0,#00h start1:mov p1,#0ffh mov a,r0 mov dptr,#table movc a,a+dptr jz start cpl a mov p1,a call delay inc r0 djnz r3,start1 mov r3,#250 start2:mov p1,#0ffh mov r0,#05 start3:mov a,r0 mov dptr,#table movc a,a+dptr jz start2 cpl a mov p1,a call delay 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -inc r0 djnz r3,start3 jmp x1 delay:mov r5,#40;延时。d1:mov r6,#10 d2:mov r7,#18 djnz r7,$djnz r6,d2 djnz r5,d1 ret table:db 03h,09h,0ch,06h db 00 db 06h,0ch,09h,03h db 00 end ;步进电机正反快慢程序org 00h x1:mov r3,#48 ;一圈 48 步start:mov r0,#00h ;正转取码初值start1:mov p1,#0ffh ;先停止mov a,r0 mov dptr,#table movc a,a+dptr jz start ;是否到了结束码00?cpl a mov p1,a ;输出运转call delay ;调用慢速的延时转动inc r0 ;取码指针加1 取下一个码djnz r3,start1 ;是否走了 48步?mov r3,#48 ;是则重新设定48 步start2:mov p1,#0ffh mov r0,#05 ;逆转的取码初值start3:mov a,r0 mov dptr,#table movc a,a+dptr jz start2 cpl a mov p1,a call delay2 inc r0 djnz r3,start3 jmp x1 ;重复开始 DELAY:;延时程序(慢速)MOV R7,#255 D1:MOV R6,#50 D2:DJNZ R6,D2 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -DJNZ R7,D1 RET DELAY2:;延时程序(快速)MOV R5,#255 D3:MOV R2,#25 D4:DJNZ R2,D4 DJNZ R5,D3 RET table:db 03h,09h,0ch,06h ;正转表db 00 db 06h,0ch,09h,03h ;反转表db 00 end ;遥控电机程序,按遥控器 0-9 步进电机正转0-9 步,按遥控器11-19 步进电器分别反转;0-9步,同时数码管分别显示当前的数字!org 00h JMP MAIN ORG 30H MAIN:MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH START:JB P3.7,$;等待遥控信号出现SB:MOV R4,#8 ;8毫秒为高电平错误SBA:MOV R5,#250 SBB:JB P3.7,SXB1 DJNZ R5,SBB DJNZ R4,SBA MOV R4,#2 JMP SBC SXB1:MOV R5,#5 SXB2:;去掉 20US的尖峰干扰信号 JNB P3.7,SBB DJNZ R5,SXB2 JMP START SBC:MOV R5,#250 SB1:JB P3.7,SB2 ;2MS内不为高电平错误(监测9MS的低电平引导码)DJNZ R5,SB1 DJNZ R4,SBC JMP START 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 8 页 -SB2:;去掉 20US的尖峰干扰信号 MOV R5,#5 SB2_A:JNB P3.7,SB1 DJNZ R5,SB2_A MOV R4,#3 SB2_1:MOV R5,#250 SB3:;监测 4.5MS高电平,如3MS内出现低电平错误 JNB P3.7,SXC DJNZ R5,SB3 DJNZ R4,SB2_1 MOV R4,#2 JMP SB3_1 SXC:;去掉 20US的尖峰干扰信号 MOV R5,#5 SXC1:JB P3.7,SB3 DJNZ R5,SXC1 JMP START SB3_1:;监测 4.5MS高电平,如5MS 内不为低电平错误 MOV R5,#250 SB3_2:JNB P3.7,SB4 DJNZ R5,SB3_2 DJNZ R4,SB3_1 JMP START SB4:;去掉 20US的尖峰干扰信号 MOV R5,#5 SB4_1:JB P3.7,SB3_2 DJNZ R5,SB4_1 MOV R1,#1AH ;设定 1AH为起始 RAM 区 MOV R2,#4 PP:MOV R3,#8 JJJJ:MOV R5,#250 JJJJ2:;1MS内不为低电平错误 JB P3.7,JJJJ3 DJNZ R5,JJJJ2 JMP START JJJJ3:LCALL YS1 ;高电平开始后用882 微秒的时间尺去判断信号此时的高低电平状态 MOV C,P3.7 ;将 P3.7 引脚此时的电平状态0 或 1 存入 C中 JNC UUU ;如果为 0 就跳转到 UUU MOV R5,#250 JJJJ4:JNB P3.7,UUU NOP DJNZ R5,JJJJ4 JMP START UUU:MOV A,R1 ;将 R1中地址的给A RRC A ;将 C中的值 0 或 1 移入 A中的最低位 MOV R1,A ;将 A中的数暂时存放在R1中 DJNZ R3,JJJJ ;接收地址码的高8 位名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 8 页 -INC R1 ;对 R1中的值加 1,换成下一个RAM DJNZ R2,PP ;接收完 16 位地址码和8 位数据码和8 位数据反码,存放在1AH/1BH/1CH/1DH的 RAM 中;以下对代码是否正确和定义进行识别 MOV A,1AH;比较高 8 位地址码 XRL A,#00000000B;判断 1AH的值是否等于00000000,相等的话A为 0 JNZ EXIT;如果不相等说明解码失败退出解码程序 MOV A,1BH;比较低 8 位地址 XRL A,#11111111B;再判断高 8 位地址是否正确 JNZ EXIT;如果不相等说明解码失败退出解码程序 LCALL YS3 MOV A,1CH;比较数据码和数据反码是否正确?CPL A XRL A,1DH ;将 1CH的值取反后和1DH比较 不同则无效丢弃,核对数据是否准确 JNZ EXIT;如果不相等说明解码失败退出解码程序 LCALL YS3 CLR P2.6 ;选中数码管 CLR P3.3;解码成功喇叭响?AJMP BIJIAO;判断在 118 毫秒内是否有连发码AA:MOV R1,#25 XX:ACALL YS2 JNB P3.7,HH;跳转到判断连发代码是否正确的程序段 DJNZ R1,XX EXIT:;对所有端口清零 AJMP START;连发码判断程序段-HH:MOV R6,#4 S:ACALL YS1;调用 882 微秒延时子程序 JB P3.7,EXIT;延时 882 微秒后判断P3.7 脚是否出现高电平如果有就退出解码程序 DJNZ R6,S;重复 4 次,目的是确认连发码的低电平信号波形 JNB P3.7,$;等待高电?LCALL YS3 AJMP AA BIJIAO:MOV R0,#18;一共 18 个按键 MOV DPTR,#TAB_REM;遥控键值查表LOOKUP_1:MOV A,R0 ;查表偏移量 MOVC A,A+DPTR XRL A,1cH ;比较键值 JZ REM_BAK0 ;相等转移 DJNZ R0,LOOKUP_1 ;直到 18 个健比较完毕 JMP EXIT ;都不对退出REM_BAK0:;键值处理 MOV A,R0 ;R0 MOV R1,A ;SUBB A,#9 ;如果大于 9 则反转并将值减去9 JC REM_BAK1 ;小余或等于9 到正转 INC A ;加 1 MOV R1,A ;查显示码表 MOV DPTR,#TABLE1 ;MOVC A,A+DPTR 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 8 页 -MOV P0,A ;送显示 CLR P2.6 ;开显示REM_REV:;反转程序 CALL REV CALL delay ;转速 DJNZ R1,REM_REV ;转动的步数到了停止 JMP AA REM_BAK1:;正转程序 NOP MOV A,R1 ;按键数值判断执 MOV DPTR,#TABLE1 ;查显示码表 MOVC A,A+DPTR MOV P0,A ;送显示 CLR P2.6 ;开显示REM_FOR:;正转 CALL FOR CALL DELAY DJNZ R1,REM_FOR JMP AA for:mov r0,#00h ;正转到 tab 取码指针初值for1:mov a,r0 ;取码 mov dptr,#table ;movc a,a+dptr jz FOREXT ;是否到了结束码00h cpl a ;把 acc 反向 mov p1,a ;输出到 p1 开始正转 call delay ;转动的速度 inc r0 ;取下一个码 jmp for1 ;继续正转rev:mov r0,#05h ;反转到 tab 取码指针初值rev1:mov a,r0 mov dptr,#table ;取码 movc a,a+table jz FOREXT ;是否到了结束码00h cpl a ;把 acc 反向 mov p1,a ;输出到 p1 开始反转 call delay ;转动的速度 inc r0 ;取下一个码 jmp rev1 ;继续反转FOREXT:RET YS1:MOV R4,#20 ;延时子程序1,精确延时882 微秒 D1:MOV R5,#20 DJNZ R5,$DJNZ R4,D1 RET YS2:MOV R4,#10 ;延时子程序2,精确延时4740 微秒 D2:MOV R5,#235 DJNZ R5,$DJNZ R4,D2 RET YS3:MOV R4,#2;延时程序 3,精确延时1000 微秒名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 8 页 -D3:MOV R5,#248 DJNZ R5,$DJNZ R4,D3 RET TAB_REM:;遥控的键值 DB 00H DB 10H,03H,01H,06H,09H,1DH,1FH,0DH,19H DB 11H,15H,17H,12H,16H,4CH,40H,48H,04H delay:mov r3,#40 ;步进电机的转速20ms m3:mov r2,#248 djnz r2,$djnz r3,m3 ret TABLE1:db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h;数码管的码表 ;0 1 2 3 4 5 6 7 8 9 table:db 03h,09h,0ch,06h ;正转表 db 00 ;正转结束 db 03h,06h,0ch,09h ;反转 db 00 ;反转结束 end 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 8 页 -