找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1127|回復: 2
收起左側(cè)

為什么單片機T0的中斷無法執(zhí)行,只可執(zhí)行T1的中斷

[復制鏈接]
ID:1083701 發(fā)表于 2023-6-13 03:19 | 顯示全部樓層 |閱讀模式
#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;
                }
               
        }


回復

使用道具 舉報

ID:116103 發(fā)表于 2023-6-13 05:35 | 顯示全部樓層
兩個定時器都用方式1,16位,自然優(yōu)先級是T0高于T1, 但在中斷程序中,有錯誤,T0中斷 INTERRUPT1
  子程序里,停止了T0空斷.
   void Time1(void) interrupt 3   
{        
        TR0=0;   //應是TR1=0
        TH1 = 0xFE;  
        TL1 = 0x0C;
        TR0=1;
        timer1++;   
}

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:94031 發(fā)表于 2023-6-13 09:33 | 顯示全部樓層
你定義:unsigned char timer0;
判斷要求,if(timer0>1200),后邊程序不能執(zhí)行。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表