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

QQ登錄

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

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

單片機(jī)串口中斷和定時(shí)器中斷為什么不能同時(shí)使用

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:403398 發(fā)表于 2018-10-13 15:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
  1. #include <reg51.h>

  2. //typedef unsigned char uint8;
  3. typedef unsigned int  uint16;
  4. //typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
  5. typedef unsigned char u8;
  6. //unsigned char timer6;

  7. //sbit IRIN=P3^2;
  8. //sbit IN1=P1^0;
  9. //sbit IN2=P1^1;
  10. //sbit ENA=P1^2;
  11. sbit pwm=P2^1;//輸出PWM信號(hào)
  12. //sbit k1=P3^3;
  13. sbit led=P2^0;

  14.     u8 a,b,c;

  15. void uart_init()
  16. {
  17.   TMOD|=0x20;
  18.   PCON =0x00;
  19.   SCON = 0x50;
  20.   TH1 = 0xFd;  //設(shè)置波特率 9600
  21.   TL1 = 0xFd;
  22.   TR1 = 1;     //啟動(dòng)定時(shí)器1
  23.   ES = 1;      //開(kāi)串口中斷
  24.   EA = 1;      //開(kāi)總中斷
  25. }

  26. void uart() interrupt 4
  27. {
  28.         if(RI==1)
  29.         RI=0;
  30.         a=SBUF;
  31. }

  32. void InitTimer()
  33. {
  34.         TMOD|=0x01;//開(kāi)定時(shí)器0,1
  35.         TH0=0xff;//定時(shí)1.5MS,這時(shí)舵機(jī)處于0度
  36.         TL0=0xf6;
  37.         EA=1;//開(kāi)總斷
  38.         TR0=1;//開(kāi)定時(shí)器0
  39.         ET0=1;
  40. }
  41. void timer0() interrupt 1//定時(shí)器0中斷函數(shù)
  42. {
  43.         TH0=0xff;//定時(shí)1.5MS,這時(shí)舵機(jī)處于0度
  44.         TL0=0xf6;
  45.                 b++;
  46.             if(b==1) pwm=0;
  47.                 else if(b==2) pwm=1;
  48.                 else if(b==c) b=0;

  49. }

  50. void main()      
  51. {
  52.      InitTimer();
  53.          uart_init();
  54.   //   while(1)
  55.         {
  56.              if(a==0x01)
  57.                 {
  58.                 c=28;
  59.                 led=1;
  60.                 }       //左轉(zhuǎn) 28 2
  61.         else if(a==0x02)
  62.         {
  63.         c=62;         //右轉(zhuǎn)        62 2
  64.         led=0;
  65.         }
  66.         else if(a==0x00) c=51;   //中  51 2
  67.       
  68.         }
  69.   }         

復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:387733 發(fā)表于 2018-10-13 20:13 | 只看該作者
兩個(gè)中斷是不會(huì)沖突的,但是while(1)這條語(yǔ)句不能去掉,去掉以后程序沒(méi)有主循環(huán),就會(huì)不斷復(fù)位

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:403398 發(fā)表于 2018-10-14 16:34 | 只看該作者
sxhwdz 發(fā)表于 2018-10-13 20:13
兩個(gè)中斷是不會(huì)沖突的,但是while(1)這條語(yǔ)句不能去掉,去掉以后程序沒(méi)有主循環(huán),就會(huì)不斷復(fù)位

while(1)那里是我后來(lái)去掉的,,,加上兩個(gè)中斷也會(huì)沖突。后來(lái)我在初始化時(shí)就把定時(shí)器中斷關(guān)上,用的時(shí)候在打開(kāi),就可以實(shí)現(xiàn)兩個(gè)同時(shí)工作。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:123289 發(fā)表于 2018-10-14 21:04 | 只看該作者
可以同時(shí)用,看你如何正確地處理這兩個(gè)中斷。

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:403398 發(fā)表于 2018-10-24 18:40 | 只看該作者
今天忽然想起這個(gè)帖子了。這個(gè)問(wèn)題我自己已經(jīng)解決了。之所以不能使用串口中斷,是因?yàn)槲业亩〞r(shí)器設(shè)置太小,已經(jīng)等于小于機(jī)器周期。而定時(shí)器中斷優(yōu)先級(jí)高于串口中斷,所以不能執(zhí)行串口中斷。解決方法1定時(shí)器時(shí)間改長(zhǎng)一點(diǎn)2把串口優(yōu)先級(jí)設(shè)高于定時(shí)器。

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
yousunny + 5 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:275910 發(fā)表于 2018-10-26 20:28 | 只看該作者
while(1)那里是我后來(lái)去掉的,,,加上兩個(gè)中斷也會(huì)沖突。后來(lái)我在初始化時(shí)就把定時(shí)器中斷關(guān)上,用的時(shí)候在打開(kāi),就可以實(shí)現(xiàn)兩個(gè)
回復(fù)

使用道具 舉報(bào)

7#
ID:416027 發(fā)表于 2018-10-26 21:12 | 只看該作者
單片機(jī)的每一個(gè)時(shí)刻他只能做一件事。如果單片機(jī)可以同時(shí)干多件事那它就不需要中斷了
回復(fù)

