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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3873|回復: 6
打印 上一主題 下一主題
收起左側

關于單片機定時器與串口中斷沖突

[復制鏈接]
跳轉到指定樓層
樓主
100黑幣
本帖最后由 Elilala 于 2021-3-25 10:00 編輯

使用PWM控制電機轉速,同時實時使用串口采集溫度。同時TR0=1,TR1=1時溫度采集出錯。將TR0=1注釋掉后正確,但是無法控制電機轉速,只能啟動。部分代碼如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "Delay.h"
  4. #include <ds18b20mul.h>
  5. #include <uart.h>
  6. #include "motor.h"
  7. #define uchar unsigned char
  8. #define uint unsigned int

  9. void delay(uint j)
  10. {
  11. uint x;
  12. for(x=0;x<j;x++);
  13. }        

  14. void uart(void) interrupt 4                 
  15. {
  16.         unsigned char recv_data
  17.         if(RI)  
  18.                 {
  19.                 RI=0;
  20. //                        revbuf[revlen]=SBUF
  21.                 recv_data = SBUF;           
  22.                 revbuf[revlen]=SBUF;
  23.                         if(revbuf[0]=='*'
  24.                         {
  25.                                 if((revlen<16)&&(revbuf[revlen]!='\r'))
  26.                                         revlen++;
  27.                                 else revover=1;
  28.                         }
  29. //                        else clearrevbuf();
  30.                         if(recv_data == '0'
  31.                         {                        
  32.                                 if(speedA>0)speedA-=2;
  33.                                 if(speedB>0)speedB-=2;
  34.                         }
  35.                         else if(recv_data == '1')
  36.                         {
  37.                                 if(speedA<=20)speedA+=2;
  38.                                 if(speedB<=20)speedB+=2;
  39.                         }                                 
  40.                         else if(recv_data == '2')
  41.                         {
  42.                                 motorA_forward();
  43.                                 motorB_forward();        
  44.                         }
  45.                         else if(recv_data == '3')
  46.                         {
  47.                                 motorA_reversal();
  48.                                 motorB_reversal();                                       
  49.                         }
  50.                         else if(recv_data == '4')
  51.                         {
  52.                                 speedA=20;
  53.                                 speedB=20;                                       
  54.                         }
  55.                         else if(recv_data == '5')
  56.                         {
  57.                                 speedA=10;
  58.                                 speedB=10;                                       
  59.                         }
  60.                 }
  61. //        else   
  62. //                {
  63. //                  TI=0;
  64. //                  //sending=0;
  65. //                }
  66.                 if(TI)
  67.                 {
  68.                         TI=0;
  69.                 }
  70.         }


  71. void main()
  72. {
  73. UARTinit()
  74. // motor_Init();
  75. while(1
  76. {
  77.            delay(500000)
  78.            GetData(1)
  79.            sendstring("*1:");
  80.            sendstring(dispBuf);sendstring("\r\n")
  81.            GetData(2); //
  82.            sendstring("*2:");
  83.            sendstring(dispBuf);sendstring("\r\n")
  84. }
  85. }
復制代碼







1616595601(1).jpg (288.24 KB, 下載次數: 90)

1616595601(1).jpg

DS18B20.rar

117.12 KB, 下載次數: 3

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

使用道具 舉報

沙發
ID:306086 發表于 2021-3-24 20:48 | 只看該作者
采用串口助手控制電機轉速與采集溫度。
2代表啟動,3反轉,0加速,1減速,4停止,5復位。
回復

使用道具 舉報

板凳
ID:390416 發表于 2021-3-24 21:41 | 只看該作者
DS18B20是串口?你確定沒搞錯?
回復

使用道具 舉報

地板
ID:306086 發表于 2021-3-24 21:47 | 只看該作者
將TMOD=0x21后能正確讀取溫度,并且可以控制風扇轉速,可是溫度讀取會偶爾出現錯誤。
回復

使用道具 舉報

5#
ID:306086 發表于 2021-3-25 09:28 | 只看該作者
人人學會單片機 發表于 2021-3-24 21:41
DS18B20是串口?你確定沒搞錯?

更新了一下代碼。DS18B20讀到的數據通過串口發送給上位機。
回復

使用道具 舉報

6#
ID:811405 發表于 2021-3-25 16:03 | 只看該作者
串口實時發送溫度值給上位機,每一次發送之間沒有時間間隔,當上位機通過串口下發指令時,串口被占用而產生錯誤

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:390416 發表于 2021-3-25 16:14 | 只看該作者
串口的發送 不能擁擠,比如9600波特率 發一個字節需要1ms  那么 連續兩次寫入SBUF 時間間隔必須大于1040us 。 可以看看我發的貼子, 串口發送不需要while 死等。提高CPU效率。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产超碰人人爽人人做人人爱 | m豆传媒在线链接观看 | 欧美激情啪啪 | 国产精品久久久久久久久免费高清 | 91在线免费视频 | 成人免费一区二区三区视频网站 | 国产精品久久精品 | 欧美日韩a | 久久亚洲国产精品日日av夜夜 | 日韩在线视频免费观看 | 一级毛片视频 | 欧美一级做性受免费大片免费 | 日本高清视频在线播放 | 成人精品国产 | 日韩久久成人 | 人人亚洲| 一区二区三区久久久 | 亚洲国产一区在线 | 蜜桃毛片| 久久久精 | 不卡一区二区三区四区 | 91精品一区二区三区久久久久久 | 成人国产免费视频 | jlzzjlzz欧美大全 | 国产精品久久久久久久久婷婷 | 久久久91 | 久久久精品一区 | 国产一区二区视频免费在线观看 | 福利视频网站 | 日韩视频精品在线 | 五月婷六月丁香 | 国产精品综合视频 | 伊人伊成久久人综合网站 | 天天操天天干天天曰 | 最新高清无码专区 | 精品日韩在线 | 奇米四色影视 | 99热.com| 天堂一区 | 午夜国产一级 | www.奇米|