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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請師傅們看看郭天祥的這個串口程序有沒有問題?

[復制鏈接]
跳轉到指定樓層
樓主
ID:204280 發表于 2017-6-2 22:21 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
發什么數字蜂鳴器都是以同樣的頻率響,問題出在哪里?請高手指點
#include<reg52.h>
unsigned char flag,a,num,benum;
sbit beep=P2^3;
void main()
{

        TMOD=0x21;//設置定時器1為工作方式2
        TH1=0xfd;
        TL1=0xfd;
        TH0=(65536-50000)/255;
        TL0=(65536-50000)%255;
        TR1=1;
        ET0=1;
        SM0=0;
        SM1=1;
        REN=1;
        EA=1;
        ES=1;
        while(1)
        {
                if(flag==1)
                {
                        EA=0;
                        flag=0;
                        TR0=1;
                        if(a==1)
                                benum=4;
                        if(a==2)
                                benum=2;
                        if(a==3)
                                benum=1;
                        if(a==4)
                        {
                                TR0=0;
                                beep=1;       
                        }
                        EA=1;
                }
        }
}

void ser() interrupt 4
{
        RI=0;
        a=SBUF;
        flag=1;
}

void time0() interrupt 1
{
        TH0=(65536-50000)/255;
        TL0=(65536-50000)%255;
        num++;
        if(num>=benum)
        {
                num=0;
                beep=~beep;
        }       
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:204280 發表于 2017-6-3 08:28 來自手機 | 只看該作者
高手幫忙啊
回復

使用道具 舉報

板凳
ID:164602 發表于 2017-6-3 10:28 | 只看該作者

經過仔細研究,程序是沒有問題的。
但為什么不對?主要在串口出了問題。
第一:我的板子晶振12M,串口通訊必須,就是必須,波特率小于等于4800,必須,就是必須加倍。這樣串口通訊誤差才小,不然,根本認不到你輸入的數據。
第二:你的程序定時器值的計算,也有一點點問題,我已經改過來了,雖然在這個程序中不影響效果,換個地方就不行了。
第三:你的定時器定時太長了,蜂鳴器根本就不是響,而是在“敲”
我修改的程序如下:
#include<reg52.h>
unsigned char flag,a,num,benum;
sbit beep=P1^5;//這是我的蜂鳴器口,你改回你的口
void main()
{

        TMOD=0x21;//設置定時器1為工作方式2
        PCON=0x80;//波特率加倍
                TH1=0xf3;//波特率4800
        TL1=0xf3;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;//紅色是我做的修改
        TR1=1;
        ET0=1;
        SM0=0;
        SM1=1;
        REN=1;
        EA=1;
        ES=1;
        while(1)
        {
                if(flag==1)
                {
                        EA=0;
                        flag=0;
                        TR0=1;
                        if(a==1)
                                benum=4;
                        if(a==2)
                                benum=2;
                        if(a==3)
                                benum=1;
                        if(a==4)
                        {
                                TR0=0;
                                beep=1;        
                        }
                        EA=1;
                }
        }
}

void ser() interrupt 4
{
        RI=0;
        a=SBUF;
        flag=1;
}

void time0() interrupt 1
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        num++;
        if(num>=benum)
        {
                num=0;
                beep=~beep;
        }        
}


特別注意:你在試驗時,串口通訊的軟件要選擇好,我用的STC下載軟件的串口通訊功能頁,發送HEX數據模式,4800波特率。就可以成功了
你說的只有一種聲音,關鍵是串口根本沒有認到你輸出的數據,所以沒有反應。
回復

使用道具 舉報

地板
ID:164602 發表于 2017-6-3 11:09 | 只看該作者
剛才重點想程序去了,沒有把波特率為什么那么設置說清楚,補充一下。
在本站的下載的波特率計算器,計算就可以知道:
第一:對于51單片機的晶振為11.0592MHz時,任何波特率都可以,誤差都為零。高波特率時,加倍反而誤差大。
第二:對于晶振為12MHz的,波特率一大,誤差就很大,即,你發送的數據,當51單片機接收到時,已經變成另一個數據了,所以就不能完成相應的控制。你原來的程序就是這樣(我猜,你的晶振也是12M的),而原來的波特率為9600,看看我截取的圖片,就可以知道誤差多大。所以,必須小于等于4800,這是我試驗出來的最大波特率、且誤差最小。
第三:原程序為什么只有一個聲音?就是因為串口輸送的數據,單片機接收到的是錯的,所以只以初始化的數據在發聲音,我試驗過,輸送任何數據都是一個聲音,關不了(原程序輸送4是關聲音)。改為4800且加倍的波特率后,就好了。
可能當時郭天祥老師在做這個例子時,是講過這個內容的,只不過我們沒有看到罷了。

