PCON |= (1<<0);
单片机进入掉电模式的方法:
PCON |= (1<<1);
单片机允许外部中断0的程序:
EX0 = 1;
IT0 = 1;//----IT0 = 0也可以,前者是下降沿触发,后者是低电平触发,随便你
EA = 1;
如果你允许了外部断0中断,那么,即使单片机进入空闲模式,一旺有中断,单片机就可以被唤醒继续执行
如果你的单片机进入了掉电模式,则单片机不会响应外部中断的,或者说单片机就等于是彻底关机了
,所以,即使你有外部中断,单片机也醒不了
因为空闲模式,其实是让单片机的CPU睡着了,而掉电模式,则是让整个单片机睡觉,而外部中断属于单片机的一部分,因此,掉电模式使得整个单片机睡着了,那么外部中断0自然也睡着了,既然睡着了,就不会响应中断
1利用黑色对光线的反射率小这个特点,当平面的颜色不是黑色时,反射器发射出去的红外光被大部分反射回来。于是传感器输出低电平0。
2当平面中有一条黑线,传感器在黑线上方时,因黑色的反射能力很弱,反射的红外光很少,打不到传感器动作的水平,所以传感器输出1。
所以当探头经过黑线时,传感器上的开关指示灯会熄灭,输出的是高电平。如果没有经过黑线,一直保持低电平。
3红外传感器
它具有三个引脚,分别是:VCC GND OUT
有障碍物灯就会亮,所以有障碍物代表低电平,没有障碍物高电平。
自己看注释改一下就行 函数都写好了了 没用的删掉就可以了
#include<reg52h>
#include<mathh>
#define uchar unsigned char
#define uint unsigned int
#define L_M 1
#define R_M 2
uchar temp2,temp1,t,m1,m2,redline;
sbit tr=P2^4; //超声波
sbit ec=P2^5; //
sbit en=P2^7; //液晶的EN
sbit rs=P2^6; //液晶RS选择端
//液晶数据口 P0口
sbit Rin_1=P2^0; //寻迹管脚输入
sbit Rin_2=P2^1;
sbit Lin_2=P2^2;
sbit Lin_1=P2^3;
sbit L_EN=P1^0; //左侧电机使能
sbit L_1=P1^1; //左侧电机控制 1
sbit L_2=P1^2; //左侧电机控制 2
sbit R_1=P1^3; //右侧电机控制 1
sbit R_2=P1^4; //右侧电机控制 2
sbit R_EN=P1^5; //右侧电机使能
void delay(uint z) //延时程序1
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay1s(uchar t) //1s延时函数
{
uchar a,h,i,j,k;
for(a=t;a>0;a--)
{
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
}
void v_cotrol(uchar number,uchar speed)
{
if(speed<100)
{
if(number==1)
m1=abs(speed);
if(number==2)
m2=abs(speed);
}
}
void turnleft()
{
L_1=1; // left fan zhuan //
L_2=0;
R_1=1; // right fanzhuan
R_2=0;
}
void turnright()
{
L_1=0; // left zheng zhuan
L_2=1;
R_1=0; // right fanzhuan
R_2=1;
}
void gostright()
{
L_1=0; // left zheng zhuan
L_2=1;
R_1=1; // right zhengzhuan
R_2=0;
}
void goback()
{
L_1=1; // left zheng zhuan
L_2=0;
R_1=0; // right zhengzhuan
R_2=1;
}
void stop()
{
L_1=1; // stop
L_2=1;
R_1=1; // stop
R_2=1;
}
void timer0_int()
{
TMOD=0X01;
TH0=-100/256;
TL0=-100%256;
EA=1;
ET0=1;
TR0=1;
}
state_int()
{
Rin_1=1;
Rin_1=1;
Lin_1=1;
Lin_1=1;
t=0;
m1=50;
m2=50;
stop();
}
void main()
{
timer0_int();
state_int();
while(1)
{
//避障程序
if((Lin_1==1)&&(Lin_2==1)&&(Rin_1==1)&&(Rin_2==1))
gostright();
if((Lin_1==1)&&(Lin_2==1)&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
turnleft();
if((Rin_1==1)&&(Rin_2==1)&&(((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0))))
turnright();
if((((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0)))&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
goback();
if((Lin_1==1)&&(Lin_2==1)&&(Rin_1==1)&&(Rin_2==1))
gostright();
if((Lin_1==1)&&(Lin_2==1)&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
turnleft();
if((Rin_1==1)&&(Rin_2==1)&&(((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0))))
turnright();
if((((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0)))&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
goback();
}
while(1);
}
timer0() interrupt 1
{
TH0=-100/256;
TL0=-100%256;
if(t==0)
{
temp1=m1;
temp2=m2;
}
if(t==temp1)
L_EN=0;
if(t==temp2)
R_EN=0;
t++;
if(t==50)
{
t=0;
L_EN=1;
R_EN=1;
}
}
以上就是关于想用51单片机的外部中断0设置单片机的空闲或者掉电模式,同时再用该中断唤醒单片机,请问程序该如何写全部的内容,包括:想用51单片机的外部中断0设置单片机的空闲或者掉电模式,同时再用该中断唤醒单片机,请问程序该如何写、51pcb避障功能是主板哪里、用c语言写一个单片机控制小车走直线的程序,小车一共3个轮子,一个万向轮,另两个是电机驱动的,用51单片等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)