




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机控制步进电机正反转的实际应用程序/*这是一个控制步进电机正反转的实际应用程序*/*选用的是三相步进电机驱动器,p14口线用做步进电机的脉冲控制*/*p13口线用做步进电机的方向控制。p15,p16,p17是光耦开关量输入*/*信号端,p20,p21,p22,p23与x25045看门狗存储器相连*/*k7,k8键是设定步进电机转动速度参数的加减键*/*k9是启动运行键,按一下k9,步进电机开始运行,直到p17口线有信号输入才停止*/*k10是停止键,任何时候按下k10都将停止步进电机当前的运行*/*k11是步进运行键,按一下,步进电机动一下*/*k12键是反向运行键,按一下,步进电机开始反向运行,知道p15口线有信号才停止*/*如果p16口线有信号输入,则只有k12键才起作用,其它键都没反应。*/START:do;$INCLUDE(REG51.DCL)DECLARE (addrl,n,I,j,ok,ds) byte; /*定义变量*/declare l(5) byte;declare (dat,data) byte at (30h);declare delay word;DECLARE ACO(11) BYTE CONSTANT (05h,9fh,23h,0bh,99h,49h,/*定义LED段码表*/41h,1fh,01h,09h,00h);declare si literally p21,sck literally p20; /*X25045囗线定义*/declare so literally p22,cs literally p23;dog:procedure; /* 初始化看门狗x25045 */cs=1;call time(1);cs=0;call time(1);cs=1;end dog;run:procedure; /*步进电机运行脉冲输出程序*/if ok=1 thencall dog;do;p14=0;call time(1);p14=1;call time(1);end;end run;DISPLAY:PROCEDURE(L0,L10); /*显示子程序*/DECLARE (L0,L10) BYTE; /*定义显示二位*/n=L10;n=aco(n); /*十位数BCD码译成段码*/sbuf=n; /*十位数送164显示*/do while ti=0; /*等待发送结束*/call dog; /*看门狗定时器复位*/end;n=L0;n=aco(n);sbuf=n; /*个位数送164显示*/do while ti=0;call dog;end;end display;outbyt: procedure(da); /*向看门狗存储器写入一字节*/declare (i,da) byte;j=da; /*将要写入的字节赋给临时变量J */do i=0 to 7; /*左移8位,送到口线si */sck=0;j=scl(j,1);si=cy;sck=1; /*每移一位数据,跟一个时钟信号*/end;end outbyt;inbyt: procedure; /* 从看门狗存储器读出一字节 */declare (i,di) byte;j=0;do i=0 to 7;sck=1;sck=0;cy=so;j=scl(j,1); /*从看门狗存储器读出一字节送入临时变量j*/end;dat=j;end inbyt;wrenable: procedure; /* 置看门狗写使能*/sck=0;cs=0; /* write enable command */call outbyt(06h); /* x25045 写使能指令06h */cs=1;sck=0;end wrenable;wrdisable: procedure; /* 置看门狗写禁止 */sck=0;cs=0; /* write disable command */call outbyt(04h);sck=0;cs=1;end wrdisable;wrregister: procedure; /* 写状态寄存器 */sck=0;cs=0;dat=01h; /* write register command */call outbyt(dat); /* 00h-1.4S, 20h-200MS, 10h-600MS, 30h-disable Wdog */call outbyt(00h); /* 设定看门狗定时时间 */;sck=0;cs=1;call time(200); /* wait to complete writting cycle */end wrregister;rdregister:procedure; /* 读看门狗状态寄存器 */sck=0;cs=0; /* register read command */call outbyt(05h);call inbyt; /* status register read in */sck=0;cs=1;end rdregister;wbyte:procedure; /* 看门狗存储器字节写入子程序 */declare comm byte;sck=0;cs=0;comm=02h; /* 写指令 02h */call outbyt(comm);call outbyt(addrl);call outbyt(dat); /* send one byte data to X25043 */cs=1;sck=0;call time(150);end wbyte;rbyte:procedure; /*看门狗存储器字节读出子程序 */declare comm byte;sck=0;cs=0;comm=03h; /* read command */call outbyt(comm);call outbyt(addrl);call inbyt; /* read one byte to */sck=0;cs=1;end rbyte;incdata: procedure; /* 参数修改-加键处理子程序+ */if p10=0 then /* 如果K7键按下*/do;do while p10=0; /* 等待键松开有效 */call dog; /* 此处必需调用看门狗复位子程序(喂狗),否则程序将被看门狗复位*/end;data=data+1; /* 设定值+1 */if data99 then data=1; /* 规定设定值的上限*/L(1)=data MOD 10; /*将设定值的十位数拆出来送给十位数显示变量L(1) */L(2)=data/10; /*将设定值的个位数拆出来送给个位数显示变量L(2) */call display(L(1),L(2); /* 将改变后的设定值送164显示出来*/call time(200); /* 延时 */call dog;call time(200);call dog;call wrenable; /* 置存储器写使能 */addrl=00h; /* 置存储器地址 */dat=l(1);call wbyte; /* 将变量L(1)的值写入存储器00h位置 */call wrenable;addrl=01h;dat=l(2);call wbyte; /* 将变量L(2)的值写入存储器01h位置 */end;end incdata;decdata: PROCEDURE; /* 参数修改-减键处理子程序- */IF p11=0 THEN /* k8 键处理子程序 */do;do while p11=0;call dog;end;DATA=DATA-1; /* 设定值-1 */if data=0 then data=99;L(1)=data MOD 10;L(2)=data/10;call display(l(1),l(2);call dog;call time(200);call dog;call time(200);call dog;call wrenable;addrl=00h;dat=l(1);call wbyte;call wrenable;addrl=01h;dat=l(2);call wbyte;end;END decdata;starton: PROCEDURE; /* start */declare sd byte;if p12=0 THEN /* K9键处理子程序 */do;do while p12=0;call dog;end;if p17=0 then ok=0; /* 如果p17 口线上有信号输入,则运行标志置0 (停止运行)*/p13=1; /* 置步进电机正向运转 */call time(200);call dog;do while ok=1; /* 当运行标志为1时,执行速度延时操作 */do sd= 0 to data; /* 根据设定值 data的数值延时来确定步进电机运行时的脉冲给定速度*/call dog;end;end;END starton;step: PROCEDURE; /* step */declare sd byte;p13=1; /* 置步进电机正向运转 */call time(200);call dog;IF p33=0 THEN /* k11键处理子程序 */do;if p17=0 then ok=0; /* 如果p17上有信号输入,则停止运行*/do while p33=0;do sd= 0 to data; /* 调用延时,调整步进电机的运行速度 */call dog;call time(2);end;call run;call dog;end;end;ok=0;END step;back: PROCEDURE; /* 反向运行处理子程序 */declare sd byte;IF p34=0 THENdo;do while p34=0;call dog;end;if p15=0 then ok=0; /* 反向运行时,如果遇到p15上有信号输入,则停止步进电机运行 */p13=0; /* 置步进电机反向运行 */call time(200);call dog;do while ok=1;do sd=0 to data; /*根据设定值调节步进电机的运行速度 */call dog;call time(2);end;call run;if (p15=0 or p32=0 ) then ok=0; /* p15 或 p32 口线任意一个有信号输入,停止运行 */end;end;END back;MAIN$PROGRAM: /* 初始化主程序 */ea=0; /* 关中断 */SCON=00h; /*置串口方式0 ,串行数据输出模式*/PCON=00h;tmod=11h;et0=1;enable; /* 开中断 (ea=1) */SCK=0;cs=1; /* 定义存储器口线初始状态 */call wrenable;call wrregister; /* 看门狗存储器 初始化 */call wrenable;call dog;p2=0ffh; /* 初始化各个口线的状态 */p1=0ffh;ok=0;p14=1;p32=1;p33=1;p34=1;p13=1;ADDRL=00h; /* 上电复位后从存储器中读出设定的速度值 */CALL rbyte;l(1)=dat;addrl=01h;call rbyte;l(2)=dat;DATA=L(1)+L(2)*10; /*将读出的值合并成十进制,存入变量data中 */* 以下是主循环程序 */LOOP:IF p10=0 THEN CALL incdat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit2DifferentfamiliesPartB(教学设计)-人教PEP版英语三年级上册
- 2025住宅楼购销合同(范本)
- 申请书入团范本
- 监理述职报告写作范本与技巧
- 2025年注会会计真题及答案解析
- 2025年乡村医生考试:常用药物使用与农村健康促进试题
- 2025年专升本艺术概论考试模拟卷(新后现代主义艺术流派对比分析试题)
- 2025年护士执业资格考试题库(内科护理学)护理科研与护理管理试题型
- 人教版新课标七年级上册历史与社会第三单元第四课《草原人家》说课稿(2份打包)
- 2 平方根与立方根说课稿初中数学北师大版2024八年级上册-北师大版2024
- 《北京人》(剧本全本)曹禺-(三幕剧)
- 组织细胞的适应
- 农业企业技术创新与国际市场竞争研究-洞察阐释
- 禁毒社工考试试题及答案
- 2025-2030年中国教辅书市场发展趋势与前景展望研究报告
- TCECS24-2020钢结构防火涂料应用技术规程
- 养老机构膳食服务基本规范
- 银行业风险管理知识题库及案例分析题集
- 雨季防汛防洪隐患排查制度
- 各工种操作规程
- 销售部销售激励方案
评论
0/150
提交评论