帮忙修改一个单片机程序 5
#include"reg52.h"sbitlone=P1^5;sbitltwo=P1^6;sbitstart=P3^0;sbitstop=P3^1;sbitAUTO=P3...
#include"reg52.h"
sbit lone=P1^5;
sbit ltwo=P1^6;
sbit start=P3^0;
sbit stop=P3^1;
sbit AUTO=P3^2;
sbit hand=P3^3;
sbit forward=P3^4;
sbit reverse=P3^5;
sbit acceleration=P3^6;
sbit deceleration=P3^7;
sbit direction=P1^0; //zhuanfan
sbit RS=P1^1; //on off
sbit PMW=P1^2; //kongzhi
int CYCLE,PWM_ON,count;
void initial()
{
CYCLE=20;
PWM_ON=0;
count=0;
}
void DelayMs(unsigned char z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void nit_Timer0(void)
{
TMOD|=0x01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
if(count==PWM_ON)//如果定时等于on的时间说明作用时间结束,输出低电平
{
PMW=0;
}
if(count==CYCLE)//反之低电平时间结束后返回高电平
{
count=0;
if(PWM_ON!=0)//如果开启时间是0保持原来状态
{
PMW=1;
}
}
count++;
}
void accelerate()
{
if(PWM_ON==CYCLE)
{
}
else
{PWM_ON++;}
}
mian()
{
initial();
Iint_Timer0();
while(1)
{
if(!stop)
{
lone=1;
PWM_ON=0;
ltwo=1;
PWM_ON=0;
while(start)
{
RS=0;
}
}
}
} 展开
sbit lone=P1^5;
sbit ltwo=P1^6;
sbit start=P3^0;
sbit stop=P3^1;
sbit AUTO=P3^2;
sbit hand=P3^3;
sbit forward=P3^4;
sbit reverse=P3^5;
sbit acceleration=P3^6;
sbit deceleration=P3^7;
sbit direction=P1^0; //zhuanfan
sbit RS=P1^1; //on off
sbit PMW=P1^2; //kongzhi
int CYCLE,PWM_ON,count;
void initial()
{
CYCLE=20;
PWM_ON=0;
count=0;
}
void DelayMs(unsigned char z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void nit_Timer0(void)
{
TMOD|=0x01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
if(count==PWM_ON)//如果定时等于on的时间说明作用时间结束,输出低电平
{
PMW=0;
}
if(count==CYCLE)//反之低电平时间结束后返回高电平
{
count=0;
if(PWM_ON!=0)//如果开启时间是0保持原来状态
{
PMW=1;
}
}
count++;
}
void accelerate()
{
if(PWM_ON==CYCLE)
{
}
else
{PWM_ON++;}
}
mian()
{
initial();
Iint_Timer0();
while(1)
{
if(!stop)
{
lone=1;
PWM_ON=0;
ltwo=1;
PWM_ON=0;
while(start)
{
RS=0;
}
}
}
} 展开
展开全部
具体做什么用的,你要说明一下,我给你大概举出了你的错误,你自己看下然后更改一下程序,具体怎么改,要知道功能才能帮你改,谢谢、、、
#include"reg52.h"
sbit lone=P1^5;//外接什么?
sbit ltwo=P1^6;//外接什么?
sbit start=P3^0; //外接按键吗?
sbit stop=P3^1;//外接按键吗?
/*
sbit AUTO=P3^2; //没有用到
sbit hand=P3^3; //没有用到
sbit forward=P3^4; //没有用到
sbit reverse=P3^5; //没有用到
sbit acceleration=P3^6;// 没有用到
sbit deceleration=P3^7;//没有用到
sbit direction=P1^0; //zhuanfan //没有用到
*/
sbit RS=P1^1; //on off
sbit PMW=P1^2; //kongzhi
int CYCLE,PWM_ON,count;
void initial() //变量初始化程序
{
CYCLE=20;
PWM_ON=0;
count=0;
}
void DelayMs(unsigned char z) //延时程序
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void nit_Timer0(void) //中断初始化程序
{
TMOD=0x01;
TH0=(65536-2000)/256;//这是等于20ms
TL0=(65536-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
if(count==PWM_ON)//如果定时等于on的时间说明作用时间结束,输出低电平
//如果stop信号没有得到的话,那么可以得到,初值count=0,PWM_ON=0;PMW=0;
//count++ =>count=1;PWM_ON没有改变还是等于0,所以不管count增加多少等式都不会成立。
{
PMW=0;
}
else if(count==CYCLE)//反之低电平时间结束后返回高电平
//当count=20,CYCLE=20,所以这条语句成立
{
count=0;
if(PWM_ON!=0)//如果开启时间是0保持原来状态
//这条语句一直不成立,因为PWM_ON始终等于O
{
PMW=1;
}
}
count++;
}
/*void accelerate() //因为这个函数没有调用到,所以不起作用
{
if(PWM_ON==CYCLE)
{
}
else
{
PWM_ON++;
}
}*/
mian()
{
initial();
Iint_Timer0();
while(1)
{
if(!stop)
{
DelayMs(5)//去抖动电路
if(!stop)
{
lone=1;
PWM_ON=0;
ltwo=1;
//PWM_ON=0;重复多余
while(start)
{
RS=0;
}
}
}
}
}
#include"reg52.h"
sbit lone=P1^5;//外接什么?
sbit ltwo=P1^6;//外接什么?
sbit start=P3^0; //外接按键吗?
sbit stop=P3^1;//外接按键吗?
/*
sbit AUTO=P3^2; //没有用到
sbit hand=P3^3; //没有用到
sbit forward=P3^4; //没有用到
sbit reverse=P3^5; //没有用到
sbit acceleration=P3^6;// 没有用到
sbit deceleration=P3^7;//没有用到
sbit direction=P1^0; //zhuanfan //没有用到
*/
sbit RS=P1^1; //on off
sbit PMW=P1^2; //kongzhi
int CYCLE,PWM_ON,count;
void initial() //变量初始化程序
{
CYCLE=20;
PWM_ON=0;
count=0;
}
void DelayMs(unsigned char z) //延时程序
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void nit_Timer0(void) //中断初始化程序
{
TMOD=0x01;
TH0=(65536-2000)/256;//这是等于20ms
TL0=(65536-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
if(count==PWM_ON)//如果定时等于on的时间说明作用时间结束,输出低电平
//如果stop信号没有得到的话,那么可以得到,初值count=0,PWM_ON=0;PMW=0;
//count++ =>count=1;PWM_ON没有改变还是等于0,所以不管count增加多少等式都不会成立。
{
PMW=0;
}
else if(count==CYCLE)//反之低电平时间结束后返回高电平
//当count=20,CYCLE=20,所以这条语句成立
{
count=0;
if(PWM_ON!=0)//如果开启时间是0保持原来状态
//这条语句一直不成立,因为PWM_ON始终等于O
{
PMW=1;
}
}
count++;
}
/*void accelerate() //因为这个函数没有调用到,所以不起作用
{
if(PWM_ON==CYCLE)
{
}
else
{
PWM_ON++;
}
}*/
mian()
{
initial();
Iint_Timer0();
while(1)
{
if(!stop)
{
DelayMs(5)//去抖动电路
if(!stop)
{
lone=1;
PWM_ON=0;
ltwo=1;
//PWM_ON=0;重复多余
while(start)
{
RS=0;
}
}
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询