使用51单片机的定时器来模拟PWM.docx_第1页
使用51单片机的定时器来模拟PWM.docx_第2页
使用51单片机的定时器来模拟PWM.docx_第3页
使用51单片机的定时器来模拟PWM.docx_第4页
使用51单片机的定时器来模拟PWM.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

【老三】那份执着(812602920)2014/4/1419:35:49这个没必要吧设置定时器初值期间,关闭定时器这个没必要吧【老三】那份执着(812602920)2014/4/1419:40:18没人?【老大】小灰灰(1124315978)2014/4/1419:50:36问题解决了没啊【老三】那份执着(812602920)2014/4/1419:51:10找到程序了【老三】那份执着(812602920)2014/4/1419:51:16在看不是好懂/*/*程序名:PWM直流电机调速*/*晶振:11.00592MHzCPU型号:AT89C51*/*直流电机的PWM波控制,可以直接的调速从0到20级的调速*/*/#include#defineTH0_TL0(65536-1000)/设定中断的间隔时长unsignedcharcount0=50;/低电平的占空比unsignedcharcount1=0;/高电平的占空比bitFlag=1;/电机正反转标志位,1正转,0反转sbitKey_add=P20;/电机减速sbitKey_dec=P21;/电机加速sbitKey_turn=P22;/电机换向sbitPWM1=P26;/PWM通道1,反转脉冲sbitPWM2=P27;/PWM通道2,正转脉冲unsignedcharTime_delay;/*函数声明*/voidDelay(unsignedcharx);voidMotor_speed_high(void);voidMotor_speed_low(void);voidMotor_turn(void);voidTimer0_init(void);/*延时处理*/voidDelay(unsignedcharx)Time_delay=x;while(Time_delay!=0);/等待中断,可减少PWM输出时间间隔/*按键处理加pwm占空比,电机加速*/voidMotor_speed_high(void)/if(Key_add=0)Delay(10);if(Key_add=0)count0+=5;if(count0=100)count0=100;while(!Key_add);/等待键松开/*按键处理减pwm占空比,电机减速*/voidMotor_speed_low(void)if(Key_dec=0)Delay(10);if(Key_dec=0)count0-=5;if(count0=0)count0=0;while(!Key_dec);/*电机正反向控制*/voidMotor_turn(void)if(Key_turn=0)Delay(10);if(Key_turn=0)Flag=Flag;while(!Key_turn);/*定时器0初始化*/voidTimer0_init(void)TMOD=0x01;/定时器0工作于方式1TH0=TH0_TL0/256;TL0=TH0_TL0%256;TR0=1;ET0=1;EA=1;/*主函数*/voidmain(void)Timer0_init();while(1)Motor_turn();Motor_speed_high();Motor_speed_low();/*定时0中断处理*/voidTimer0_int(void)interrupt1using1TR0=0;/设置定时器初值期间,关闭定时器TL0=TH0_TL0%256;TH0=TH0_TL0/256;/定时器装初值TR0=1;if(Time_delay!=0)/延时函数用Time_delay-;if(Flag=1)/电机正转PWM1=0;if(+count1=100)count1=0;else/电机反转PWM2=0;if(+count1=100)count1=0;这个程序是我转来的下载在硬件上是能通过的。但不知道你是否能看懂,开始我对有些部分是没有看懂。在网友“艺术纸箱”的帮助下我算是彻底明白了。在这我直说我没有看懂然后有看懂的部分吧(这句话感觉说的有点毛病?)。注意这些部分:/*延时处理*/voidDelay(unsignedcharx)Time_delay=x;while(Time_delay!=0);/等待中断,可减少PWM输出时间间隔Delay(10);if(Time_delay!=0)/延时函数用Time_delay-;全是复制的 /*使用51单片机的定时器来模拟PWM PWM的占空比可以通过设定value的值来改变。*/#include#define uint unsigned int #define uchar unsigned charuint value;sbit PWM0=P27;void main()uint n;uchar i;TMOD=0x02; /选择定时器0 工作方式2 TH0=0x06; /写入预置初值6到定时器0,使250微秒溢出一次(11.0592MHz) TL0=0x06; /写入预置值 TR0=1; /启动定时器ET0=1;EA=1;while(1)if(value=0) /每过一段时间,就自动加一个档次的亮度 for(i=0;i20;i+) for(n=0;n2500;n+); value+; /占空比控制变量scale加1 if(value=20) for(i=0;i20;i+) for(n=0;n1250;n+); value-; /如果scale=20,使scale为0 void timer0() interrupt 1static uint tt=0; /tt用来保存当前时间在一秒中的比例位置t

温馨提示

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

最新文档

评论

0/150

提交评论