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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)串口初始化時(shí)TI為什么要置1?

  [復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次(中獎(jiǎng)概率 70%)
ID:716794 發(fā)表于 2020-4-4 22:31 | 顯示全部樓層 |閱讀模式
具體代碼如上,為什么在串口初始化函數(shù)里,TI要被置為1呢?還有,在Uart_SendB函數(shù)里,為什么要開頭清零一次TI,末尾再清零一次TI?

單片機(jī)源程序如下:
  1. #include <stc15f2k60s2.h>
  2. #include <absacc.h>
  3. #include <intrins.h>
  4. #include <stdio.h>
  5. void UartInit(void);//串口初始化函數(shù)。
  6. void Uart_SendB(unsigned char us);//串口單個(gè)字節(jié)發(fā)送函數(shù)。
  7. void main(void)
  8. {
  9.         XBYTE[0xA000]=0;
  10.         UartInit();
  11.         EA=1;
  12.         while(1)
  13.         {
  14.                 Uart_SendB('a');
  15.         }
  16. }
  17. void UartInit(void)                //9600bps@12.000MHz
  18. {
  19.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  20.         AUXR &= 0xBF;                //定時(shí)器1時(shí)鐘為Fosc/12,即12T
  21.         AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
  22.         TMOD &= 0x0F;                //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
  23.         TL1 = 0xE6;                //設(shè)定定時(shí)初值
  24.         TH1 = 0xFF;                //設(shè)定定時(shí)初值
  25.         ET1 = 0;                //禁止定時(shí)器1中斷
  26.         TR1 = 1;                //啟動(dòng)定時(shí)器1
  27.         TI=1;                                
  28.         ES=1;                                //開啟串口中斷。
  29. }
  30. void Uart_SendB(unsigned char us)
  31. {
  32.         TI=0
  33.         SBUF=us;
  34.         while(TI==0);//等待發(fā)送結(jié)束。
  35.         TI=0;
  36. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-4-5 06:25 | 顯示全部樓層
27、32行多余。TI為串口發(fā)送完成中斷請(qǐng)求標(biāo)志,由硬件置1,軟件清0。只有在特殊使用串口情況才會(huì)在初始化時(shí)置TI為1。通常來講,如果想一次發(fā)送多個(gè)數(shù)據(jù)的時(shí)候,就需要把第一個(gè)字節(jié)寫入SBUF,然后再等待發(fā)送中斷,再在后續(xù)中斷中在發(fā)送剩余的數(shù)據(jù),但是數(shù)據(jù)發(fā)送過程就被拆分到了兩個(gè)地方——主循環(huán)內(nèi)和中斷服務(wù)函數(shù)內(nèi),無疑就使得程序結(jié)構(gòu)變得零散了。這個(gè)時(shí)候,為了使程序結(jié)構(gòu)盡量緊湊,在啟動(dòng)發(fā)送的時(shí)候,不是向SBUF中寫入第一個(gè)待發(fā)的字節(jié),而是直接讓TI=1,注意,這時(shí)候會(huì)馬上進(jìn)入串口中斷,因?yàn)橹袛鄻?biāo)志位置1了,但是串口線上并沒有發(fā)送任何數(shù)據(jù),于是,我們所有的數(shù)據(jù)發(fā)送都可以在中斷中進(jìn)行,而不用再分為兩部分了。
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2020-4-5 12:27 | 顯示全部樓層
樓主能不能說說TI是干什么用的呢?
回復(fù)

使用道具 舉報(bào)

ID:722839 發(fā)表于 2020-4-5 15:17 | 顯示全部樓層
中斷請(qǐng)求
回復(fù)

使用道具 舉報(bào)

ID:716794 發(fā)表于 2020-4-5 15:58 | 顯示全部樓層
yzwzfyz 發(fā)表于 2020-4-5 12:27
樓主能不能說說TI是干什么用的呢?

發(fā)送中斷標(biāo)志位,發(fā)送完畢后,該位硬件置一,但是需要軟件清零,這個(gè)我還是知道的,就是不懂它為什么要初始化置1,然后清零兩次,我覺得只要留一個(gè)清零語句就可以了。
回復(fù)

