|
----一只菜鳥的學(xué)習(xí)51記錄貼(2)----
------關(guān)于一點(diǎn)串口的理解--輕噴--求大神指點(diǎn)-哦耶----
1.串口通信和串行通信不一樣,概念不要混淆!(自己一直沒有發(fā)現(xiàn)這一點(diǎn))-------簡單說串口是一種數(shù)據(jù)傳輸?shù)氖侄危惺且环N概念。
2.串行通信->異步傳輸?shù)膸讉要點(diǎn)
2.1字符格式:異步傳輸時候數(shù)據(jù)是以幀為單位傳送的,各幀字符之間存在空閑位,而不是連續(xù)發(fā)送。
(補(bǔ)充幀:一幀理解成 包括起始位+8個數(shù)據(jù)位+奇偶校驗(yàn)位+結(jié)束位)
2.2波特率個人理解:1.1定義:每秒傳送二進(jìn)制代碼的速度
1.2為什么設(shè)置波特率:為了保證數(shù)據(jù)沒有錯誤
(好比兩個人行走,中間有條繩子掛在兩個人身上,如果兩個人的速度不一樣,繩子肯定會在一個時間點(diǎn)斷掉)
2.3波特率和字符格式一旦有問題異步傳輸就gg。
3.串口通信(針對異步傳輸)
/********************************************************************************************/
PC和單片機(jī)
void delay(int i)
{
while(i--)
{}
}
void ser_init()
{
SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL1=0XF3;
ES=1;
EA=1;
TR1=1;
}
void ser() interrupt 4
{
unsigned char receivedata;
receivedata=SBUF;
RI = 0;
SBUF=receivedata;
while(!TI);
TI=0;
delay(10000); **** //問題//*****
}
main()
{
ser_init();
while(1)
{
}
}
/********************************************************************************************/
想法一:
我在中斷函數(shù)里面加了延時
發(fā)現(xiàn)發(fā)送“123456789”
結(jié)果只能發(fā)送“12” 后面的數(shù)據(jù)就丟失了
能不能理解為:
單片機(jī)產(chǎn)生中斷的時候 PC也正在以之前的波特率發(fā)送數(shù)據(jù),當(dāng)單片機(jī)中斷完成時候,之前的數(shù)據(jù)就被覆蓋了。可是按我這個理解單片機(jī)應(yīng)該收到“19”而不是“12”啊
想法二:
1.既然中斷會占用單片機(jī)的時間,是不是可以說單片機(jī)的波特率事實(shí)上是有誤差,中斷的時間越長,波特率的誤差也就越大。
2.所以說傳送很大的數(shù)據(jù)的時候,通過串口這樣的方法會產(chǎn)生數(shù)據(jù)的丟失??
|
|