单片机外部中断的编程

单片机外部中断的编程,第1张

//

#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编程时,可不可以在中断函数里关掉当前中断并且打开或关上定时器。比如:、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9343961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存