使用道具 舉報(bào)

ID:716794 發(fā)表于 2020-4-5 16:00 | 顯示全部樓層
wulin 發(fā)表于 2020-4-5 06:25
27、32行多余。TI為串口發(fā)送完成中斷請(qǐng)求標(biāo)志,由硬件置1,軟件清0。只有在特殊使用串口情況才會(huì)在初始化時(shí) ...

那我發(fā)的這個(gè)程序是屬于特殊情況嗎?如果不是,那需要將T1初始化為1的特殊情況是怎樣的?方便舉個(gè)例子嗎?
不是很懂,麻煩了。
回復(fù)

使用道具 舉報(bào)

ID:722903 發(fā)表于 2020-4-5 16:12 | 顯示全部樓層
TI為串口發(fā)送完成中斷請(qǐng)求標(biāo)志,由硬件置1,軟件清0.
發(fā)送前先清零,等待發(fā)送完成后硬件置1
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-4-5 16:20 | 顯示全部樓層
程鵬 發(fā)表于 2020-4-5 16:00
那我發(fā)的這個(gè)程序是屬于特殊情況嗎?如果不是,那需要將T1初始化為1的特殊情況是怎樣的?方便舉個(gè)例子嗎 ...

參閱此鏈接,C語言指向數(shù)組元素的指針
https://www.sohu.com/a/122492626_119709
回復(fù)

使用道具 舉報(bào)

ID:716794 發(fā)表于 2020-4-5 22:43 | 顯示全部樓層
wulin 發(fā)表于 2020-4-5 16:20
參閱此鏈接,C語言指向數(shù)組元素的指針
https://www.sohu.com/a/122492626_119709

了解了,多謝
回復(fù)

使用道具 舉報(bào)

ID:716794 發(fā)表于 2020-4-5 22:44 | 顯示全部樓層

謝謝回答,但是我的問題不是這個(gè)
回復(fù)

使用道具 舉報(bào)

ID:716794 發(fā)表于 2020-4-5 22:45 | 顯示全部樓層
fishen 發(fā)表于 2020-4-5 16:12
TI為串口發(fā)送完成中斷請(qǐng)求標(biāo)志,由硬件置1,軟件清0.
發(fā)送前先清零,等待發(fā)送完成后硬件置1

多謝回答,但是我的問題不是這個(gè)。
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2020-4-11 11:51 | 顯示全部樓層
你的想法是對(duì)的,我很贊同!
回復(fù)

使用道具 舉報(bào)

ID:716794 發(fā)表于 2020-4-12 12:36 | 顯示全部樓層
yzwzfyz 發(fā)表于 2020-4-11 11:51
你的想法是對(duì)的,我很贊同!

好吧,多謝。
回復(fù)

使用道具 舉報(bào)

ID:830954 發(fā)表于 2021-2-2 22:34 | 顯示全部樓層
這個(gè)串口初始化配置可以移植到STC8上嗎?
回復(fù)

使用道具 舉報(bào)

ID:235954 發(fā)表于 2021-2-3 08:04 | 顯示全部樓層
TI為串口發(fā)送完成中斷請(qǐng)求標(biāo)志,由硬件置1,軟件清0. 發(fā)送前先清零,等待發(fā)送完成后硬件置1
回復(fù)

使用道具 舉報(bào)

ID:600405 發(fā)表于 2021-9-14 19:37 | 顯示全部樓層
初始化TI被置1,為多字節(jié)發(fā)送時(shí)實(shí)現(xiàn)“發(fā)了不管”,利用等待TI標(biāo)志出現(xiàn)的時(shí)間干點(diǎn)事情。
回復(fù)

使用道具 舉報(bào)

ID:964308 發(fā)表于 2021-9-14 21:00 來自手機(jī) | 顯示全部樓層
那個(gè)是一個(gè)發(fā)送中斷標(biāo)志,1代表發(fā)生完了,由硬件置1,需要軟件置0,第一個(gè)置0我覺得可以省略
回復(fù)

使用道具 舉報(bào)

