#include <reg52.h>
sbit pwm=P3^0; //舵机
sbit zuo=P3^3; // 红外
sbit you=P3^2; // 红外
sbit BAI=P2^0;
sbit SHI=P2^1;
sbit GE =P2^2;
sbit ENA=P1^1; //电机
sbit IN1=P1^2;
sbit IN2=P1^3;
char jd;
unsigned char count;
unsigned char n;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delay(unsigned int i)
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=110;k>0;k--);
}
void
time0_init()
{
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-158)/256;
TL0=(65536-158)%256;
}
void Time1_init()
{
TMOD=0x01;
EA=1;
ET1=1;
TR1=1;
TH1=0x4c;
TL1=0x00;
}
void Time0_int() interrupt 1
{
TH1=(65536-158)/256;
TL1=(65536-158)%256;
if(count<jd)
pwm=1;
else
pwm=0;
count++;
count=count%40;
}
void Time1_int() interrupt 3
{
TR1=0;
TH1=0x4c;
TL1=0x00;
n++;
TR1=1;
}
void keyscan()
{
if(zuo==0&&you==1)
{
Time1_init();
if(n==10)
{
ENA=1;
IN1=0;
IN2=1;
n=0;
TR1=0;
}
ENA=1;
IN1=1;
IN2=0;
if(jd==7)
{
jd=jd+2;
}
else
{
jd=jd+3;
}
count=0;
if(jd>9)
{
jd=9;
}
while(zuo==0&&you==1);
}
if(you==0&&zuo==1)
{
Time1_init();
if(n==10)
{
ENA=1;
IN1=0;
IN2=1;
n=0;
TR1=0;
}
ENA=1;
IN1=1;
IN2=0;
if(jd==9)
{
jd=jd-2;
}
else
{
jd=jd-3;
}
count=0;
if(jd<4)
{
jd=4;
}
while(you==0&&zuo==1);
}
if(you==0&&zuo==0)
{
while(you==0&&zuo==0) ;
ENA=1;
IN1=1;
IN2=0;
}
}
void display()
{
switch(jd)
{
case 4:
P0=table[9];
BAI = 0;
delay(1);
BAI = 1;
P0=table[0];
SHI = 0;
delay(1);
SHI = 1;
P0=table[1];
GE = 0;
delay(1);
GE = 1;
break;
case 7:
P0=table[0];
BAI = 0;
delay(1);
BAI = 1;
P0=table[0];
SHI = 0;
delay(1);
SHI = 1;
P0=table[0];
GE = 0;
delay(1);
GE = 1;
break;
case 9:
P0=table[0];
BAI = 0;
delay(1);
BAI = 1;
P0=table[0];
SHI = 0;
delay(1);
SHI = 1;
P0=table[1];
GE = 0;
delay(1);
GE = 1;
break;
}
}
void main()
{
jd=7;
count=0;
ENA=1;
IN1=1;
IN2=0;
Time0_init();
Time1_init();
while(1)
{
keyscan();
display();
}
}
我想实现 pwm波一直输出 t0定时
在检测到红外时候打开t1定时器 500ms 让电机反转 然后关闭定时器
现在 下载进去 车的舵机没反应了 电机也不能反转
求问 两个定时器同时工作 要怎么写
谢谢各位
控制寄存器TCON(地址88H)
D7~D0:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
高4位与定时/计数器有关,低4位用于控制外部中断。
TFi-定时/计数器溢出标志位;计数溢出时,硬件自动置1,在中断允许条件下,是向CPU请求中断的信号。中断被响应后,硬件自动清0。该位也可由软件置位和清0,(中断屏蔽时)可以由软件查询测试。
TRi-定时/计数器运行控制位;该位置1时,定时/计数器才运行,否则,停止。
ITi-外部中断请求电信号触发方式选择(0电平、1下降沿)
IEi-有外部中断请求标志。
一周热门 更多>