//目前程序的问题,第一个延时可以成功,但是外部中断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;
- }
- }
复制代码
|