我想做一个pwm按键控制电机速度,然后程序中又有两个中断计算电机的转速,转速已经完成,但是控制电机的pwm一直没有波形,我想请各位帮我看看,是哪方面的问题,谢谢
- #include<reg51.h>
- #include<intrins.h>
- #define uch unsigned char
- #define uin unsigned int
- uch code table[]="Duty Ratio:";
- uch code able[]="Rev:";
- uin count,countt,rad,f,t,g,s,q,w,m,b;
- //uin b;
- //uin PWM_T = 0; //占空比控制变
- sbit rs=P1^2;
- sbit rw=P1^1;
- sbit en=P1^0;
- sbit down = P1^5;
- sbit up = P1^6;
- sbit fan=P1^4;
- void delay(uin time)
- {
- uin i,j;
- for(i=time;i>0;i--)
- for(j=110;j>0;j--);
- }
- void time0()
- {
- TMOD=0x11;
- TH0=0xdc;
- TL0=0x00;
- ET0=1;
- TR0=1;
- IT1=1;
- EX1=1;
- // EA=1;
- TH1=(65536-100)/256; //写入预置初值(取值1-255,数越大PWM频率越高)
- TL1=(65536-100)%256; //写入预置值 (取值1-255,数越大PWM频率越高)
- ET1=1; //允许定时器0中断
- TR1=1; //启动定时器
- EA=1; //允许总中断
- }
- uch lcd_readbusy()
- {
- uch temp;
- rs=0;
- rw=1;
- _nop_();
- P2=0xff;
- _nop_();
- en=1;
- _nop_();
- temp=P2;
- _nop_();
- en=0;
- return(temp&0x80);
- }
- void write_com(uch com)
- {
- while(lcd_readbusy());
- rs=0;
- rw=0;
- P2=com;
- delay(5);
- en=1;
- delay(10);
- en=0;
- }
- void write_data(uch dat)
- {
- while(lcd_readbusy());
- rs=1;
- rw=0;
- P2=dat;
- delay(5);
- en=1;
- delay(5);
- en=0;
- }
- void display1() {
- countt=rad/3;
- f=rad*10%10;
- g=countt%10;
- s=(countt/10)%10;
- // b=(countt/100)%10;
- // q=(countt/1000)%10;
- // w=countt/10000;
- // write_com(0xc0+5);
- // write_data(w+0x30); //万位
- // write_com(0xc0+6);
- // write_data(q+0x30); //千位
- // write_com(0xc0+7);
- // write_data(b+0x30); //百位
- write_com(0xc0+8);
- write_data(s+0x30); //十位
- write_com(0xc0+9);
- write_data(g+0x30); //个位
- write_com(0xc0+11);
- write_data(f+0x30); //浮点位
- }
- void init()
- { uin i=0;
- write_com(0x38);
- write_com(0x0c);
- write_com(0x01);
- write_com(0x80);
- for(i=0;i<11;i++)
- {
- write_data(table[i]);
- }
- write_com(0x80+15);
- write_data('%');
-
- write_com(0xc0);
- for(i=0;i<4;i++)
- {
- write_data(able[i]);
- }
- write_com(0xc0+10);
- write_data('.');
- write_com(0xc0+13);
- write_data('R');
- write_data('P');
- write_data('S'); // 转每秒
- }
- void button()
- {
- if(!up)
- {
- if(m<=100)
- { m++;
- // PWM_T++;
- }
- //
- // delay(10);
- }
- if(!down)
- {
- if(m>=1)
- { m-- ;
- // PWM_T--;
- }
- //
- // delay(10);
- }
- }
- void main()
- {
- count=0;
- t=0;
- b=0;
- m=50;
- init();
- time0();
- while(1)
- { display1();
- button();
- }
- }
- writerdown_time1() interrupt 2
- {
- count++;
- }
- taker_time2() interrupt 1
- {
- t++;
- TH0=0xdc;
- TL0=0x00;
- if(t==200)
- { rad=count/3;
- // display1();
- count=0;
- t=0;
- }
- }
- time3() interrupt 3
- { TR1=0;
- TH1=(65536-100)/256;
- TL1=(65536-100)%256;
- b++; //每次定时器溢出加1
- if(b<m) //PWM周期 100个单位
- {
- fan=1; //输出端口
- }
-
- else
- {
- fan=0; //
- }
- if(b>100)b=1;
- }
复制代码
|