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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4761|回復: 11
收起左側

stc12c5604ad T0中斷與串口不能同時使用,求高人分析

[復制鏈接]
ID:72585 發表于 2015-1-21 19:51 | 顯示全部樓層 |閱讀模式

stc12c5604ad T0中斷與串口不能同時使用,求高人分析。
程序結構為時間片輪轉方式,5ms一個中斷,中斷里刷數碼管。
在程序進入串口前P13設高電位,完成串口程序后P13設低電位
,用邏輯分析儀捕捉P13口后看高電位寬度寬達7ms,這是不正常的,也就
是說發送一字節用了7ms時間
把T0中斷屏蔽了用大循環方式串口就正常了,串口發送一字節數據也就1ms不到,

如下代碼,是大概樣子

void Ini_Timer0(void)           //5ms中斷
{
        TMOD &= 0xF0;                //設置定時器模式
        TMOD |= 0x01;                //設置定時器模式
        TL0 = 0x00;                //設置定時初值
        TH0 = 0x28;                //設置定時初值
        TF0 = 0;                //清除TF0標志TR0 = 1;               
        EA = 1;
    ET0 = 1;
    TR0 = 1;
}
//串口初始化
void InitUART(void)                 //9600bps  11.0592mhz
{
    TMOD |= 0x20;
    SCON = 0x40;
    TH1 = 0xDC;
    TL1 = TH1;
    PCON = 0x00;
    TR1 = 1;

}
//串口發送一位數據
void SendOneByte(u8 c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}
void Timer0() interrupt 1
{
        P14 = 1;                //中斷開始測試
        TL1 = 0x00;                //設置定時初值
        TH1 = 0x00;                //設置定時初值
         
        if(work_count1)work_count1--; //每節拍對任務延時變量減1,減至0后,任務就緒。
        if(work_count2)work_count2--;
        if(work_count3)work_count3--;

        if(++weicon>3) weicon=0;      //顯示位置輪流,需要嚴格限制范圍為0-7                
        P2=0;                          //關段碼顯示                  74LS245               
        switch(weicon)
        {       
            case 0:                                    //第1位顯示內容
                   P2=LED_tab[bai];     //顯示內容   74ls245
                   P17=0;P15=0;P16=1;        //位選  74lLS138
                break;
                case 1:                                    //第2位顯示內容
                   P2=LED_tab[shi];     //顯示內容
                   P17=1;P15=0;P16=1;        //位選
                break;
                case 2:                                    //第3位顯示內容
                   P2=LED_tab[ge];      //顯示內容
                   P20=1;                            //在各位上顯示小數點
                   P17=0; P15=1;P16=1;        //位選
                break;
                case 3:                                    //第4位顯示內容
                   P2=LED_tab[xiaoshu]; //顯示內容
                   P17=1; P15=1;P16=1;        //位選
                break;
                default:break;
        }
                                                                                                                                        
        P14=0;      //中斷結束測試端
          
}


void main(void)
{       
        P2=0;                 //關顯示

        P17=1;                 //數碼管74ls138位選
        P15=1;                 //
        P16=1;                 //

        P14=0;      //測試端口
        P13=0;                //測試端口
        P12=0;                //測試端口
        P11=0;                //測試端口
        AUXR = AUXR|0x80;  // T0, 1T Mode
        AUXR = AUXR|0x40;  // T1, 1T Mode
        convert_T();    //開機先轉換一次溫度
        Ini_Timer0();        //初始化定時器0
        InitUART();
        while(1)
        {         P12=1;
            
                convert_T();            //啟動溫度轉換

                        if(work_count2++==)
                                { P13=1;
                                   SendOneByte(temp>>4);       //發送串口
                                 work_count2=0;
                                   P13=0;
                                }
                        if(work_count1++==100)
                            {
                                  P14=1;
                                  read_T();                        //讀轉換溫度數字
                                   P14=0;


                                 }
                 work_temp(temp); //處理溫度數據
                 P12=0;                 
        }                               
}

回復

使用道具 舉報

ID:72585 發表于 2015-1-21 19:53 | 顯示全部樓層
網上搜了很多都不是他們所說的問題。
回復