1.jpg (16.31 KB, 下載次數: 79)

1.jpg

2.jpg (15.96 KB, 下載次數: 102)

2.jpg

3.jpg (15.83 KB, 下載次數: 87)

3.jpg

4.jpg (16.42 KB, 下載次數: 106)

4.jpg

5.jpg (16.27 KB, 下載次數: 83)

5.jpg

6.jpg (15.25 KB, 下載次數: 91)

6.jpg
回復

使用道具 舉報

5#
ID:47286 發表于 2017-6-3 14:02 | 只看該作者
HC6800-ES-V2.0 發表于 2017-6-3 11:09
剛才重點想程序去了,沒有把波特率為什么那么設置說清楚,補充一下。
在本站的下載的波特率計算器,計算就 ...

前輩這活干的是真仔細啊
回復

使用道具 舉報

6#
ID:47286 發表于 2017-6-3 14:04 | 只看該作者
HC6800-ES-V2.0 發表于 2017-6-3 10:28
經過仔細研究,程序是沒有問題的。
但為什么不對?主要在串口出了問題。
第一:我的板子晶振12M,串口 ...

我覺得他那程序沒問題 255也好 256也好 對于這種程序只是誤差大小 聲音長短總是會變 即便不準也不會一樣 他都一個聲 應該是串口通信波特率的問題 單片機沒收到正確指令 沒執行對應的動作
回復

使用道具 舉報

7#
ID:207378 發表于 2017-6-3 14:22 | 只看該作者
應該沒有問題呀
回復

使用道具 舉報

8#
ID:204280 發表于 2017-6-3 16:05 來自手機 | 只看該作者
HC6800-ES-V2.0 發表于 2017-6-3 11:09
剛才重點想程序去了,沒有把波特率為什么那么設置說清楚,補充一下。
在本站的下載的波特率計算器,計算就 ...

非常感謝您的指點!謝謝!
回復

使用道具 舉報

9#
ID:143694 發表于 2017-10-26 23:21 來自手機 | 只看該作者
這么認真的解答,頂起!!!
回復

使用道具 舉報

10#
ID:213173 發表于 2017-10-27 08:59 | 只看該作者
樓主和樓上的壇友都有所誤讀此程序:
1.這個程序是針對天祥實驗板寫的,波特率9600,板上晶振11.0592MHz。
2..這個程序除了二樓指出的瑕疵外沒有其它毛病,原作者本意寫的是50ms定時器, TH0=(65536-50000)/256;
TL0=(65536-50000)%256; 所以二樓把50000改成1000是不對的。對二樓鉆研精神表示贊賞。
3.天祥實驗板上使用的是有源蜂鳴器,所以鳴響頻率是固定的,此程序只是演示通過串口控制蜂鳴器按不同節拍間歇鳴響和停止,不是要改變鳴響頻率。
4.此程序經實測滿足設計意圖。
回復

使用道具 舉報

11#
ID:1070602 發表于 2023-5-17 22:43 來自手機 | 只看該作者
如果單片機通過藍牙模塊傳輸數據,數據大了30左右是哪里出問題了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久蜜柚 | 人妖无码 | 色综久久 | 亚洲视频免费在线 | 免费精品视频在线观看 | 日本不卡一区二区三区 | 国产我和子的乱视频网站 | 日韩欧美福利视频 | 亚洲一区二区三区四区五区中文 | 成人午夜av| 日韩精品在线一区 | 亚洲成av片人久久久 | 噜噜噜噜狠狠狠7777视频 | 国产一区影院 | 国产原创视频 | 精品一区二区三区入口 | 欧美 日韩精品 | 黄色免费网 | 91亚洲一区 | 激情综合五月天 | 视频在线一区二区 | 一区不卡在线观看 | 婷婷精品 | 97久久精品午夜一区二区 | 色屁屁在线观看 | 欧美全黄 | 亚州一区二区三区 | 夜夜夜操 | 欧美日韩在线看 | 国产精彩视频 | 国产91精品网站 | 中文字幕一区二区三区四区 | 黄色av大片| 视频精品一区二区三区 | 久久婷婷色 | 免费成人在线网站 | 久久久久久久久淑女av国产精品 | 亚洲一区二区在线播放 | 黄色成人在线观看 | 日韩欧美网 | 亚洲成人免费av |