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

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

QQ登錄

只需一步,快速開始

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

51單片機(jī)語(yǔ)音和舵機(jī)程序調(diào)試問題

[復(fù)制鏈接]
ID:966442 發(fā)表于 2022-7-7 16:58 | 顯示全部樓層 |閱讀模式
150黑幣
我有一個(gè)LD3320它是一個(gè)語(yǔ)音模塊,我只要給它一個(gè)命令詞,例如我說開啟,他就發(fā)送0xAA給我的51單片機(jī),然后我想的是我單片機(jī)通過串口讀取到它發(fā)給我的數(shù)據(jù),也就是0xAA,然后去控制舵機(jī)去做一些操作。現(xiàn)在的問題是當(dāng)我說完后0xAA會(huì)在STC-ISP的串口助手的接收緩沖區(qū)顯示,但是舵機(jī)沒有任何反應(yīng),且舵機(jī)是鎖死的狀態(tài),我需要在發(fā)送緩沖區(qū)手動(dòng)輸入AA才可以讓舵機(jī)動(dòng)起來(lái)但是它又會(huì)轉(zhuǎn)回去。簡(jiǎn)單來(lái)說就是我讀到串口的數(shù)據(jù)就可以對(duì)舵機(jī)進(jìn)行操作,而不是我還要手動(dòng)輸入才可以進(jìn)行操作,請(qǐng)問怎么辦啊?

單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. sbit SG_PWM=P1^0;
  3. unsigned char count=0;
  4. unsigned char temp;
  5. unsigned char PWM_count=1;             //1--0度,2--45度,3--90度,4--135度,5--180度
  6. void Uart1Init(void)                //9600bps@11.05926MHz
  7. {
  8.         SCON = 0x50;                //
  9.         TMOD &= 0x0F;
  10.         TMOD |= 0x20;                //
  11.         TL1 = 0xFD;                  //
  12.         TH1 = 0xFD;                  //
  13.         ET1 = 0;                    //
  14.         TR1 = 1;                    //
  15.   ES=1;                                        //
  16.         EA = 1;
  17. }
  18. void UART_SendData(unsigned char dat)
  19. {
  20.                 SBUF=dat;                        
  21.                 while(!TI);        //等待發(fā)送成功
  22.                 TI=0;                                        //清除發(fā)送中斷標(biāo)志
  23. }
  24. void Timer_Init()
  25. {
  26.   TMOD &= 0xF0;               
  27.         TMOD |= 0x01;                //
  28.   TH0=0Xfe;
  29.   TL0=0X33;       //計(jì)數(shù)初值設(shè)置為0.5ms          每0.5ms進(jìn)入一次中斷,晶振頻率:11.0592MHZ
  30.   ET0=1;          //打開定時(shí)器0的中斷
  31.   TR0=1;          //打開定時(shí)器0
  32. }
  33. void main()
  34. {
  35.                 Timer_Init();
  36.                 Uart1Init();        
  37.                 while(1)
  38.                 {
  39.                                 
  40.                 }
  41. }
  42. void Timer0_Interrupt() interrupt 1
  43. {
  44.                 TR0=0;
  45.                 TH0=0Xfe;
  46.                 TL0=0X33;       //重新賦計(jì)數(shù)初值為0.5ms
  47.                 if(count<=PWM_count)
  48.                 {
  49.                         SG_PWM=1;
  50.                 }
  51.                 else
  52.                 {
  53.                         SG_PWM=0;
  54.                 }
  55.           count++;
  56.                 if(count>=40)
  57.                 {
  58.                         count=0;
  59.                 }
  60.                 TR0=1;
  61. }
  62. void Uart_Interrupt() interrupt 4
  63. {
  64.                 if(RI)
  65.                 {
  66.                                 RI = 0;
  67.                                 temp = SBUF;
  68.                                 if(temp==0xAA)
  69.                                 {
  70.                                                 PWM_count=1;
  71.                                                 count=0;
  72.                                 }
  73.                                 else if(temp==0xBB)
  74.                                 {
  75.                                                 PWM_count=3;
  76.                                                 count=0;
  77.                                 }
  78.                 }
  79.                 if(TI)
  80.                 {
  81.                                 TI = 0;
  82.                 }
  83. }  
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-7-7 17:44 | 顯示全部樓層
當(dāng)我說完后0xAA會(huì)在STC-ISP的串口助手的接收緩沖區(qū)顯示,
但是舵機(jī)沒有任何反應(yīng),且舵機(jī)是鎖死的狀態(tài),
我需要在發(fā)送緩沖區(qū)手動(dòng)輸入AA才可以讓舵機(jī)動(dòng)起來(lái)但是它又會(huì)轉(zhuǎn)回去

這代表了你單片機(jī)的Tx/Rx引腳接錯(cuò)了
STC-ISP收到0xAA:語(yǔ)音模塊(Tx)->(Rx)STC-ISP
舵機(jī)動(dòng)起來(lái):STC-ISP(Tx)->(Rx)單片機(jī)
WhatsApp Image 2022-07-07 at 5.43.09 PM.jpeg


回復(fù)

