单片机实验P输入P1口输出和步进电机控制实验Word文档下载推荐.doc
《单片机实验P输入P1口输出和步进电机控制实验Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《单片机实验P输入P1口输出和步进电机控制实验Word文档下载推荐.doc(8页珍藏版)》请在冰豆网上搜索。
![单片机实验P输入P1口输出和步进电机控制实验Word文档下载推荐.doc](https://file1.bdocx.com/fileroot1/2022-10/7/bf564f9d-5560-4fdf-bba7-9b06dac105ad/bf564f9d-5560-4fdf-bba7-9b06dac105ad1.gif)
DELAY1:
MOVR7,#80H
DJNZR7,$
DJNZR6,DELAY1
查指令表可知MOV、DJNZ指令均需用两个机器周期,而一个机器周期时间长度为12/6.0MHZ,所以该段指令执行时间为:
((80+1)×
256+1)×
2×
(12÷
6000000)=132.1ms。
Y
N
R6设初值FFH
R7设初值FFH
R7-1=0否?
R6-1=0否?
返回
延时子程序
延时
P3.3真的高吗?
P3.3为低吗?
开始
A+1送P1口
循环
P3.3为高吗?
图1P3.3输入、P1口输出实验程序框图
图2实验电路原理图
2、步进电机控制实验
1)从键盘上输入正、反转命令,转速参数和转动步数显示在显示器上,CPU再读取显示器上显示的正、反转命令,转速级数(16级)和转动步数后执行。
转动步数减为零时停止转动。
2)步进电机驱动原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。
驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速,微电脑控制步进电机最适合。
执行键是否按下?
从键盘输入数据,数码管显示
(7D)内容计算延时
步距数-1,送显示缓冲区
步距数为0吗?
停止
顺时针转动一步
停止
显示缓冲区(7E)=1吗?
逆时针转动一部
根据显示缓冲区(7D)内容计算延时
步距数-1,送显示缓冲区
步距数为0吗?
图3步进电机控制实验程序框图
图4实验电路原理图
三、实验步骤及操作结果
(1)P3.3用插针连至K1,P1.0—P1.7用插针连至L1—L8。
(2)从起始地址0540H开始连续运行程序(输入0540后按EXEC键)。
(3)开关K1每拨动一次,L1—L8发光二极管按16进制方式加一点亮。
P3、P1口应用程序(源文件名:
H51S.ASM)。
汇编程序代码如下:
RG0540h
HA1S:
MOVA,#00H
HA1S1:
JBP3.3,HA1S1
;
判P3.3为低电平否
MOVR2,#20H
LCALLDELAY
调延时子程序
JBP3.3,HA1S1
再判P3.3为低电平否
HA1S2:
JNBP3.3,HA1S2
LCALLDELAY
JNBP3.3,HA1S2
;
判P3.3为高电平否
INCA;
加1
PUSHACC
CPLA
;
取反后送P1显示
MOVP1,A
POPACC
AJMPHA1S1;
DELAY:
PUSH02H;
DELAY1:
PUSH02H
DELAY2:
DELAY3:
DJNZR2,DELAY3
POP02H
DJNZR2,DELAY2
POP02H
DJNZR2,DELAY1
DJNZR2,DELAY
RET
END
2、步进电机控制实验
(1)步进电机插头插到实验系统J3插座中,P1.0—P1.3接到BA—BD插孔。
(2)在“P.”状态下,从始地址开始(0A30H)连续执行程序。
输入始地址后按EXEC键。
(3)在键盘上输入数字在显示器上显示,第一位为0表示正转,为1表示反转,第二位0—F为转速等级,第三到第六位设定步数,设定完按EXEC键,步进电机开始旋转。
(4)步进电机控制程序(源文件名:
H511S.ASM)。
汇编程序代码如下。
数字量FF送0832,启动D/A
判高电平时间到否?
数字量00送0832,启动D/A
判低电平时间到否?
高电平时间初值减1
置0832口地址
低电平时间初值加1
ORG0A30H
MONIT:
MOVSP,#50H
MOV7EH,#00H;
设步进电机正转标志显示在第一位
MOV7DH,#02H;
设步进电机速转控制值显示在第二位
MOVR0,#7CH;
设步距数值为8888,显示在第三到第六位
MOVA,#08H
MOVR4,#04H
MONIT1:
MOV@R0,A
DECR0
DJNZR4,MONIT1
MOVA,#7EH;
置显示位置标志
MOVDPTR,#1FFFH
MOVX@DPTR,A
MOV76H,#00H
MOV77H,#00H
KEYDISP0:
LCALLKEY
;
调显示键扫子程序
JCDATAKEY
转数字键处理
AJMPMONIT2
转功能键处理
DATAKEY:
LCALLDATAKEY1
DB79H,7EH
SJMPKEYDISP0
MONIT2:
CJNEA,#16H,KEYDISP0
不是执行键转
LCALLDISP;
调显示子程序
MOVA,7AH
取步距数送R6、R7
ANLA,#0FH
SWAPA
ADDA,79H
MOVR6,A
MOVA,7CH
ANLA,#0FH
ADDA,7BH
MOVR7,A
MOVA,7EH
CJNEA,#00H,MONIT4
判转动方向
MONIT3:
MOVP1,#03H;
顺时针转
LCALLDELAY0
LCALLMONIT5
MOVP1,#06H
MOVP1,#0CH
LCALLDELAY0
LCALLMONIT5
MOVP1,#09H
SJMPMONIT3
MONIT4:
MOVP1,#09H
逆时针转
MOVP1,#0CH
MOVP1,#06H
MOVP1,#03H
SJMPMONIT4
MONIT5:
DECR6
CJNER6,#0FFH,MONIT6
DECR7
CJNER7,#0FFH,MONIT6
判步距数到否
LJMPMONIT;
重新开始
MONIT6:
LCALLMONIT7
RET
MONIT7:
MOVR0,#79H
MOVA,R6
LCALLMONIT8
MOVA,R7
LCALLDISP
MONIT8:
MOVR1,A
ACALLMONIT9
MOVA,R1
SWAPA
MONIT9:
ANLA,#0FH
MOV@R0,A
INCR0
DELAY0:
MOVR0,#7DH
根据(7D)内容改变延时时间
MOVA,@R0
MOVR4,A
MOVR5,#80H
DJNZR5,DELAY2
DJNZR4,DELAY1 RET
DATAKEY1:
MOVR4,A
数字键处理子程序
MOVDPTR,#1FFFH
MOVXA,@DPTR
MOVR1,A
MOVA,R4
MOV@R1,A
CLRA
POP83H
POP82H
MOVCA,@A+DPTR
INCDPTR
CJNEA,01H,DATAKEY3
DECR1
CLRA
DATAKEY2:
PUSH82H
PUSH83H
MOVDPTR,#1FFFH
DATAKEY3:
MOVA,R1
SJMPDATAKEY2
KEY0:
MOVR6,#20H
数字键显示闪动程序
MOVXA,@DPTR
MOVR0,A
MOVA,@R0
MOVA,#10H
MOV@R0,A
KEY3:
LCALLKEYDISP
JNB0E5H,KEY2
DJNZR6,KEY3
MOVDPTR,#1FFFH
MOVR0,A
MOVA,R7
MOV@R0,A
KEY:
MOVR6,#50H
显示键扫子程序
KEY1:
JNB0E5H,KEY2
DJNZR6,KEY1
SJMPKEY0
KEY2:
MOVA,R6