樊向超电算程序单面打印打印_第1页
樊向超电算程序单面打印打印_第2页
樊向超电算程序单面打印打印_第3页
樊向超电算程序单面打印打印_第4页
樊向超电算程序单面打印打印_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

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

2、 0;P1_1 = 1;delay(); P1_1 = 0;/设定时每隔 1ms 中断一次/开始计数 1P1_2 = 1;delay();P1_2 = 0;P1_3 = 1;delay();goto startrun; /定时器 0 中断处理 void timeint(void) interrupt 1 TH0=0xF C;TL0=0x18; /设定时每隔 1ms 中断一次 count+;void delay()endcount=2; count=0;dowhile(countendcount);/将上面的程序编译,用 ISP 下载线下载至单片机运行。上面的程序还只是实现了步进电机的初步控制,

3、速度和方向的控制还不够灵活。 代码二 #include static unsigned int count; static int step_index;void delay(unsigned int endcount);void gorun(bit turn, unsigned int speedlevel); void main(void)2count = 0;step_index = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1;/允许 CPU 中断TMOD = 0x11; /设定时器 0 和 1 为 16 位模式 1/定时器 0 中断允许ET

4、0 = 1;TH0 = 0xFE;TL0 = 0x0C; /设定时每隔 0.5ms 中断一次/开始计数TR0 = 1;dogorun(1,60);while(1); /定时器 0 中断处理 void timeint(void) interrupt 1 TH0=0xF E;TL0=0x0C; /设定时每隔 0.5ms 中断一次 count+;void delay(unsigned int endcount)count=0; dowhile(count7) step_index=0;5elsestep_index-;if (step_index0) step_index=7;/改进的代码能实现速度

5、和方向的控制,而且,通过 step_index 静态全局变量能“记住”步进电机的步进位置,下次调用 gorun()函数时则可直接从上次步进位置继续转动,从而实现精确步进。但是,在代码二中,步进电机的运转控制是在主函数中,如果程序还需执行其它任务,则有可能使步进电机的运 转收到影响。 代码三 #include static unsigned int count; /计数 static int step_index; /步进索引数,值为 07 static bit turn; /步进电机转动方向 static bit stop_flag; /步进电机停止标志 static int speedlev

6、el; /步进电机转速参数,数值越大速度越慢,最小值为 1,速度最快 static int spcount;/步进电机转速参数计数 void delay(unsigned int endcount); /延时函数,延时为 endcount*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 = 0x11; /设定时器 0 和 1 为 16

7、 位模式 1/定时器 0 中断允许ET0 = 1;TH0 = 0xFE;TL0 = 0x0C;/设定时每隔 0.5ms 中断一次/开始计数TR0 = 1;turn = 0;speedlevel = 2; delay(10000); speedlevel = 1;dospeedlevel = 2;delay(10000); speedlevel = 1; delay(10000); stop_flag=1; delay(10000); stop_flag=0;while(1); /定时器 0 中断处理 void timeint(void) interrupt 1 TH0=0xF E;TL0=0x0C; /设定时每隔 0.5ms 中断一次7count+;spcount-; if(spcount=0)spcount = speedlevel; gorun();void delay(unsigned int endcount)count=0; dowhile(count7) step_index=0;elsestep_index-;if (step_index0)

温馨提示

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

评论

0/150

提交评论