使用道具 舉報

ID:72585 發表于 2015-1-23 20:14 來自觸屏版 | 顯示全部樓層
沒人說兩句嗎?這也不是什么高層次的應用。
回復

使用道具 舉報

ID:19701 發表于 2015-1-23 23:17 | 顯示全部樓層
這些東西只有試一下,你把T0與T1換了試一下。在做一個調光延時的時候我發現中斷之間也是有影響的,最后還是用示波器一點一點的調整的。
回復

使用道具 舉報

ID:72585 發表于 2015-1-24 09:04 來自觸屏版 | 顯示全部樓層
T0中斷,T1串口沒開中斷。換過來T0不能做波特率發生器吧?
回復

使用道具 舉報

ID:72585 發表于 2015-1-24 09:07 來自觸屏版 | 顯示全部樓層
我用stc89c52就沒問題。中斷的處理時間急短
回復

使用道具 舉報

ID:72585 發表于 2015-1-24 09:09 來自觸屏版 | 顯示全部樓層
現在的現象就是t0開中斷,串口的每一位發送時間就會被拉很長,導致電腦不能接收。
回復

使用道具 舉報

ID:19701 發表于 2015-1-24 15:49 | 顯示全部樓層
taotaoliu199 發表于 2015-1-24 09:09
現在的現象就是t0開中斷,串口的每一位發送時間就會被拉很長,導致電腦不能接收。

我認為,既然刷顯示都要在中斷內進行,證明中斷對刷新是有影響的;反過來,你延時對串口是否會有影響呢,可否把串口函數也放在中斷內呢,這樣每一個中斷發生時,它會執行這個函數。
回復

使用道具 舉報

ID:72585 發表于 2015-1-26 13:46 來自觸屏版 | 顯示全部樓層
jxr0345 發表于 2015-1-24 15:49
我認為,既然刷顯示都要在中斷內進行,證明中斷對刷新是有影響的;反過來,你延時對串口是否會有影響呢, ...

發串口放t0中斷里也試過,中斷執行時間一樣被拉長達7ms,而中斷如果只刷數碼管只要幾十微妙執行。
回復

使用道具 舉報

ID:19701 發表于 2015-1-26 20:19 | 顯示全部樓層
taotaoliu199 發表于 2015-1-26 13:46
發串口放t0中斷里也試過,中斷執行時間一樣被拉長達7ms,而中斷如果只刷數碼管只要幾十微妙執行。

是否是因優先級引起的呢?串口一般級別低一些。這方面考慮一下,再試一下。
回復

使用道具 舉報

ID:140800 發表于 2016-10-1 20:09 | 顯示全部樓層
您好,您解決了嗎?我也遇到這個問題了。在定時器里發送串口導致不返回主程序
回復

使用道具 舉報

ID:255919 發表于 2019-3-18 14:05 | 顯示全部樓層
這問題我也遇到了,用的是T2做串口1的波特率
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩在线播放 | 狠狠综合网 | 久久亚洲欧美日韩精品专区 | 日韩电影a | 久产久精国产品 | 久久精品亚洲 | 国产一区二区三区久久久久久久久 | 一区欧美 | 欧美久久一区二区 | 国产区精品在线观看 | 亚洲视频免费在线 | 一区二区国产在线观看 | 在线播放中文字幕 | 久久综合成人精品亚洲另类欧美 | 天天干天天玩天天操 | 中文字幕一区二区三区四区五区 | av一区二区在线观看 | 久久国产精品久久 | 美国一级黄色片 | 欧洲免费视频 | 黄色在线观看网站 | 欧美日韩高清免费 | 草久在线| 日韩毛片免费看 | 国产日韩欧美一区二区 | 国产精品不卡一区 | 精品视频在线观看 | 日韩国产三区 | 精品久| 国产精品www | 美女张开腿露出尿口 | 亚洲精品中文字幕在线观看 | 国产激情精品一区二区三区 | 精品免费在线 | 国产福利91精品 | 亚洲一区在线日韩在线深爱 | 91免费看片 | 中文字幕精品一区 | 一区二区高清 | 国产色黄 | 日本不卡一区 |