串行口的4種工作方式中的方式0是移位寄存器工作方式,主要用于擴(kuò)展并行I/O用,并不用于串行通信。串行口的方式1~3是用于串行通信的,下面介紹串行口的方式1~3的雙機串行通信軟件編程。應(yīng)當(dāng)說明的是,下面介紹的雙機串行通信的編程實際上與各種串行標(biāo)準(zhǔn)的硬件接口電路無關(guān),因為采用不同的標(biāo)準(zhǔn)串行通信接口僅僅是由雙機串行通信距離、傳輸速率以及抗干擾性能來決定的。
1.串行口方式1應(yīng)用編程
例如:采用方式1進(jìn)行雙機串行通信,收、發(fā)雙方均采用6 MHz晶振,波特率為2400 bit/s,一幀信息為10位,第0位為起始位,第1~8位為數(shù)據(jù)位,最后1位為停止位。發(fā)送方以78H、77H單元的內(nèi)容為首地址,以76H、75H單元內(nèi)容減1為末地址的數(shù)據(jù)塊通過串行口發(fā)送給接收方。
發(fā)送方要發(fā)送的數(shù)據(jù)塊的地址為2000H~201FH。發(fā)送時先發(fā)送地址幀,再發(fā)送數(shù)據(jù)幀;接收方在接收時使用一個標(biāo)志位來區(qū)分接收的是地址還是數(shù)據(jù),然后將其分別存放到指定的單元中。發(fā)送方可采用查詢方式或中斷方式發(fā)送數(shù)據(jù),接收方可采用中斷或查詢方式接收。下面介紹收發(fā)雙方均采用中斷方式的串行發(fā)送、接收程序。
(1)甲機發(fā)送程序。
中斷方式的發(fā)送程序如下:
(2)乙機接收程序。
中斷方式的接收程序如下:
2.串行口方式2應(yīng)用編程
方式2和方式1有兩點不同之處。方式2接收/發(fā)送11位信息,第O位為起始位,第1~8位為數(shù)據(jù)位,第9位是程控位,該位可由用戶置TB8決定,第10位是停止位1,這是方式1和方式2的一個不同點。另一個不同點是方式2的波特率變化范圍比方式1小,方式2的波特率一振蕩器頻率/n。
當(dāng)SMOD=O時,n=64。
當(dāng)SMOD=1時,n=32。
鑒于方式2的使用和方式3基本一樣(只是波特率不同,方式3的波特率要由定時器Tl的溢出率決定),所以方式2的具體編程應(yīng)用,可參照下面介紹的方式3應(yīng)用編程。
3.串行口方式3應(yīng)用編程
例如:AT89S51單片機用串行通信方式3進(jìn)行發(fā)送和接收的應(yīng)用實例。發(fā)送方采用查詢方式發(fā)送地址幀,采用中斷或查詢方式發(fā)送數(shù)據(jù),接收方采用中斷或查詢方式接收數(shù)據(jù)。發(fā)送和接收雙方均采用6 MHz的晶振,波特率為4800 bit/s。
發(fā)送方首先將存放在78H和77H單元中的地址發(fā)送給接收方,然后發(fā)送數(shù)據(jù)OOH~FFH,共256個數(shù)據(jù)。
(1)甲機發(fā)送程序。中斷方式的發(fā)送程序如下:
(2)乙機接收程序。接收方把先接收到的數(shù)據(jù)送給數(shù)據(jù)指針,將其作為數(shù)據(jù)存放的首地址,然后將接下來接收到的數(shù)據(jù)存放到以先前接收的數(shù)據(jù)為首地址的單元中去。
采用中斷方式的接收程序如下:
一般來說,定時器方式2用來確定波特率是比較理想的,它不需要用中斷服務(wù)程序設(shè)置初值,且算出的波特率比較準(zhǔn)確。在用戶使用的波特率不是很低的情況下,建議使用定時器T1的方式2來確定波特率。