久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1385|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)串口中斷進(jìn)不了,是中斷優(yōu)先級(jí)沒(méi)設(shè)置嗎?怎么改呢

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:302293 發(fā)表于 2023-5-5 10:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
/*-----------------------------------------------
  名稱:串口通信
  內(nèi)容:連接好串口或者usb轉(zhuǎn)串口至電腦,下載該程序,打開(kāi)電源
        打開(kāi)串口調(diào)試程序,將波特率設(shè)置為9600,無(wú)奇偶校驗(yàn)
        晶振11.0592MHz,發(fā)送和接收使用的格式相同,如都使用
        字符型格式,按復(fù)位重啟程序,可以看到接收到 UART test, 請(qǐng)?jiān)诎l(fā)送區(qū)輸入任意信
                然后在發(fā)送區(qū)發(fā)送任意信息,接收區(qū)返回同樣信息,表明串口收發(fā)無(wú)誤
------------------------------------------------*/

#include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義                        
#include <intrins.h>
typedef         unsigned char        u8;
typedef         unsigned int        u16;
typedef         unsigned long        u32;
u8 xdata buf[10]={1,2,3,4,5,6,7,8,9,0xA};
u8 code buf1[10]={1,2,3,4,5,6,7,8,9,0xA};
sbit k1=P1^4;
sfr P4 =0Xe8;
sbit P4_0 = P4^0;
unsigned char Temp[];
u8 flag;
u8 i ;
bit ready=0;
  j=0x00;
unsigned char gotData[9];
u8 jscos,jk;
/*------------------------------------------------
                   函數(shù)聲明
------------------------------------------------*/
void SendStr(unsigned char *s);
void Send_data();
void delaynms(unsigned int di) //延時(shí)
{
unsigned int da,db;
for(da=0;da<di;da++)
   for(db=0;db<10;db++);
}
/*------------------------------------------------
                    串口初始化
------------------------------------------------*/
void InitUART  (void)
{

    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
//              // TMOD: timer 1, mode 2, 8-bit 重裝
    TMOD |= 0x21;    //T1方式2、T0方式1
          TH1   = 0xFD;               // TH1:  重裝值 9600 波特率 晶振 11.0592MHz  
    TL1 = 0xfd;      //波特率
          TR1   = 1;                  // TR1:  timer 1 打開(kāi)                        
    IE |= 0x92;      //開(kāi)啟中斷
          EA    = 1;                  //打開(kāi)總中斷
    ES    = 1;                  //打開(kāi)串口中斷
}                           

void Init_Timer1(void)
{
TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
TH1=(65535-20000)/256;
TL1=(65535-20000)%256;
EA=1;            //總中斷打開(kāi)
ET1=1;           //定時(shí)器中斷打開(kāi)
TR1=1;           //定時(shí)器開(kāi)關(guān)打開(kāi)
}

void Init_Timer0(void)
{
TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;            //總中斷打開(kāi)
ET0=1;           //定時(shí)器中斷打開(kāi)
TR0=1;           //定時(shí)器開(kāi)關(guān)打開(kāi)
}

/*------------------------------------------------
                    主函數(shù)
------------------------------------------------*/
void main (void)
{
  u8 i;
InitUART();
Init_Timer0();
//SendStr("UART test,請(qǐng)?jiān)诎l(fā)送區(qū)輸入任意信息");
Init_Timer1();
                 //打開(kāi)串口中斷
while (1)                       
    {
      if( flag)
            {
                   for(i=0;i<9;i++)
                    {
                        SBUF= gotData[ i];
                           while(!TI);TI=0;
                        }
                  
                  
                            if(gotData[0]==0xFF)
                             {           
                                    // P4_0=!P4_0;
                                 jk=1;
                          }
                 
                          flag=0;
                 }  
      if(jscos==1)
            {
                 Send_data();
                 jscos=0;
                }
         

        }                                   
}


void Send_data()
{         u8 l;

          for(l=0;l<10;l++)
          {
                 SBUF=buf1[l];
         while(!TI);
      TI = 0;
          }


}

