導航:首頁 > 操作系統 > 單片機ti不置位

單片機ti不置位

發布時間:2022-10-20 22:41:12

A. 單片機通信為啥TI不置位哪位大俠幫忙我請客啊多謝

修改了一下,試了試接收OK。

PS:還有就是主程序里不要加RET,沒有LCALL及入棧指令就RET彈出堆棧指針 會讓再往下的系統錯亂,雖然這個並不是你這個程序的症結所在。

org 0000H

AJMP MAIN;轉入主程序

org 0030H


MAIN:

LCALL DELAY100MS ;開機穩定延時


MOV SCON,#50H;設置成串口1方式

MOV TMOD,#20H;波特率發生器T1工作在模式2上

MOV PCON,#80H;波特率翻倍為2400x2=4800BPS

MOV TH1,#0F3H;預置初值(按照波特率2400BPS預置初值)

MOV TL1,#0F3H;預置初值(按照波特率2400BPS預置初值)

SETB TR1;啟動定時器T1

MOV A,#0AFH;將16進制的字元AF發送到串口去

MOV SBUF,A;將遙控器鍵值通過串口發送出去

g:JNB Ti,g;發送之後要判斷Ti位是否置1,置1了才表示發送完成,然後用軟體置0,否則只收到一次。

LCALL DELAY100MS ;發送分隔延時

MOV SBUF,A;將遙控器鍵值通過串口發送出去

CLR Ti

SJMP $ ;停止

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DELAY100MS: ;@12.000MHz

PUSH 30H

PUSH 31H

MOV 30H,#195

MOV 31H,#133

NEXT:DJNZ 31H,NEXT

DJNZ 30H,NEXT

POP 31H

POP 30H

RET

end

B. C51單片機,串口設置後TI置1

TI 貌似不能寫1,是由硬體置1,軟體清零的。寫1無效。
當串口發送完一個位元組後,就會置1。如果開了中斷,就會進入中斷程序。如果不清零,就會不停地進入中斷。

C. 51單片機發送位元組,是把一個位元組寫入到subf,就會把ti置1,為什麼又要把ti再置回0再開ES=1呢

單片機通過串口向外發送一個位元組的數據結束後,就會將TI置1,表示發送完了,如果是開中斷的話,就會產生中斷,在中斷子程序中繼續發送下一個位元組。因這次已經響應了,就應該把TI清0,表示這一次的中斷已響應了,如果不清0,就會再次產生中斷的,一次發送引起兩次或者多次中斷,就錯誤了。所以,一次中斷後必須將本次的標志位TI清0,TI是一次有效。如果是查詢方式,把要發送的數據寫到SUBF後就要查詢TI的狀態了,當TI=1,就說明這次發送結束了,也必須將TI清0,再發送下一個位元組。
在中斷子程序中,通常是首先就將TI清0,而中斷程序結束後再開ES=1,假如這個順序反過了,也是可以的,只要在中斷子程序中將TI清0就行,至於是否將再開ES=1,要看在中斷子程序中的前面關了ES=0,從中斷返回後就要開ES=1。其實這一關一開,在中斷子程序中沒有什麼必要,如果不關,也就不用再開了,雖然沒有關,在響應串口中斷時也不會再響應串口中斷,必須從中斷返回後才能再次響應的。這只是一些人的習慣了這么寫,也沒有關系,只要不被誤導就好。
如果是單片機接收數據,當接收到一個位元組後,就會將RI置1,或者引起中斷,從SBUF中讀出數據,或者查詢RI,再讀數據。通常是採用中斷的方式接收數據,這樣不影響單片機執行其它程序,也不至於因為等待接收數據造成死機。

D. 我用的c8051f020,想通過串口通信向外發送一字元。但給SBUF0賦值後TI0不置位,跪求解決方法!

while(TI0==0); 這里多了一個分號 如果TI0=0的0的話就會一直循環

E. 51單片機RI和TI都是什麼時候置位的,軟體置位還是硬體置位

置位,就是寫1,是硬體;當滿足條件時,自動寫1了。
清零是軟體。

F. 在51單片機中,RI和TI為什麼一定要用軟體置零,無法用硬體置零。而其他的要要用硬體置零無法用軟體置零

不是無法用硬體置零,而是硬體根本就不對RI和TI置零。
其它的,是在進入中斷時,硬體就自動置零了,用軟體也可以置零,但是肯定是晚了一步。

G. 單片機中的置位和清零分別是什麼意思

單片機內部有各種功能的寄存器,比如PIC,C51系列8位的單片機,寄存器的寬度就是八個二進制位,一般是高位在前低位在後,例如:11000011,一共是八位,高四位數據是1100,低四位數據是0011。單片機是可以進行位操作的,一個8位的寄存器我們可以只針對其中一個位或者某些位進行操作,將寄存器相應的位賦值1(高電平)為置位,相反賦值0(低電平)為清零。...
例如c51:
置位指令:SETB,舉例:SETB P3.7 ;執行過後P3.7輸出為高電平
清零指令 CLR,舉例:CLR P3.7 ;執行過後P3.7輸出為低電平,這些操作均不影響其它的位。
以上是通過軟體來實現的,有的特殊功能寄存器就可能是由硬體自動實現的,比如一些標志位,有些是具有隻讀屬性,用於供程序提供參考。

H. 51單片機串口自收發,產生中斷時TI是先於RI置位嗎為什麼

TI發送完數據就置位。數據位發送完,還要繼續發停止位,一般是1個位的1。
接收時收到停止位才能算接收完,RI才有可能置位(某些型號的單片機還有可能要進一步識別錯誤,如果接收出錯,有可能不置位RI)。

I. 發送數據後為什麼TI不置1

{
if(TI == 1)
TI=0;
else
{ a=SBUF;
if(a=='X')
{ b=0; /*我調試了,燈沒有亮,說明程序沒有進來*/
flag=1;
RI=0;
}
}
}
該程序不管是單片機接收字元,還是發送字元都會進入中斷。
-------------------
該程序收到干擾,也會進入中斷。
但是如果收到的不是'X',就不會清除RI,退出後,RI仍然是1,是不是馬上又要進入中斷?
是不是永遠在主程序、中斷中間徘徊?
--
另外,發送時,應該等待一個位元組發送完畢,再發送下一個,不可不間斷的發送。。

閱讀全文

與單片機ti不置位相關的資料

熱點內容
搜索pdf內容 瀏覽:497
程序員裝機必備的軟體 瀏覽:9
php微信第三方登錄demo 瀏覽:536
上海php工具開發源碼交付 瀏覽:790
哪裡有求購黃頁的源碼 瀏覽:194
商城礦機源碼礦場系統 瀏覽:196
單片機的led燈熄滅程序 瀏覽:222
洛陽python培訓 瀏覽:702
小鍵盤命令 瀏覽:192
單片機c語言返回主程序 瀏覽:816
dockerpythonweb 瀏覽:970
程序員演算法有多強 瀏覽:717
pythonworkbook模塊 瀏覽:245
什麼app能查醫生 瀏覽:175
輕量級的編程語言 瀏覽:338
程序員那麼可愛生孩子 瀏覽:432
後綴him3加密文件是什麼軟體 瀏覽:986
堅果隱藏app為什麼要140版本才能用 瀏覽:313
淘寶dns伺服器地址 瀏覽:259
領英轉型app哪個好用 瀏覽:943