|
發(fā)布時(shí)間: 2019-5-19 16:38
正文摘要:我的問題是: ①在初始化函數(shù)InitUART()中SCON設(shè)置為了01010000,TI和RI都被設(shè)置為0,所以不能向單片機(jī)申請中斷,然后在初始化函數(shù)InitUART()之后又緊接著設(shè)置發(fā)送一串字符,發(fā)送函數(shù)中有 while(!TI);TI=0;這么兩行 ... |
|
本帖最后由 yzwzfyz 于 2019-5-20 12:00 編輯 ES只是控制中斷是否允許,但它不能控制串口是否工作,只要串口是工作的(這是硬件決定的),則TI就會(huì)在工作過程中被置1,它與ES無關(guān)。 但TI=1 之后是會(huì)否引起中斷卻受控于ES。 |
| 第一個(gè)串口調(diào)試軟件接受不了漢字,估計(jì)是這個(gè)程序本身就沒有考慮接受的數(shù)據(jù)中包含漢字?jǐn)?shù)據(jù)。對串口而言,收發(fā)的都是單純的16進(jìn)制數(shù)據(jù),他并不知道這個(gè)數(shù)據(jù)是指令、數(shù)據(jù);還是字母、漢字。需要兩邊的程序代碼解析。加入解析功能的,自然會(huì)顯示漢字。這就好比有些沒有漢字字庫的LCD12864,你發(fā)給它漢字,因?yàn)椴荒茏R(shí)別,是顯示不了的。有漢字字庫的,收到特殊數(shù)據(jù)的,漢字的兩個(gè)字節(jié)數(shù)據(jù),16進(jìn)制值>255,根據(jù)編碼值,去字庫里找匹配的點(diǎn)陣數(shù)據(jù),顯示到液晶上。也就是說,液晶上顯示的字符,都是通過計(jì)算編碼值,找到對應(yīng)的點(diǎn)陣數(shù)據(jù),Bit位上有值的,那個(gè)點(diǎn)就顯示,所有該現(xiàn)實(shí)的點(diǎn)都顯示出來,就形成了字母、數(shù)字,漢字。 |
| 參與人數(shù) 1 | 黑幣 +60 | 收起 理由 |
|---|---|---|
|
| + 60 | 回帖助人的獎(jiǎng)勵(lì)! |
suncat0504 發(fā)表于 2019-5-30 19:55 哦哦,好的我明白了,多謝大佬指點(diǎn) |
| TI是數(shù)據(jù)發(fā)送完成后產(chǎn)生的標(biāo)志,對51單片機(jī),當(dāng)你向SBUF發(fā)送完一字節(jié)數(shù)據(jù),單片機(jī)會(huì)自動(dòng)通過TX管腳向外發(fā)送數(shù)據(jù),發(fā)送完成后,SBUF數(shù)據(jù)清空,同時(shí)使TI=1,表示數(shù)據(jù)發(fā)送完成,好讓你繼續(xù)發(fā)送下一個(gè)字節(jié)。 |
yzwzfyz 發(fā)表于 2019-5-20 08:29 好的,我明白了。還有就是漢字為什么第一個(gè)串口調(diào)試軟件發(fā)送不了呢? |
| 漢字其實(shí)就是2個(gè)字節(jié)的數(shù)據(jù)而已 |
Powered by 單片機(jī)教程網(wǎng)