#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IN1=P3^1;//接IN1 控制正转
sbit IN2=P3^2;//接IN2 控制反转
sbit IN3=P3^3;
sbit IN4=P3^4;
sbit ENA=P3^5; //使能
sbit ENB=P3^6;
uchar time;
void head();
void stop();
void configpwm();
void main()
{
configpwm(); /* 执行完这两条程序就执行不了下面stop这一步,
head(); 根本停不下来,要怎么改一下,求助 */
stop();
}
void configpwm()
{
TMOD=0x01;//定时器0工作方式1
TH0=0xff;//(65536-200)/256;//赋初值定时
TL0=0xf7;//(65536-200)%256;//0.2ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void timer0() interrupt 1
{
TR0=0;//赋初值时,关闭定时器
TH0=0xff;//(65536-200)/256;//赋初值定时 +
TL0=0xf7;//(65536-200)%256;//0.2ms
TR0=1;//打开定时器
time++;
if(time>=100) time=0;//50hz
if(time<=80)
{
ENA=0; //占空比20%
ENB=0;
}
else
{
ENA=1;
ENB=1;
}
}
void head(uint i)
{
IN1=1; //正转 前
IN2=0;
IN3=0;
IN4=1;
}
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
此帖出自
小平头技术问答
YES
TH0=0xff;//(65536-200)/256;//赋初值定时 +
TL0=0xf7;//(65536-200)%256;//0.2ms
这句定时有点短,不行你改长试试,好用后再改个合适值
还是跳不出来,
void timer0() interrupt 1
{
TF0 = 0;
TR0=0;//赋初值时,关闭定时器
TH0=0xff;//(65536-200)/256;//赋初值定时 +
TL0=0x00;//(65536-200)%256;//0.2ms
time++;
if(time>=100) time=0;//50hz
if(time<=80)
{
ENA=0; //占空比20%
ENB=0;
}
else
{
ENA=1;
ENB=1;
}
TR0=1;//打开定时器
}
你把这段程序考贝一下看好用不,好用再改
一周热门 更多>