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

QQ登錄

只需一步,快速開始

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

請(qǐng)教各位一個(gè)單片機(jī)串口TI置位問(wèn)題,還望各位能給解惑

[復(fù)制鏈接]
ID:493146 發(fā)表于 2020-8-10 23:20 | 顯示全部樓層 |閱讀模式
/*************** 裝載串口發(fā)送緩沖 *******************************/

void TX1_write2buff(u8 dat)
{

        TX1_Buffer[COM1.TX_write] = dat;        
        if(++COM1.TX_write >= COM_TX1_Lenth)        COM1.TX_write = 0;

        if(COM1.B_TX_busy == 0)                //空閑
        {  
                COM1.B_TX_busy = 1;                //標(biāo)志忙
                TI = 1;                                        //觸發(fā)發(fā)送中斷
        }
這是STC串口庫(kù)函數(shù)的裝載串口發(fā)送緩沖 ,這里為什么要用軟件把TI置位,TI不是硬件置位嗎?如果再把緩存里的數(shù)據(jù)給SBUF,數(shù)據(jù)發(fā)送完后硬件是不是又一次把TI置位呢?


回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2020-8-11 10:36 | 顯示全部樓層
沒(méi)有哪一個(gè)資料說(shuō)明了TI是硬件置位,只有TF0 TF1 IE0 IE1可以硬件置位
回復(fù)

使用道具 舉報(bào)

ID:804115 發(fā)表于 2020-8-11 12:08 | 顯示全部樓層
TI = 1;
這里用法錯(cuò)誤,這個(gè)是發(fā)送完成中斷狀態(tài)位,只能由硬件置位,軟件復(fù)位,你這里進(jìn)行軟件置位,是錯(cuò)誤的操作。
回復(fù)

使用道具 舉報(bào)

ID:18307 發(fā)表于 2020-8-11 13:28 | 顯示全部樓層
這是串口在中斷里發(fā)送數(shù)據(jù),TI=1起動(dòng)串口中斷,配合串口中斷代碼看
回復(fù)

使用道具 舉報(bào)

ID:493146 發(fā)表于 2020-8-11 22:45 | 顯示全部樓層
csmyldl 發(fā)表于 2020-8-11 10:36
沒(méi)有哪一個(gè)資料說(shuō)明了TI是硬件置位,只有TF0 TF1 IE0 IE1可以硬件置位

stc官方資料上有說(shuō)明,停止位開始發(fā)送時(shí)由內(nèi)部硬件置位即TI=1,響應(yīng)中斷后必須由軟件清零。
TI是不是硬件和軟件都可以置位?
回復(fù)

使用道具 舉報(bào)

ID:493146 發(fā)表于 2020-8-11 22:47 | 顯示全部樓層
1692483014 發(fā)表于 2020-8-11 12:08
TI = 1;
這里用法錯(cuò)誤,這個(gè)是發(fā)送完成中斷狀態(tài)位,只能由硬件置位,軟件復(fù)位,你這里進(jìn)行軟件置位,是錯(cuò) ...

這是STC官方庫(kù)函數(shù)的資料,看了之后也有疑惑。
回復(fù)

使用道具 舉報(bào)

ID:493146 發(fā)表于 2020-8-11 22:51 | 顯示全部樓層
sdxrly 發(fā)表于 2020-8-11 13:28
這是串口在中斷里發(fā)送數(shù)據(jù),TI=1起動(dòng)串口中斷,配合串口中斷代碼看

if(TI)
        {
                TI = 0;
                if(COM1.TX_read != COM1.TX_write)
                {
                         SBUF = TX1_Buffer[COM1.TX_read];
                        if(++COM1.TX_read >= COM_TX1_Lenth)                COM1.TX_read = 0;
                }
                else        COM1.B_TX_busy = 0;
        }
中斷函數(shù)里面沒(méi)有這個(gè)函數(shù),TI可以用軟件置位嗎?
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-8-12 06:26 | 顯示全部樓層
TI既可以由硬件置位也可以由軟件置位,但只能由軟件復(fù)位。軟件置位的目的只是為了發(fā)生一次串口中斷,其作用要看串口中斷代碼。不可妄議,誤人誤己。
回復(fù)

使用道具 舉報(bào)

ID:18307 發(fā)表于 2020-8-12 07:50 | 顯示全部樓層
zcwjzwd 發(fā)表于 2020-8-11 22:51
if(TI)
        {
                TI = 0;

TI可以用軟件置位
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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