使用道具 舉報(bào)

ID:966442 發(fā)表于 2022-7-7 18:34 | 顯示全部樓層
lkc8210 發(fā)表于 2022-7-7 17:44
當(dāng)我說完后0xAA會(huì)在STC-ISP的串口助手的接收緩沖區(qū)顯示,
但是舵機(jī)沒有任何反應(yīng),且舵機(jī)是鎖死的狀態(tài),
...

大佬厲害,確實(shí)是接錯(cuò)了,我把名字給記錯(cuò)了,接對(duì)后舵機(jī)確實(shí)能按著話來(lái)動(dòng),但是它動(dòng)到另一邊之后馬上又返回去,在此期間語(yǔ)音模塊概率性出現(xiàn)說話只說一半就不說的情況,無(wú)論后面我怎么說話舵機(jī)和語(yǔ)音模塊都沒反應(yīng),需要我重新再說一遍命令詞才有反應(yīng),但是這又陷入了前面的循環(huán),這怎么搞?
回復(fù)

使用道具 舉報(bào)

ID:966442 發(fā)表于 2022-7-8 09:14 | 顯示全部樓層
串口和定時(shí)器好像有沖突但是試了很久也沒搞好,咋搞
回復(fù)

使用道具 舉報(bào)

ID:13282 發(fā)表于 2022-7-8 09:42 | 顯示全部樓層
電子浪人 發(fā)表于 2022-7-7 18:34
大佬厲害,確實(shí)是接錯(cuò)了,我把名字給記錯(cuò)了,接對(duì)后舵機(jī)確實(shí)能按著話來(lái)動(dòng),但是它動(dòng)到另一邊之后馬上又返 ...

定時(shí)、記次,在一定時(shí)間內(nèi)接收的0xAA, 不管接收幾次, 只算一次就可以了。
回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2022-7-8 11:00 | 顯示全部樓層
電子浪人 發(fā)表于 2022-7-7 18:34
大佬厲害,確實(shí)是接錯(cuò)了,我把名字給記錯(cuò)了,接對(duì)后舵機(jī)確實(shí)能按著話來(lái)動(dòng),但是它動(dòng)到另一邊之后馬上又返 ...

1、"我需要在發(fā)送緩沖區(qū)手動(dòng)輸入AA才可以讓舵機(jī)動(dòng)起來(lái)但是它又會(huì)轉(zhuǎn)回去"與語(yǔ)音指令一樣疑似編程有問題
2、“在此期間語(yǔ)音模塊概率性出現(xiàn)說話只說一半就不說的情況”更換其他類型的語(yǔ)音模塊更好用
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-7-8 11:04 | 顯示全部樓層
電子浪人 發(fā)表于 2022-7-7 18:34
大佬厲害,確實(shí)是接錯(cuò)了,我把名字給記錯(cuò)了,接對(duì)后舵機(jī)確實(shí)能按著話來(lái)動(dòng),但是它動(dòng)到另一邊之后馬上又返 ...

這樣改看看

  1. #include <reg52.h>
  2. sbit SG_PWM=P1^0;
  3. unsigned char count=0;
  4. unsigned char temp;
  5. unsigned char PWM_count=1;             //1--0度,2--45度,3--90度,4--135度,5--180度
  6. void Uart1Init(void)                //9600bps@11.05926MHz
  7. {
  8.     SCON = 0x50;                //
  9.     TMOD &= 0x0F;
  10.     TMOD |= 0x20;                //
  11.     TL1 = 0xFD;                  //
  12.     TH1 = 0xFD;                  //
  13.     ET1 = 0;                    //
  14.     TR1 = 1;                    //
  15.     ES=1;                                        //
  16.     EA = 1;
  17. }
  18. void UART_SendData(unsigned char dat)
  19. {
  20.     SBUF=dat;
  21.     while(!TI);        //等待發(fā)送成功
  22.     TI=0;                                        //清除發(fā)送中斷標(biāo)志
  23. }
  24. void Timer_Init()
  25. {
  26.     TMOD &= 0xF0;
  27.     TMOD |= 0x01;                //
  28.     TH0=0Xfe;
  29.     TL0=0X33;       //計(jì)數(shù)初值設(shè)置為0.5ms          每0.5ms進(jìn)入一次中斷,晶振頻率:11.0592MHZ
  30.     ET0=1;          //打開定時(shí)器0的中斷
  31.     TR0=1;          //打開定時(shí)器0
  32. }
  33. void main()
  34. {
  35.     Timer_Init();
  36.     Uart1Init();
  37.     while(1)
  38.     {

  39.         if(temp==0xAA)
  40.         {
  41.             PWM_count=1;
  42.             temp=0;
  43.         }
  44.         if(temp==0xBB)
  45.         {
  46.             PWM_count=3;
  47.             temp=0;
  48.         }
  49.     }
  50. }
  51. void Timer0_Interrupt() interrupt 1
  52. {
  53.     TH0=0Xfe;
  54.     TL0=0X33;       //重新賦計(jì)數(shù)初值為0.5ms
  55.     if(count<=PWM_count)
  56.     {
  57.         SG_PWM=1;
  58.     }
  59.     else
  60.     {
  61.         SG_PWM=0;
  62.     }
  63.     count++;
  64.     if(count>=40)
  65.     {
  66.         count=0;
  67.     }
  68. }
  69. void Uart_Interrupt() interrupt 4
  70. {
  71.     if(RI)
  72.     {
  73.         RI = 0;
  74.         temp = SBUF;
  75.     }
  76.     if(TI)
  77.     {
  78.         TI = 0;
  79.     }
  80. }


