标题:
如何在单片机外部中断0函数中使用定时器,求修改所给程序。
[打印本页]
作者:
wubaqian
时间:
2018-10-20 21:37
标题:
如何在单片机外部中断0函数中使用定时器,求修改所给程序。
//目前程序的问题,第一个延时可以成功,但是外部中断0中就无法使用延时程序(精确延时)了。
单片机源程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
//uchar led1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar x[]={0xff,0xfd};
uchar y[]={0xaa,0x55};
uchar z[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uint tt,m,a,temp;
delay(uint z)
{
tt=0;
TH0=(65536-18432)/256;
TL0=(65536-18432)%256;
EA=1;
ET0=1;
TMOD=0X01;//选择定时器0中断方式
TR0=1;//启动定时器0;
while(1)//进入循环,同时开始定时,50ms后,tt=20
{
if(tt==z)//1s后进入if语句
{
return 0;
}
}
}
void main()
{
EA=1;
EX0=1;
EX1=1;
IT0=0;//水平
IT1=1;//跳沿
PX0=0;
PX1=1;//设置优先级
while(1)
{
for(m=0;m<10;m++)
{
P1=x[m%2];
delay(50);
a=1;
delay(100);
a=2;
}
}
}
void xyz() interrupt 1
{
TH0=(65536-18432)/256;
TL0=(65536-18432)%256;
tt++;
}
void zero() interrupt 2
{
for(m=1;m<10;m++)
{
temp=P1;
P1=y[m%2];
delay(50);
a=1;
P1=temp;
}
}
复制代码
作者:
wubaqian
时间:
2018-10-21 17:02
没人回答吗?
作者:
wubaqian
时间:
2018-10-21 17:03
尴尬了
作者:
mengzhixinheng
时间:
2018-10-22 09:24
如果是延时不准的话,将延时用的定时器优先级设置为最高,其他中断都比他低就可以了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1