/*------------------------------------------------
                    發(fā)送一個(gè)字節(jié)
------------------------------------------------*/
void SendByte(unsigned char buf1)
{
SBUF = buf1;
while(!TI);
      TI = 0;  
}
/*------------------------------------------------
                    發(fā)送一個(gè)字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串結(jié)束標(biāo)志,通過(guò)檢測(cè)是否字符串末尾
  {
  SendByte(s);
  s++;
  }
}
void timer0(void) interrupt 1
{

static u16        count;  
          TH0=(65535-10000)/256;
    TL0=(65535-10000)%256;
        
//                TR0 = 0;    //關(guān)閉T0
    j = i;      //暫存接收到的數(shù)據(jù)幀長(zhǎng)度
    i = 0x00;   //長(zhǎng)度清零
    ready = 1;  //置位接收完成標(biāo)志

   if (count >500&&jk==1)  
    {  
    //    LED = ~LED;  
//      P4_0=!P4_0;   count = 0;  
     jscos=1;
        }  
    count ++;
}

void timer1(void) interrupt 3
{

static u16        count;  
          TH1=(65535-20000)/256;
    TL1=(65535-20000)%256;
        
//                TR0 = 0;    //關(guān)閉T0
    j = i;      //暫存接收到的數(shù)據(jù)幀長(zhǎng)度
    i = 0x00;   //長(zhǎng)度清零
    ready = 1;  //置位接收完成標(biāo)志
//      
  if(count>15000)
         {
         
         count=0; P4_0=!P4_0;
         }
count++;


}



/*        void Timer0_isr(void) interrupt 1 using 1
        {
        TH0=0x00;                  //重新賦值
        TL0=0x00;
        
        LED=~LED;        //指示燈反相,可以看到閃爍
        
        }          */
/*------------------------------------------------
                     串口中斷程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中斷服務(wù)程序
{
             //定義臨時(shí)變量

   if(RI)                        //判斷是接收中斷產(chǎn)生
     {
              RI = 0;         //清零接收中斷標(biāo)志位
        TH0 = 0xf8;
        TL0 = 0x2f;     //2ms定時(shí)
        TR0 = 1;        //開(kāi)啟T0
        gotData[i++] = SBUF; //讀取收到的字節(jié)  
         }
            if(i==9)
                  {
                          i=0;
                   flag=1;
                  }




}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:94031 發(fā)表于 2023-5-5 16:04 | 只看該作者
串口接收應(yīng)該一直打開(kāi),而不應(yīng)該由定時(shí)0控制,main循環(huán)里if( )括號(hào)里應(yīng)該填寫判斷依據(jù)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1073939 發(fā)表于 2023-5-5 16:22 | 只看該作者
你InitUART()中是配置T1做波特率發(fā)生器。
但是Init_Timer1()又把T1配置成定時(shí)器了。
串口自然失效了。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:302293 發(fā)表于 2023-5-5 16:59 | 只看該作者
ydatou 發(fā)表于 2023-5-5 16:22
你InitUART()中是配置T1做波特率發(fā)生器。
但是Init_Timer1()又把T1配置成定時(shí)器了。
串口自然失效了。

我用了T2,問(wèn)題解決了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久国产 | 日韩精品一区二区三区 | 视频一区二区三区中文字幕 | 看片地址 | 男人亚洲天堂 | 不卡一二三区 | 国产福利在线视频 | 日韩在线不卡 | 欧美综合视频在线 | 国产精品久久久久久网站 | 国产一二区在线 | av国产精品 | 国产精品毛片一区二区三区 | 一区二区欧美在线 | 在线中文视频 | 国产1区2区3区 | 亚洲黄色成人网 | caoporn国产精品免费公开 | 午夜精品久久久久久久久久久久久 | 国产精品99999999 | 亚洲高清一区二区三区 | 99精品国产一区二区三区 | 国产伦精品一区二区三区精品视频 | 久久久久se| av在线三级 | 亚洲日本成人 | 欧美成人一区二区三区 | 91精品久久久久久久久 | 777777777亚洲妇女 | а√中文在线8 | 中文字幕在线电影观看 | 黄色毛片在线看 | 日韩免费电影 | 午夜在线精品 | 日韩欧美一级精品久久 | 中文字幕精品一区二区三区精品 | 国产福利91精品 | 亚洲综合久久网 | 伊人网站 | 中文字幕欧美日韩一区 | 色综合久久伊人 |