使用道具 舉報(bào)

8#
ID:92867 發(fā)表于 2018-10-26 22:41 | 只看該作者
參考一波,有幫助。。。。。。
回復(fù)

使用道具 舉報(bào)

9#
ID:416062 發(fā)表于 2018-10-27 00:21 | 只看該作者
定時(shí)器的中斷優(yōu)先級(jí)高于串口
回復(fù)

使用道具 舉報(bào)

10#
ID:244512 發(fā)表于 2018-10-27 10:57 | 只看該作者
中斷是不可以同時(shí)用的。但可以設(shè)置優(yōu)先級(jí),讓優(yōu)先級(jí)高的任務(wù)先運(yùn)行。
回復(fù)

使用道具 舉報(bào)

11#
ID:407305 發(fā)表于 2018-12-22 23:15 | 只看該作者
樓主我遇到跟你差不多的問(wèn)題,我的是可以不斷進(jìn)入串口中斷,定時(shí)器0的中斷能進(jìn)第一次后面就進(jìn)不了了,我該怎么改啊。困擾挺久了
回復(fù)

使用道具 舉報(bào)

12#
ID:478236 發(fā)表于 2019-3-9 21:10 | 只看該作者
maoni99999 發(fā)表于 2018-12-22 23:15
樓主我遇到跟你差不多的問(wèn)題,我的是可以不斷進(jìn)入串口中斷,定時(shí)器0的中斷能進(jìn)第一次后面就進(jìn)不了了,我該 ...

我的也是這種情況
回復(fù)

使用道具 舉報(bào)

13#
ID:478236 發(fā)表于 2019-3-9 21:11 | 只看該作者
maoni99999 發(fā)表于 2018-12-22 23:15
樓主我遇到跟你差不多的問(wèn)題,我的是可以不斷進(jìn)入串口中斷,定時(shí)器0的中斷能進(jìn)第一次后面就進(jìn)不了了,我該 ...

我覺(jué)得可能是我們?cè)诖谥袛嗄睦锊欢P(guān)了什么,導(dǎo)致中斷溢出后不復(fù)位或者說(shuō)清零
回復(fù)

使用道具 舉報(bào)

14#
ID:234075 發(fā)表于 2019-3-10 00:46 | 只看該作者
        TH0=0xff;//定時(shí)1.5MS,這時(shí)舵機(jī)處于0度
        TL0=0xf6;
這樣的初值設(shè)定有問(wèn)題,使用的定時(shí)器0,中斷優(yōu)先級(jí)最高,中斷觸發(fā)過(guò)于頻繁,程序幾乎一直都在處理T0中斷,其他程序(中斷)幾乎都無(wú)法運(yùn)行了
回復(fù)

使用道具 舉報(bào)

15#
ID:471889 發(fā)表于 2019-3-10 07:31 | 只看該作者
應(yīng)該還是程序的邏輯沒(méi)理清所致

評(píng)分

參與人數(shù) 3黑幣 +40 收起 理由
正規(guī)007 + 10 很給力!
刀刀見(jiàn)紅 + 14
shuisheng60 + 16 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

16#
ID:104472 發(fā)表于 2019-3-10 09:18 | 只看該作者
可以同時(shí)使用,就是要設(shè)定好時(shí)間和優(yōu)先級(jí)。
回復(fù)

使用道具 舉報(bào)

17#
ID:610753 發(fā)表于 2019-10-9 10:38 | 只看該作者
因?yàn)橐O(shè)置優(yōu)先級(jí)
回復(fù)

使用道具 舉報(bào)

18#
ID:308301 發(fā)表于 2020-5-3 19:20 | 只看該作者
樓主牛逼,我的問(wèn)題也解決了
回復(fù)

使用道具 舉報(bào)

19#
ID:582723 發(fā)表于 2020-6-3 10:03 | 只看該作者
定時(shí)器TR0=1后串口不能運(yùn)行了,怎么處理啊
回復(fù)

使用道具 舉報(bào)

20#
ID:991860 發(fā)表于 2022-1-28 22:29 | 只看該作者
maoni99999 發(fā)表于 2018-12-22 23:15
樓主我遇到跟你差不多的問(wèn)題,我的是可以不斷進(jìn)入串口中斷,定時(shí)器0的中斷能進(jìn)第一次后面就進(jìn)不了了,我該 ...

請(qǐng)問(wèn)這個(gè)問(wèn)題解決了嗎  我也是這樣  進(jìn)入串口后 定時(shí)器就不工作了   進(jìn)入串口前可以
回復(fù)

使用道具 舉報(bào)

21#
ID:625730 發(fā)表于 2022-1-29 19:13 | 只看該作者
15615615 發(fā)表于 2022-1-28 22:29
請(qǐng)問(wèn)這個(gè)問(wèn)題解決了嗎  我也是這樣  進(jìn)入串口后 定時(shí)器就不工作了   進(jìn)入串口前可以

把代碼貼上來(lái)看看。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表