帮忙修改一个单片机程序 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;
}
}
}

}
展开
 我来答
话不头鸟
2017-12-27 · TA获得超过869个赞
知道小有建树答主
回答量:646
采纳率:76%
帮助的人:82.9万
展开全部
具体做什么用的,你要说明一下,我给你大概举出了你的错误,你自己看下然后更改一下程序,具体怎么改,要知道功能才能帮你改,谢谢、、、
#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;
}
}

}
}
}
百度网友5640f6c699
2017-10-11 · TA获得超过594个赞
知道小有建树答主
回答量:339
采纳率:20%
帮助的人:55.3万
展开全部
你这是要问什么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式