標(biāo)題: 單片機(jī)串口中斷和定時(shí)器中斷為什么不能同時(shí)使用 [打印本頁(yè)]

作者: 小小白白1號(hào)    時(shí)間: 2018-10-13 15:09
標(biāo)題: 單片機(jī)串口中斷和定時(shí)器中斷為什么不能同時(shí)使用
單片機(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;      //開串口中斷
  24.   EA = 1;      //開總中斷
  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;//開定時(shí)器0,1
  35.         TH0=0xff;//定時(shí)1.5MS,這時(shí)舵機(jī)處于0度
  36.         TL0=0xf6;
  37.         EA=1;//開總斷
  38.         TR0=1;//開定時(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ù)制代碼



作者: sxhwdz    時(shí)間: 2018-10-13 20:13
兩個(gè)中斷是不會(huì)沖突的,但是while(1)這條語(yǔ)句不能去掉,去掉以后程序沒有主循環(huán),就會(huì)不斷復(fù)位
作者: 小小白白1號(hào)    時(shí)間: 2018-10-14 16:34
sxhwdz 發(fā)表于 2018-10-13 20:13
兩個(gè)中斷是不會(huì)沖突的,但是while(1)這條語(yǔ)句不能去掉,去掉以后程序沒有主循環(huán),就會(huì)不斷復(fù)位

while(1)那里是我后來(lái)去掉的,,,加上兩個(gè)中斷也會(huì)沖突。后來(lái)我在初始化時(shí)就把定時(shí)器中斷關(guān)上,用的時(shí)候在打開,就可以實(shí)現(xiàn)兩個(gè)同時(shí)工作。
作者: yzwzfyz    時(shí)間: 2018-10-14 21:04
可以同時(shí)用,看你如何正確地處理這兩個(gè)中斷。
作者: 小小白白1號(hào)    時(shí)間: 2018-10-24 18:40
今天忽然想起這個(gè)帖子了。這個(gè)問題我自己已經(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í)器。
作者: 1987856545    時(shí)間: 2018-10-26 20:28
while(1)那里是我后來(lái)去掉的,,,加上兩個(gè)中斷也會(huì)沖突。后來(lái)我在初始化時(shí)就把定時(shí)器中斷關(guān)上,用的時(shí)候在打開,就可以實(shí)現(xiàn)兩個(gè)
作者: m3c    時(shí)間: 2018-10-26 21:12
單片機(jī)的每一個(gè)時(shí)刻他只能做一件事。如果單片機(jī)可以同時(shí)干多件事那它就不需要中斷了
作者: 422582774    時(shí)間: 2018-10-26 22:41
參考一波,有幫助。。。。。。
作者: XIERENJIE    時(shí)間: 2018-10-27 00:21
定時(shí)器的中斷優(yōu)先級(jí)高于串口
作者: luohongguan    時(shí)間: 2018-10-27 10:57
中斷是不可以同時(shí)用的。但可以設(shè)置優(yōu)先級(jí),讓優(yōu)先級(jí)高的任務(wù)先運(yùn)行。
作者: maoni99999    時(shí)間: 2018-12-22 23:15
樓主我遇到跟你差不多的問題,我的是可以不斷進(jìn)入串口中斷,定時(shí)器0的中斷能進(jìn)第一次后面就進(jìn)不了了,我該怎么改啊。困擾挺久了
作者: 菜用雞    時(shí)間: 2019-3-9 21:10
maoni99999 發(fā)表于 2018-12-22 23:15
樓主我遇到跟你差不多的問題,我的是可以不斷進(jìn)入串口中斷,定時(shí)器0的中斷能進(jìn)第一次后面就進(jìn)不了了,我該 ...

我的也是這種情況

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

我覺得可能是我們?cè)诖谥袛嗄睦锊欢P(guān)了什么,導(dǎo)致中斷溢出后不復(fù)位或者說(shuō)清零
作者: zhb2004xp    時(shí)間: 2019-3-10 00:46
        TH0=0xff;//定時(shí)1.5MS,這時(shí)舵機(jī)處于0度
        TL0=0xf6;
這樣的初值設(shè)定有問題,使用的定時(shí)器0,中斷優(yōu)先級(jí)最高,中斷觸發(fā)過(guò)于頻繁,程序幾乎一直都在處理T0中斷,其他程序(中斷)幾乎都無(wú)法運(yùn)行了
作者: 找人PK    時(shí)間: 2019-3-10 07:31
應(yīng)該還是程序的邏輯沒理清所致
作者: jiajuntao    時(shí)間: 2019-3-10 09:18
可以同時(shí)使用,就是要設(shè)定好時(shí)間和優(yōu)先級(jí)。
作者: 林宏偉    時(shí)間: 2019-10-9 10:38
因?yàn)橐O(shè)置優(yōu)先級(jí)
作者: AIYLE520    時(shí)間: 2020-5-3 19:20
樓主牛逼,我的問題也解決了

作者: huhuhu123    時(shí)間: 2020-6-3 10:03
定時(shí)器TR0=1后串口不能運(yùn)行了,怎么處理啊

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

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

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

把代碼貼上來(lái)看看。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1