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

QQ登錄

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

搜索
查看: 4501|回復(fù): 5
收起左側(cè)

為啥我的單片機(jī)代碼在一個(gè)死循環(huán)中,但是卻只執(zhí)行了一次,百思不得其解

[復(fù)制鏈接]
ID:141296 發(fā)表于 2018-4-15 22:36 | 顯示全部樓層 |閱讀模式
單片機(jī)代碼如下:
  1. #include<main.h>
  2. void InitUART(void)
  3. {
  4.     TMOD = 0x20;
  5.     SCON = 0x40;
  6.     TH1 = 0xFF;
  7.     TL1 = TH1;
  8.     PCON = 0x80;
  9.     EA = 1;
  10.     ES = 1;
  11.     TR1 = 1;
  12. }
  13. void SendOneByte(unsigned char c)
  14. {
  15.     SBUF = c;
  16.     while(!TI);
  17.     TI = 0;
  18. }
  19. void UARTInterrupt(void) interrupt 4
  20. {
  21.     if(RI)
  22.     {
  23.         RI = 0;
  24.         //add your code here!
  25.     }
  26.     else
  27.         TI = 0;
  28. }
  29. void main()
  30. {
  31.         uchar i;
  32.         InitUART();        
  33.         while(1)
  34.         {
  35.         #include<main.h>
  36. void InitUART(void)
  37. {
  38.     TMOD = 0x20;
  39.     SCON = 0x40;
  40.     TH1 = 0xFF;
  41.     TL1 = TH1;
  42.     PCON = 0x80;
  43.     EA = 1;
  44.     ES = 1;
  45.     TR1 = 1;
  46. }
  47. void SendOneByte(unsigned char c)
  48. {
  49.     SBUF = c;
  50.     while(!TI);
  51.     TI = 0;
  52. }
  53. void UARTInterrupt(void) interrupt 4
  54. {
  55.     if(RI)
  56.     {
  57.         RI = 0;
  58.         //add your code here!
  59.     }
  60.     else
  61.         TI = 0;
  62. }
  63. void main()
  64. {
  65.         uchar i;
  66.         InitUART();        
  67.         while(1)//這里是死循環(huán),但是塊內(nèi)代碼就只執(zhí)行了一次,串行口只發(fā)送了一次數(shù)據(jù),請(qǐng)問(wèn)是什么原因
  68.        {        
  69.              DTH11_Ready();                        
  70.              for(i=0;i<5;i++)
  71.             {
  72.                    SendOneByte(DTH11_DATA[i]);        
  73.             }
  74.                         
  75.         }

  76. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2018-4-15 23:56 | 顯示全部樓層
在keil里面單步 或者用仿真芯片硬件仿真就可以知道答案了
回復(fù)

使用道具 舉報(bào)

ID:308785 發(fā)表于 2018-4-16 00:08 | 顯示全部樓層
中間可以不看,你就在死循環(huán)里面搞一個(gè)i++或者其他的看能不能執(zhí)行,可以執(zhí)行說(shuō)明你的串口通訊程序有問(wèn)題

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:287575 發(fā)表于 2018-4-16 00:09 | 顯示全部樓層
你的程序結(jié)構(gòu)就只能發(fā)送一次,錯(cuò)誤是你在中斷里寫(xiě)了else TI=0,當(dāng)你發(fā)送完一個(gè)字節(jié)后,馬上進(jìn)入中斷,此時(shí)因沒(méi)有接收中斷,只能是發(fā)送完成中斷了,你把TI=0,而你的SENDONEBYTE()里邊傻乎乎的等TI為1呢,TI早讓別人清零了,所有去掉中斷里的ELSE TI=0就可以了

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:308951 發(fā)表于 2018-4-16 08:33 來(lái)自觸屏版 | 顯示全部樓層
有可能你的中斷益出不在執(zhí)行
回復(fù)

使用道具 舉報(bào)

ID:309009 發(fā)表于 2018-4-16 10:01 | 顯示全部樓層
一般要給點(diǎn)delay
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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