//
#include<reg51h>
sbit shiwei=P2^0;//定义接口
sbit gewei=P2^1;
//
unsigned char code table[]={//数码显示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
//
void msdelay()//5 ms 延时
{
int x,y;
for(x=(65536-15)%256;x;x--)
{
for(y=(65536-15)/256;y;y--);
}
}
//
//
void init()//初始化
{
TMOD=0x11;
PX0=1;
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TH1=(65535-100)/256;
TL1=(65535-100)%256;
EX0=1;
ET0=1;
ET1=1;
EA=1;
TR1=1;
}
//
unsigned char passtime=0;//全局变量
unsigned char timecount=0;
//
main()
{
unsigned char count;
count=0;
init();
while(P3^0!=1);
msdelay();
if(P3^0==1)//确定开始或者结束
{count++;
if(count%2)
{TR0=1;}
else
{TR0=0;}
}
}
void clear() interrupt 0//清零
{
TR0=0;
timecount=0;
passtime=0;
}
void timer() interrupt 2//50ms 定时
{
timecount++;
if(timecount==20)
{
timecount=0;
passtime++;//5020=1s
}
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TR0=1;
}
void displaytimer() interrupt 2//用于数码管的两位显示,十位和各位
{
TH1=(65535-100)/256;
TL1=(65535-100)%256;
shiwei=0;//动态显示,其中P20=0十位选通 P21=各位选通
gewei=1;
P0=table[passtime/10];//十位
msdelay();
msdelay();
msdelay();
shiwei=1;
gewei=0;
P0=table[passtime%10];//各位
msdelay();
msdelay();
msdelay();
TR1=1;
}
/ shijian bu shi hen zuique de ,yingwei wo meiyou yingjian tiaoshi ,ni you de hua jiu nong yixia kan kan ba /
1、在中断服务程序里,关闭中断允许标志当然可以(只是这个中断暂时被关闭了,如果在其他程序中没有开启中断,则这个中断服务程序不会再被执行),同样也可以启停定时器。
看了你的追问,我觉得你的要求完全可以实现,只是在编程的时候,要细致一些,把逻辑理清楚就可以了。
我以前做过一个出租车计价器,里程数据也是从外部中断进来,但在空车(也就是没有乘客的时候),我就把这个中断给关了,虽然里程数据通过传感器还在不断到达中断口,系统不会做任何反应。
2、声音定位从理论上说是很简单的,两线一点的定位方式。利用一个减速步进电机(带咪头),然后先旋转,利用一个锁相环,比如LM567,当接收到信号后,输出一个脉冲。此时步进电机停住,测出旋转角度(也就是说明,声音在那条直线上),然后走过一段路程,再测一次,又获得一根直线,则两根直线的交点就是声音源,跟早年无线电定位,现在微信定位一个道理。
以上就是关于单片机外部中断的编程全部的内容,包括:单片机外部中断的编程、在用51编程时,可不可以在中断函数里关掉当前中断并且打开或关上定时器。比如:、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)