復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:966442 發(fā)表于 2022-7-8 14:14 | 顯示全部樓層

我喊開啟時(shí),模塊會(huì)發(fā)送0xBB給我的單片機(jī),我喊了之后,舵機(jī)動(dòng)是動(dòng)起來(lái)了,但是它自動(dòng)又往回走
回復(fù)

使用道具 舉報(bào)

ID:966442 發(fā)表于 2022-7-8 18:10 | 顯示全部樓層

這是我在網(wǎng)上找到的代碼,穩(wěn)定性還可以吧
回復(fù)

使用道具 舉報(bào)

ID:966442 發(fā)表于 2022-7-8 18:11 | 顯示全部樓層
  1. /*
  2.                         模擬舵機(jī)控制原理:0~180°
  3.                                 0.5ms-----0度
  4.                                 1.0ms-----45度
  5.                                 1.5ms-----90度
  6.                                 2.0ms-----135度
  7.                                 2.5ms-----180度
  8. */

  9. #include <REGX52.H>
  10. #include "timer0.h"
  11. #include "Uart.h"

  12. sbit SG_PWM=P2^0;                                                        //信號(hào)控制引腳
  13. unsigned char count=0;                                             //計(jì)次  賦初值為0
  14. unsigned char PWM_count=0;                  //0--0度,2--45度,4--90度,6--135度,8--180度

  15. void main()
  16. {
  17.   Timer0_Init();
  18.   Uart_Init();
  19.   while(1)
  20.   {
  21.                
  22.    }
  23. }

  24. void Timer0() interrupt 1      //特別注意此處,0--外部中斷0,1--定時(shí)器中斷0,2--外部中斷1,3--定時(shí)器中斷1,4--串行口中斷1
  25. {
  26.   
  27.   TL0 = 0x33;               
  28.   TH0 = 0xFE;                                 //重新賦計(jì)數(shù)初值為0.5ms
  29.   
  30.   count++;                                        //計(jì)次,每500us  count+1
  31.         count%=40;                                //周期為20ms
  32.        
  33.   if(count<PWM_count)
  34.   {                                                                       
  35.     SG_PWM=1;
  36.   }
  37.   else
  38.   {
  39.     SG_PWM=0;
  40.   }
  41. }


  42. void UART_Routine()  interrupt 4        //串口中斷服務(wù)函數(shù)
  43. {       
  44.         if(RI==1)                                                //如果接收中斷標(biāo)志位為1
  45.         {       
  46.           P1=SBUF;                                           //發(fā)送的數(shù)據(jù)SBUF,賦給P1
  47.          if(P1==0XAA)                                   //0x01這個(gè)值可以通過藍(lán)牙調(diào)試器編輯模式設(shè)置
  48.          {
  49.            PWM_count=1;
  50.          }
  51.          if(P1==0X02)                                  
  52.          {
  53.            PWM_count=2;
  54.          }
  55.          if(P1==0XBB)                                 
  56.          {
  57.            PWM_count=3;
  58.          }
  59.          if(P1==0X04)                                  
  60.          {
  61.            PWM_count=4;
  62.          }
  63.          if(P1==0X05)                                  
  64.          {
  65.            PWM_count=5;
  66.          }
  67.          
  68.           RI=0;                                                //接收中斷標(biāo)志位軟件清零
  69.         }
  70. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区不卡 | 欧洲精品久久久久毛片完整版 | 天天玩夜夜操 | 国产jizz女人多喷水99 | 成人综合一区二区 | 精品综合久久久 | 国产精品久久av | 尤物视频在线免费观看 | 国产精品国产三级国产aⅴ无密码 | 国产精品久久免费观看 | 激情一区二区三区 | 午夜一区二区三区 | 少妇精品亚洲一区二区成人 | 国产精品高潮呻吟久久久久 | 夜夜骑首页 | 搞黄网站在线观看 | 国产免费视频 | 国产一区二区在线播放视频 | 欧美黄视频 | 久久99精品久久久久蜜桃tv | 久久成人精品视频 | 久久99国产精品 | 91视频网址 | 国产黄色在线观看 | 狠狠色网 | 国产探花在线精品一区二区 | 国产欧美日韩视频 | 成人av电影天堂 | 午夜91| 精品国产一区久久 | 亚洲精久久| 久久精品一区二区三区四区 | 亚洲在线一区二区三区 | 91精品国产91久久久久久最新 | 国产精品一区二区福利视频 | 久久久人成影片一区二区三区 | 亚洲国产一区在线 | 婷婷91| 中文字幕在线视频一区二区三区 | 国产精品激情小视频 | 伊人中文字幕 |