标题:
为什么单片机T0的中断无法执行,只可执行T1的中断
[打印本页]
作者:
syh112
时间:
2023-6-13 03:19
标题:
为什么单片机T0的中断无法执行,只可执行T1的中断
#include "reg52.h"
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit moto=P1^0;
sbit k2=P3^0;
sbit k3=P3^2;
//sbit k00=P2^2;
unsigned char timer1;
unsigned char timer0;
uint n=1;
uint m=2;
uint sunumber;
uint worksign;
void TimeConfig();
void delay1ms(uint t);
void sudu();
void moshi();
void ziran();
void main(void)
{
TimeConfig();
while(1)
{
moshi();
}
}
void delay1ms(uint t){
char i;
while(t--)
{
for(i=0;i<50;i++);
}
}
void TimeConfig()
{
TMOD|= 0x11;
TH1 = 0xFE;
TL1 = 0x0C;
ET1 = 1;
EA = 1;
TR1 = 1;
TH0=0xD8;//(65536-10000)/256;
TL0=0xF0;//(65536-10000)%256;//10ms
ET0=1;
TR0=1;
}
void Time1(void) interrupt 3
{
TR0=0;
TH1 = 0xFE;
TL1 = 0x0C;
TR0=1;
timer1++;
}
void Time0(void) interrupt 1
{
TR1=0;
TH0=0xD8;
TL0=0xF0;
TR1=1;
timer0++;
if(timer0>1200)
{
timer0=0;
}
}
void sudu()
{
if(k2==0)
{
delay1ms(10);
if(k2==0)
{
n+=1;
if(n>3)
{n=1;
}
while(!k2);
}
}
switch(n)
{
case 1:sunumber=15;break;
case 2:sunumber=50;break;
case 3:sunumber=90;break;
}
if(timer1>100)
{
timer1=0;
}
if(timer1<sunumber)
{
moto=1;
}
else
{
moto=0;
}
}
void moshi()
{
if(k3==0)
{
delay1ms(10);
if(k3==0)
{
m+=1;
if(m>2)
{m=1;
}
while(!k3);
}
}
switch(m)
{
case 1:sudu();break;
case 2:ziran();break;
// case 3:sunumber=90;break;
}
}
void ziran()
{
ET0=1;
TR0=1;
if(timer0<400)
{
sudu();
}
else
{
moto=0;
}
}
作者:
wys91203
时间:
2023-6-13 05:35
两个定时器都用方式1,16位,自然优先级是T0高于T1, 但在中断程序中,有错误,T0中断 INTERRUPT1
子程序里,停止了T0空断.
void Time1(void) interrupt 3
{
TR0=0; //应是TR1=0
TH1 = 0xFE;
TL1 = 0x0C;
TR0=1;
timer1++;
}
作者:
xuyaqi
时间:
2023-6-13 09:33
你定义:unsigned char timer0;
判断要求,if(timer0>1200),后边程序不能执行。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1