讲稿10级电算程序_第1页
讲稿10级电算程序_第2页
讲稿10级电算程序_第3页
讲稿10级电算程序_第4页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AT89S51 程序代码代码一#include ssic unsignedic unsignedcount;endcount;void delay();void main(void)count = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1;/允许 CPU 中断TMOD = 0 x11; /设定时器 0 和 1 为 16 位模式 1/定时器 0 中断允许ET0 = 1;TH0 = 0 xFC; TL0 = 0 x18; TR0 = 1;startrun: P1_3 = 0;P1_0 = 1;delay(); P1_0 = 0;P1_1 = 1;de

2、lay(); P1_1 = 0;/设定时每隔 1ms 中断一次/开始计数1P1_2 = 1;delay(); P1_2 = 0;P1_3 = 1;delay();goto startrun; /定时器 0 中断处理void time(void) TH0=0 xFC;errupt 1TL0=0 x18; /设定时每隔 1ms 中断一次count+;void delay()endcount=2; count=0;dowhile(countendcount);/将上面的程序编译,用 ISP线至单片机运行。上面的程序还只是实现了步进电机的初步控制,速度和方向的控制还不够灵活。代码二#include s

3、sic unsignedcount;icstep_index;void delay(unsignedendcount);void gorun(bit turn, unsignedvoid main(void)speedlevel);2count = 0;step_index = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1;/允许 CPU 中断TMOD = 0 x11; /设定时器 0 和 1 为 16 位模式 1/定时器 0 中断允许ET0 = 1;TH0 = 0 xFE;TL0 = 0 x0C; /设定时每隔 0.5ms 中断一次/开始计数TR0

4、 = 1;dogorun(1,60);while(1); /定时器 0 中断处理void time(void) TH0=0 xFE;errupt 1TL0=0 x0C; /设定时每隔 0.5ms 中断一次count+;void delay(unsignedcount=0;endcount)dowhile(count7) step_index=0;5elsestep_index-;if (step_index0) step_index=7;/改进的代码能实现速度和方向的控制,而且,通过 step_index 静态全局变量能“记住”步进电机的步进位置,下次调用 gorun()函数时则可直接从上次步

5、进位置继续转动,从而实现精确步进。但是,在代码二中,步进电机的运转控制是在主函数中,如果程序还需执行其它任务,则有可能使步进电机的运转收到影响。代码三#include ic unsignedcount; /计数icstep_index; /步进索引数,值为 07 ic bit turn; /步进电机转动方向ic bit stop_flag; /步进电机停止标志icspeedlevel; /步进电机转速参数,数值越大速度越慢,最小值为 1,速ss s ss度最快spcount;/步进电机转速参数计数sicvoid delay(unsignedendcount); /延时函数,延时为 endcou

6、nt*0.5 毫秒/步进电机控制步进函数void gorun();void main(void)count = 0;step_index = 0;spcount = 0;6stop_flag = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1;/允许 CPU 中断TMOD = 0 x11; /设定时器 0 和 1 为 16 位模式 1/定时器 0 中断允许ET0 = 1;TH0 = 0 xFE;TL0 = 0 x0C;/设定时每隔 0.5ms 中断一次/开始计数TR0 = 1;turn = 0;speedlevel = 2; delay(10000);

7、 speedlevel = 1; dospeedlevel = 2;delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); stop_flag=0;while(1); /定时器 0 中断处理void time(void) TH0=0 xFE;errupt 1TL0=0 x0C; /设定时每隔 0.5ms 中断一次7count+;spcount-; if(spcount=0)spcount = speedlevel; gorun();void delay(unsignedcount=0;endcount)dowhile(count7) step_index=0;elsestep_index-;if (step_index0) step_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论