千家信息网

28BYJ-48步进电机掌握程序根底

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,处理了精度成绩,让我们再次回到我们的电机掌握程序上吧。下面给出的两个例程都不是适用的程序,为什么?由于程序中存在大段的延时,而在延时的时分是什么其它的事都干不了的,想想第二个程序,整整 200 秒什么
千家信息网最后更新 2026年10月31日28BYJ-48步进电机掌握程序根底

处理了精度成绩,让我们再次回到我们的电机掌握程序上吧。下面给出的两个例程都不是适用的程序,为什么?由于程序中存在大段的延时,而在延时的时分是什么其它的事都干不了的,想想第二个程序,整整 200 秒什么其余事都干不了,这在实践的掌握零碎中是相对不许可的。那么怎样改革一下呢?当然照样用准时中缀来完成了,既然每一个节奏继续工夫是2ms,那我们直接用准时器准时 2ms 来刷新节奏就行了。改革后的程序如下:

                       #include  unsigned long beats = 0; //电机迁移转变节奏总数 void StartMotor(unsigned long angle); void main(){ EA = 1; //使能总中缀 TMOD = 0x01; //设置 T0 为形式 1 TH0 = 0xF8; //为 T0 赋初值 0xF8CD,准时 2ms TL0 = 0xCD; ET0 = 1; //使能 T0 中缀 TR0 = 1; //启动 T0 StartMotor(360*2+180); //掌握电机迁移转变 2 圈半 while (1); } /* 步进电机启动函数,angle-需转过的角度 */ void StartMotor(unsigned long angle){ //在盘算前封闭中缀,完成后再翻开,以防止中缀打断盘算进程而形成毛病 EA = 0; beats = (angle * 4076) / 360; //实测为 4076 拍迁移转变一圈 EA = 1; } /* T0 中缀效劳函数,用于驱动步进电机扭转 */ void InterruptTimer0() interrupt 1{ unsigned char tmp; //暂时变量 static unsigned char index = 0; //节奏输入索引 unsigned char code BeatCode[8] = { //步进电机节奏对应的 IO 掌握代码 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; TH0 = 0xF8; //从新加载初值 TL0 = 0xCD; //节奏数不为 0 则发生一个驱动节奏 if (beats != 0){ tmp = P1; //用 tmp 把 P1 口以后值暂存 tmp = tmp & 0xF0; //用&操作清零低 4 位 //用|操作把节奏代码写到低 4 位 tmp = tmp | BeatCode[index]; //把低 4 位的节奏代码和高 4 位的原值送回 P1 P1 = tmp; index++; //节奏输入索引递增 index = index & 0x07; //用&操作完成到 8 归零 beats--; //总节奏数-1 }else{ //节奏数为 0 则封闭电机一切的相 P1 = P1 | 0x0F; } }

程序照样比拟复杂的,电机迁移转变的启动函数 StartMotor 只担任盘算一个需求的总节奏数beats,然后在中缀函数内检测这个变量,不为 0 时就履行节奏操作,同时将其减 1,直到减到 0 为止。
这里,我们要特殊阐明一下的是 StartMotor 函数中对 EA 的两次操作。我们可以看到对beats 的赋值盘算语句是夹在 EA=0;EA=1;这两行语句两头的,也就是说这行赋值盘算语句在履行前先封闭了中缀,而等它履行完后,才又从新翻开了中缀。在它履行进程中单片机是不会呼应中缀的,即中缀函数 InterruptTimer0 不会被履行,即便这时分准时器溢出了,中缀发作了,也只能等候 EA 从新置 1 后,才干失掉呼应,中缀函数 InterruptTimer0 才会被履行。
那么为什么要这么做呢?我们来想一下:在本书开端我们就曾提到,我们所运用的STC89C52 单片机是 8 位单片机,这个 8 位的概念就是说单片机操作数据时多是按 8 位即按1 个字节停止的,那么要操作多个字节(不管是读照样写)就必需分屡次停止了。而我们程序中界说的 beats 这个变量是 unsigned long 型,它要占用 4 个字节,那么对它的赋值起码也要分 4 次才干完成了。我们想象一下,假设在完成了个中第一个字节的赋值后,恰恰中缀发作了,InterruptTimer0 函数失掉履行,而这个函数内能够会对 beats 停止减 1 的操作,减法就有能够发作借位,借位就会改动其它的字节,但由于此时其它的字节还没有被赋入新值,于是毛病就会发作了,减 1 所失掉的后果就不是预期的值了!所以要防止这种毛病的发作就得先临时封闭中缀,等赋值完成后再翻开中缀。而假如我们运用的是 char 或 bit 型变量的话,由于它们多是在 CPU 的一次操作中就完成的,所以即便不关中缀,也不会发作毛病。成绩剖析清晰了,若何弃取还得依据实践状况来,赶上这类成绩的时分多多思索思索吧。


中缀 节奏 函数 电机 程序 字节 准时 单片机 变量 毛病 步进电机 步进 代码 成绩 时分 语句 初值 才干 索引 进程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技图片 博彦科技互联网金融 广州大一互联网络科技有限公司 互联网的科技 天扬科技互联网广告 互联网科技公司的市场部门 青岛科技大学互联网大赛研究生 河南住房之家互联网科技 小米互联网科技园入驻 电子商务与互联网科技的关系 产业互联网科技服务公司 互联网营销推广黑科技 上海互联网科技公司ppt 抖集互联网科技技术咨询 普陀区互联网教育科技管理办法 江苏互联网智能科技产品出厂价 容联科技互联网电商 科技互联网公司两年变化 互联网科技大会大佬 广州全民伙伴互联网科技有限公司 互联网科技战争 互联网科技与金融科技 万达互联网科技 互联网科技公司需要的职位 顶级互联网科技成果有哪些 互联网与医疗科技 怎样加入科技互联网 云南省自由互联网科技有限公司 广州有谷有贝互联网科技有限公司 科技互联网公司两年变化
0