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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3627|回復: 6
收起左側(cè)

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

[復制鏈接]
ID:306086 發(fā)表于 2021-3-24 20:47 | 顯示全部樓層 |閱讀模式
100黑幣
本帖最后由 Elilala 于 2021-3-25 10:00 編輯

使用PWM控制電機轉(zhuǎn)速,同時實時使用串口采集溫度。同時TR0=1,TR1=1時溫度采集出錯。將TR0=1注釋掉后正確,但是無法控制電機轉(zhuǎn)速,只能啟動。部分代碼如下:
  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

DS18B20.rar

117.12 KB, 下載次數(shù): 3

回復

使用道具 舉報

ID:306086 發(fā)表于 2021-3-24 20:48 | 顯示全部樓層
采用串口助手控制電機轉(zhuǎn)速與采集溫度。
2代表啟動,3反轉(zhuǎn),0加速,1減速,4停止,5復位。
回復

使用道具 舉報

ID:390416 發(fā)表于 2021-3-24 21:41 | 顯示全部樓層
DS18B20是串口?你確定沒搞錯?
回復

使用道具 舉報

ID:306086 發(fā)表于 2021-3-24 21:47 | 顯示全部樓層
將TMOD=0x21后能正確讀取溫度,并且可以控制風扇轉(zhuǎn)速,可是溫度讀取會偶爾出現(xiàn)錯誤。
回復

使用道具 舉報

ID:306086 發(fā)表于 2021-3-25 09:28 | 顯示全部樓層
人人學會單片機 發(fā)表于 2021-3-24 21:41
DS18B20是串口?你確定沒搞錯?

更新了一下代碼。DS18B20讀到的數(shù)據(jù)通過串口發(fā)送給上位機。
回復

使用道具 舉報

ID:811405 發(fā)表于 2021-3-25 16:03 | 顯示全部樓層
串口實時發(fā)送溫度值給上位機,每一次發(fā)送之間沒有時間間隔,當上位機通過串口下發(fā)指令時,串口被占用而產(chǎn)生錯誤

評分

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

查看全部評分

回復

使用道具 舉報

ID:390416 發(fā)表于 2021-3-25 16:14 | 顯示全部樓層
串口的發(fā)送 不能擁擠,比如9600波特率 發(fā)一個字節(jié)需要1ms  那么 連續(xù)兩次寫入SBUF 時間間隔必須大于1040us 。 可以看看我發(fā)的貼子, 串口發(fā)送不需要while 死等。提高CPU效率。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久一二区 | 亚洲 中文 欧美 日韩 在线观看 | 99久热在线精品视频观看 | 色综合天天综合网国产成人网 | 黄网站在线播放 | 成人欧美一区二区三区视频xxx | 天堂在线免费视频 | 91福利在线观看 | a在线视频| 久热精品在线播放 | 欧美日韩高清在线一区 | 亚洲一区二区三区桃乃木香奈 | 国产福利在线视频 | 91麻豆精品国产91久久久久久 | 网站国产 | 精品伦精品一区二区三区视频 | 在线观看成人小视频 | 日韩字幕一区 | 国产精品二区三区在线观看 | 日韩视频在线免费观看 | 成人午夜精品 | 中文字幕人成乱码在线观看 | 国产精品片aa在线观看 | 国产精品一区二区三区久久久 | 欧美亚洲另类在线 | 亚洲超碰在线观看 | 国产精品一区在线播放 | 国产日韩欧美 | 亚洲激情视频在线 | 一区二区三区在线电影 | 91免费版在线观看 | 精品欧美乱码久久久久久 | 国产欧美一区二区久久性色99 | 久久久蜜臀国产一区二区 | 中文字幕精品一区 | 巨大荫蒂视频欧美另类大 | 91精品久久 | 成人在线视频一区二区三区 | 国产日韩一区二区三区 | 91av亚洲| 一区二区视频 |