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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

對講機模塊,用串口助手發AT命令,返回OK,用單片機發送,模塊沒有反應。

[復制鏈接]
跳轉到指定樓層
樓主
ID:704846 發表于 2021-2-28 15:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 51beginner 于 2021-2-28 21:05 編輯

一片對講機模塊,用串口助手發送AT+DMOVERQ,模塊返回版本信息,用單片機串口發送同樣的命令,對講機模塊沒有返回數據,通過串口助手查看這兩條命令的字符串,是一模一樣的,可結果不一樣。我要的結果是直接用單片機控制對講機模塊,而不是用電腦通過串口助手控制模塊,可是同樣的命令,結果卻不同,不知是電平問題還是程序問題,求大家給予指點。
#include<reg52.h>
// char code fs[]={"AT+DMOSETGROUP=0,409.7500,409.7500,02,3\r\n"} ;
unsigned char fs[]={"AT+DMOVERQ\r\n"};
unsigned int i,a,bz;

void csh()  //串口初始化
{
TMOD=0X20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}

void main()
{
csh();
while(1)
{
if(bz==1)
{
ES=0;
for (i=0;i<13;i++)
{
SBUF=fs;
while(!TI);
TI=0;
}
ES=1;
bz=0;
}
}
}
void chk() interrupt 4
{
RI=0;
a=SBUF;
bz=1;
}



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

使用道具 舉報

沙發
ID:213173 發表于 2021-2-28 17:44 | 只看該作者
你這串口中斷程序中a只能保存最后一個字符,前面的數據都被覆蓋了。要按字符串長度保存。

unsigned char js[x];//接收緩存,x=數據長度

void chk() interrupt 4
{
        static char num=0;
        RI=0;
        js[num]=SBUF;//收到的字符串按字節保存在緩存
        if(js[0]=='y')        //驗證數據頭,y=字符串首字節
        {
                num++;
                if(num>=x)//達到x長度,接收結束。
                {
                        num=0;
                        bz=1;
                }
        }
}
回復

使用道具 舉報

板凳
ID:704846 發表于 2021-2-28 21:15 | 只看該作者
wulin 發表于 2021-2-28 17:44
你這串口中斷程序中a只能保存最后一個字符,前面的數據都被覆蓋了。要按字符串長度保存。

unsigned char ...

我只是想用單片機發送AT命令控制對講機模塊,只要模塊對單片機發送的命令有響應就行,單片機不用接收返回的數據。
現在的情況就是,在串口助手里看到的兩個同樣字符串卻產生了不一樣的結果,應該有一個關鍵的步驟沒有做對,可我就是找不出來。很是郁悶。
回復

使用道具 舉報

地板
ID:213173 發表于 2021-3-1 08:01 | 只看該作者
51beginner 發表于 2021-2-28 21:15
我只是想用單片機發送AT命令控制對講機模塊,只要模塊對單片機發送的命令有響應就行,單片機不用接收返回 ...

串口只發不收不必開串口中斷。你原來程序是要等串口收到數據后bz=1;才能發送,不能主動發送。給你改為定時1秒發送一次。也可改為按鍵控制發送方式。
#include<reg52.h>
// char code fs[]={"AT+DMOSETGROUP=0,409.7500,409.7500,02,3\r\n"} ;
unsigned char fs[]={"AT+DMOVERQ\r\n"};
unsigned int i,a,bz;

void csh()  //串口初始化
{
        TMOD=0X21;
        TH1=0xfd;
        TL1=0xfd;
        TH0=0x4C;
        TL0=0x00;
        TR1=1;
        TR0=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
//        ES=1;
        ET0=1;
}

void main()
{
        csh();
        while(1)
        {
                if(bz==1)
                {
//                        ES=0;
                        for (i=0;i<13;i++)
                        {
                                SBUF=fs;
                                while(!TI);
                                TI=0;
                        }
//                        ES=1;
                        bz=0;
                }
        }
}
/*
void chk() interrupt 4
{
        RI=0;
        a=SBUF;
        bz=1;
}*/

void Timer0Interrupt(void) interrupt 1
{
        TH0=0x4C;
        TL0=0x00;
        a++;
        if(a>=20)//1秒
        {
                a=0;
                bz=1;
        }
}
回復

使用道具 舉報

5#
ID:704846 發表于 2021-3-1 22:02 | 只看該作者
真是聽君一席話,勝讀十年書,按照您的指導,關閉中斷,所有的問題迎刃而解,向您表示萬分的感謝。
單片機程序是按照 郭天祥 的教程移植的,用串口助手確定單片機能發出正確的命令字符串后,就再沒有仔細分析過,然后就開始折騰,先是買了5V轉3V的電平轉換模塊,不頂事,然后又自己做了個有三個接頭的杜邦線,連接串口助手,單片機和對講機模塊,看到一模一樣的字符串,卻產生不同的結果,很無奈。我已經把朋友的示波器搬回來,準備查看波形了,雖然我不懂怎么使用示波器。沒想到兜了這么大的一個圈子解決不了的問題,被你一句話,一個注釋符就完美解決了,看來論壇里還是有高人的。
再次向您表示感謝。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99综合在线| 欧美日韩亚洲一区 | 成人av激情 | 九九久久国产 | 麻豆亚洲 | 成人在线观看亚洲 | 一区二区国产精品 | 91精品国产综合久久福利软件 | 久久久久国产精品 | 中文字幕在线视频一区二区三区 | 国产精品久久久久久久久久 | 亚洲自拍一区在线观看 | 日日操操 | 欧美精品一区三区 | 久草视频在线播放 | 午夜亚洲 | 午夜激情在线 | 一区二区久久 | 天天干在线播放 | 国产综合久久 | 亚洲欧美日韩在线一区二区 | 午夜精品一区 | 91精品成人久久 | 亚洲一区精品在线 | 综合五月 | 中文字幕一区二区三区四区五区 | 久久精品国产一区 | 欧美精品二区 | 国产欧美日韩一区二区三区在线 | 亚洲精品黄 | 欧美国产激情 | 精产国产伦理一二三区 | 99视频免费在线 | 黄色片在线观看网址 | 色婷婷综合成人av | 91电影院| 国产精品久久久久久久久久久久 | 国产一区二区三区免费 | 一区二区三区欧美 | 日日躁狠狠躁aaaaxxxx | 欧美一区免费 |