常用波特率與其它參數(shù)選取關(guān)系 串口工作方式 波特率 fosc smod 定時器t1 c/t 模式 定時器初值 方式0 1m 12mhz - - - - 方式2 375k 12mhz 1 - - - 187.5k 12mhz 0 - - - 方式0或方式3 62.5k 12mhz 1 0 2 ffh 19.2k 11.059mhz 1 0 2 fdh 9.6k 11.059mhz 0 0 2 fdh 4.8k 11.059mhz 0 0 2 fah 2.4k 11.059mhz 0 0 2 f4h 1.2k 11.059mhz 0 0 2 f8h 137.5k 11.059mhz 0 0 2 1dh 110 12mhz 0 0 1 feebh 方式0 0.5m 6mhz - - - - 方式2 187.5k 6mhz 1 - - - 方式1.3 19.2k 6mhz 1 0
* 每12個時鐘周期定時器增l(單片機ds87c520的定時器可以每4個或12個時鐘周期增1)。 * 自動重裝載模式。 * 禁止波特率倍增(smod=0)。 一般情況下的rs-232串行通信.一旦波特率誤差超出3%,盡管數(shù)據(jù)傳送中有起始位或停止位進行同步,就有可能造成通信錯誤。3%的容許誤差使12mhz晶振時的最高通信速率限制在2400波特,這在90年代初還不算壞,但對今天的標準來講是一個不能忽略的大問題丁。 而現(xiàn)在適應(yīng)于8051單片機串行通信的晶體;11.059mhz或22.118mhz,已開發(fā)出。單片機采用這種晶體后波特率有很大改善,見表2所示.數(shù)據(jù)傳送率可達57.6kps(使ds87c520單片機波特率倍增,當(dāng)smod=1后可達115.2kps),這樣高的通信速率——波特率對于當(dāng)前大多數(shù)單片機(或微處理器)系統(tǒng)已是很可觀了。隨著晶體11.059mhz或22.118mhz產(chǎn)品逐步市場化,使單片機應(yīng)用糸統(tǒng)大為拓寬. 注:波特率與規(guī)定速率的偏差3%對于時鐘精度提出了要求,即便采用專為rs-232串行通信優(yōu)選的時鐘頻率,如果時鐘頻率變化超出3%,仍
88.5 243 2404 2400 0.16 波特率=2smod/32×{fosc/[12×(256-th1)]} 其中,fosc為振蕩頻率,smod為單片機的波特率倍增位,th1為定時器1的自動重裝載值。 在rs232串行通訊時,波特率發(fā)生器的誤差一般都不允許超過3%,否則就會造成通訊失敗,也就是說在采用12mhz晶振的51系統(tǒng)中只能夠使用2400波特率進行rs232通訊。顯然這在很多情況下都不能滿足系統(tǒng)需要。為了滿足rs232串行通訊的需要,通常選用少數(shù)特殊頻率的晶振,如11.059mhz和22.118mhz。這大大減小了波特率發(fā)生器的誤差(見表5),但也使得設(shè)計的靈活性大大降低。表5 特殊頻率的晶振下波特率發(fā)生器的誤差 定時器1的自動重裝載值 波特率(fosc=11.059mhz) 波特率(fosc=22.118mhz) 實際波特率 理想值 實際波特率 理想值 255254253250244232208 28799.514399.79599.84799.912399.951199.98- 2880014400960048002400120
圖4所示。圖4中,at89c52的txd端經(jīng)max232轉(zhuǎn)換為rs-232電平后,與yd-613的rxd端相連。yd-613的緩沖區(qū)滿,指示信號dtr經(jīng)max232轉(zhuǎn)換為rs-232電平后與at89c52的p3.0端相連。5.2 顯示程序這里以串行接口方式1為例,給出與力電路配套的顯示程序。顯示屏顯示內(nèi)容為紅色漢字"液晶",綠色亮字顯示漢字"顯示器"及英文字符"1a2b"。液晶屏顯示的字符如圖5所示。 ⑤ 51匯編程序樣例 ;language 51asm author:ureika ;主頻:11.059mhz;smod=0 ;baud=9600; p1.2接dtr org 0000h sjmp main ;程序從30h開始 org 0030hmain: mov sp,#4fh ;設(shè)置棧指針 mov pcon,#00h ;設(shè)置smod=0 mov tmod,#21h ;自動裝入時間常數(shù)的8位定時器 mov scon,#01010000b ;8bit uart ;8bit uartmov th1,#0fdh ;設(shè)置波特率為9600mov tl1,#0fdh mov tcon,#40h ;記數(shù)啟動 cl
驗證方便,電路模塊采用一個atmel公司的at89c51單片機(dip40封裝,文中不作詳細討論)作為外部控制器。單片機通過四線制spi接口設(shè)置收發(fā)模塊的工作模式、時隙參數(shù)等,也可通過spi或并口p0接口讀(或?qū)懀﹕t-bus收發(fā)模塊接收(或發(fā)送)的數(shù)據(jù),并通過rs-232c接口與計算機通信。另外,st-bus收發(fā)模塊還設(shè)置了2個中斷輸出信號,并在分別連接到單片機的中斷輸入引腳 int0 和 int1 。因此,單片機也可以采取中斷方式來讀取st-bus收發(fā)模塊接收到的數(shù)據(jù)。 單片機的外接晶體11.059mhz;cpld片上系統(tǒng)時鐘由外部4.096mhz有源晶體振蕩器提供,采用10引腳雙列插座的jtag接口實現(xiàn)cpld的在線編程;rs-232c與ttl接口電平轉(zhuǎn)換采用maxim公司的max232acpe。 st-bus收發(fā)模塊設(shè)計 st-bus收發(fā)模塊的功能是實現(xiàn)st-bus總線串行數(shù)據(jù)的可靠收發(fā),接下來就探討 f0 同步模式下st-bus總線接收與發(fā)送的模塊設(shè)計。 st-bus總線數(shù)據(jù)收發(fā)規(guī)則為:發(fā)送端在時鐘c2上升沿時發(fā)送數(shù)據(jù),而接收端在c2下降沿時采樣并讀取數(shù)據(jù),且 f0 同步脈
主機***********************************************/ void main (void) { scon = 0x50; /* uart in mode 1 (8 bit), ren=1 */ tmod = tmod | 0x20 ; /* timer 1 in mode 2 */ th1 = 0xfd; /* 9600 bds at 11.059mhz */ tl1 = 0xfd; /* 9600 bds at 11.059mhz */ ie =0x90; tr1 = 1; /* timer 1 run */ rx_en=0; /* rs-485 rx enable,'0'--enable; '1'--disable */ tx_en=1;
11.0592mhz和11.059mhz區(qū)別大嗎11.0592mhz和11.059mhz區(qū)別大嗎我用串口調(diào)試助手監(jiān)視單片機的串口,發(fā)現(xiàn)有時接收的數(shù)據(jù)不對,而我用的是11.059mhz而不是11.0592mhz我想問一下這個區(qū)別大嗎?是不是就是這個原因呢,波特率為4800
??11.0592mhz和11.059mhz區(qū)別大嗎11.0592mhz和11.059mhz區(qū)別大嗎我用串口調(diào)試助手監(jiān)視單片機的串口,發(fā)現(xiàn)有時接收的數(shù)據(jù)不對,而我用的是11.059mhz而不是11.0592mhz我想問一下這個區(qū)別大嗎?是不是就是這個原因呢,波特率為4800
0000hajmp main;org 0023h;ajmp int_serorg 0030hmain: mov tmod,#00101001b ;set timer 1 style 2; timer 0 style 1 mov scon,#50h ;serial style 2 data 8 t/r mov tl1,#0fdh ;9600 at 11.059mhz clock mov th1,#0fdh ;setb es setb tr1 mov pcon,#00h setb ea ;acall delay_4ms send: ;mov 30h,#01h att1: setb de mov sbuf,#0aah awat1: jbc ti,arr1
我用晶振加非門組成皮爾斯振蕩電路,晶振為11.059mhz,非門采用cmos4011,電阻為1m,電容為30pf。無法起振。后來聽老師說cmos會帶來干擾叫我用hcmos,我用了,也不行。請大俠們給我指條明路,到底哪里出了問題了?