ID:964308 發(fā)表于 2021-9-16 08:14 | 顯示全部樓層
不應(yīng)該啊,TI是串口中斷標(biāo)志位,是用來標(biāo)志有沒有發(fā)送完成的,一般都是由硬件置1,軟件置0
回復(fù)

使用道具 舉報(bào)

ID:514901 發(fā)表于 2021-9-17 09:20 | 顯示全部樓層
TI在串口初始化時(shí)置1,一般是為了使用printf函數(shù)。一般情況下不置1
回復(fù)

使用道具 舉報(bào)

ID:959346 發(fā)表于 2021-9-17 10:17 | 顯示全部樓層
程鵬 發(fā)表于 2020-4-5 16:00
那我發(fā)的這個(gè)程序是屬于特殊情況嗎?如果不是,那需要將T1初始化為1的特殊情況是怎樣的?方便舉個(gè)例子嗎 ...

如果不開發(fā)送中斷,要發(fā)送字符串時(shí),通過判斷TI為1來發(fā)送下一位。所以在開始時(shí)置1,表示可以發(fā)送下一位。
回復(fù)

使用道具 舉報(bào)

ID:419909 發(fā)表于 2021-9-17 10:19 | 顯示全部樓層
還有一個(gè)原因?yàn)槭侨绻{(diào)用printf函數(shù)時(shí)。那個(gè)TI一定要置1.不然發(fā)不了。
回復(fù)

使用道具 舉報(bào)

ID:959346 發(fā)表于 2021-9-17 17:31 | 顯示全部樓層
wfqxgw 發(fā)表于 2021-9-17 10:19
還有一個(gè)原因?yàn)槭侨绻{(diào)用printf函數(shù)時(shí)。那個(gè)TI一定要置1.不然發(fā)不了。

那你這個(gè)printf函數(shù)應(yīng)該就是根據(jù)TI為1判斷一個(gè)字節(jié)發(fā)送完成了,可以開始發(fā)送下一個(gè)字節(jié)的數(shù)據(jù)了。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2021-9-17 18:22 | 顯示全部樓層
串口初始化程序中 TI = 1; 一般是用來針對(duì) 不開 串口中斷,對(duì)程序優(yōu)化的操作。

大多不開串口中斷的串口發(fā)送函數(shù),都是如下的寫法:
SBUF = xxxx;
while(!TI);
TI = 0;

如上這樣的寫法,會(huì)造成讓串口發(fā)送數(shù)據(jù)后,傻等串口傳輸完成,才會(huì)繼續(xù)其他其他操作,那么如果初始化時(shí)TI = 1; 就可以如下寫發(fā)送函數(shù):
while(!TI);
TI = 0;
SBUF = xxxxxx;

這樣寫的好處是: 往SBUF 里面放了數(shù)據(jù),就能繼續(xù)做別的事情,只在發(fā)送前判斷上一次發(fā)送有沒有完成,在非連續(xù)數(shù)據(jù)傳送時(shí),有非常高的效率。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美中文 | 午夜免费视频 | 日日摸夜夜爽人人添av | 99久久婷婷国产综合精品电影 | 自拍偷拍视频网 | 亚洲中字在线 | 在线一区视频 | 中国黄色毛片视频 | 欧美中文字幕一区二区 | 国产电影一区二区 | 成人欧美一区二区三区在线观看 | 欧美一区二区 | 国产美女永久免费无遮挡 | 免费国产视频 | 久久伊人一区二区 | 狠狠爱免费视频 | 国产一区二区三区不卡av | 91久久久久 | 99re6在线视频精品免费 | 一级免费看片 | 国产一区免费 | 最新国产精品 | 天天操夜夜操 | 日韩视频免费看 | 午夜国产精品视频 | 91久久夜色精品国产网站 | av中文字幕在线观看 | 国产三级一区二区 | 亚洲精品久久久久久国产精华液 | 日韩在线观看一区 | 91免费高清视频 | 日韩在线视频观看 | 国产三级精品三级在线观看四季网 | 美国黄色一级片 | 国产一区二区黑人欧美xxxx | 久久久久久亚洲 | 欧美又大粗又爽又黄大片视频 | 久久久久久免费精品一区二区三区 | 91av在线视频观看 | 久国产精品 | 久久久久一区 |