找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1672|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

藍(lán)牙與跑步機的單片機UART中斷理解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1041297 發(fā)表于 2022-10-12 09:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個是單片機UART的寄存器,請問這一句
其它方式時,在停止位開始發(fā)送時由硬件置 1
是不是當(dāng)SBUF接收到數(shù)據(jù)后,并發(fā)送成功后,也就是SBUF接收到數(shù)據(jù),然后發(fā)送1個起始位,8位數(shù)據(jù)位,一個停止位,在發(fā)停止位的時候硬件就置1,下面是一段代碼,我是這么理解的,如果有一個叢機,檢測到硬件置一,就可以讓我主機進(jìn)入中斷,從而繼續(xù)接收數(shù)據(jù),發(fā)送數(shù)據(jù),發(fā)送完成后,又繼續(xù)他那邊處理好邏輯,讓我這邊繼續(xù)進(jìn)入中斷,以此反復(fù).我這樣理解是否正確,請大伙給我講講(跑步機與藍(lán)牙的通訊,主機是跑步機,從機是app的藍(lán)牙模塊)


TI
發(fā)送中斷請求中斷標(biāo)志位
0:軟件清 0
1:方式 0 時,當(dāng)串行發(fā)送數(shù)據(jù)第 8 位結(jié)束時,由硬件自動置 1,其它方
式時,在停止位開始發(fā)送時由硬件置 1

下面我只拿了一點點程序,就是說SBUF接收到數(shù)據(jù),并發(fā)送成功,就會跳到中斷里面再準(zhǔn)備數(shù)據(jù),再次發(fā)送成功后會再跳入中斷,從機那邊做好邏輯處理,我這邊就可以再接收數(shù)據(jù),然后發(fā)送,所以我想想問問上面那個UART是不是那樣理解來理解下面這個程序
#include “blue.c”
SBUF=mBLUE.ucWriteBuff[0];//發(fā)送第0個元素,進(jìn)入中斷從第1個元素開始發(fā)
mBLUE.ucRxdNumber = 0;//確保接收數(shù)據(jù)時,從第0個元素開始存起
mBLUE.Olready_Txd_cnt = 1;//1表已經(jīng)發(fā)送了一個字節(jié)了


/*
函數(shù)功能:定時器0中斷服務(wù)函數(shù)
參數(shù):無
返回值:無
備注:100us執(zhí)行一次
*/
void TIMER0_Rpt(void) interrupt TIMER0_VECTOR

{
if(SCON & 0x02)//發(fā)送數(shù)據(jù)
        {
                SCON &=~ 0x02;                                    //清除發(fā)送中斷標(biāo)志位

                if(mBLUE.Olready_Txd_cnt < mBLUE.ucTxdNumber)
            {
                SBUF = mBLUE.ucWriteBuff[mBLUE.Olready_Txd_cnt];
                mBLUE.Olready_Txd_cnt++;
            }
                else//發(fā)送完成一幀數(shù)據(jù)
                {
                        mBLUE.T_R_falg = Received;//切為接收模式
                }
        }

}

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

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2022-10-12 10:57 | 只看該作者
1、串行脈沖由:引導(dǎo)、起始、數(shù)據(jù)、校驗、停止,組成。
其中的數(shù)據(jù)由SBUF提供。
2、假設(shè)起始時刻,或更前SBUF收到數(shù)據(jù)時,給出TI。則,你可能收到TI后,即可能立即(中斷響應(yīng)后)向SBUF中灌入新數(shù)據(jù),這樣上次的數(shù)據(jù)就丟失了,而上次數(shù)據(jù)的串出時需要時間的,例9600的波特率,約0.1ms串出一位,串出一個完整的數(shù)據(jù)到少11個脈沖,即1.1ms,而程序1.1ms,上百條指令執(zhí)行完畢了。
如此,上次發(fā)送的數(shù)據(jù)就完蛋了。
所以:合理的TI=1時刻,應(yīng)當(dāng)是在發(fā)送完成之后,即停止脈沖發(fā)出之后。
我相信CPU的硬件設(shè)計,應(yīng)當(dāng)是停止脈沖發(fā)出后,將TI置1,表示發(fā)送完成,請示新的發(fā)送。
回復(fù)

使用道具 舉報

板凳
ID:301191 發(fā)表于 2022-10-12 23:49 | 只看該作者
頂一下
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表