⑴ 51單片機波特率計算公式和定時器初值
51單片機晶元的串口可以工作在幾個不同的工作模式下,其工作模式的設置就是使用SCON 寄存器。它的各個位的具體定義如下:
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0、SM1 為串列口工作模式設置位,這樣兩位可以對應進行四種模式的設置。串列口工作模式設置。
波特率在使用串口做通訊時,一個很重要的參數就是波特率,只有上下位機的波特率一樣時才可以進行正常通訊。波特率是指串列埠每秒內可以傳輸的波特位數。這里所指的波特率,如標准9600 不是每秒種可以傳送9600個位元組,而是指每秒可以傳送9600 個二進位,而一個位元組要8 個二進位,如用串口模式1 來傳輸那麼加上起始位和停止位,每個數據位元組就要佔用10 個二進位,9600 波特率用模式1 傳輸時,每秒傳輸的位元組數是9600÷10=960 位元組。
51晶元的串口工作模式0的波特率是固定的,為fosc/12,以一個12M 的晶振來計算,那麼它的波特率可以達到1M。模式2的波特率是固定在fosc/64 或fosc/32,具體用那一種就取決於PCON 寄存器中的SMOD位,如SMOD 為0,波特率為focs/64,SMOD 為1,波特率為focs/32。
模式1和模式3的波特率是可變的,取決於定時器1或2(52晶元)的溢出速率,就是說定時器1每溢出一次,串口發送一次數據。那麼我們怎麼去計算這兩個模式的波特率設置時相關的寄存器的值呢?可以用以下的公式去計算。
上式中如設置了PCON寄存器中的SMOD位為1時就可以把波特率提升2倍。通常會使用定時器1工作在定時器工作模式2下,這時定時值中的TL1做為計數,TH1做為自動重裝值,這個定時模式下,定時器溢出後,TH1的值會自動裝載到TL1,再次開始計數,這樣可以不用軟體去干預,使得定時更准確。在這個定時模式2下定時器1溢出速率的計算公式如下:
溢出速率=(計數速率)/(256-TH1初值)
溢出速率=fosc/[12*(256-TH1初值)]
上式中的「計數速率」與所使用的晶體振盪器頻率有關,在51 晶元中定時器啟動後會在每一個機器周期使定時寄存器TH 的值增加一,一個機器周期等於十二個振盪周期,所以可以得知51晶元的計數速率為晶體振盪器頻率的1/12,一個12M 的晶振用在51晶元上,那麼51的計數速率就為1M。通常用11.0592M 晶體是為了得到標準的無誤差的波特率,那麼為何呢?計算一下就知道了。如我們要得到9600 的波特率,晶振為11.0592M 和12M,定時器1 為模式2,SMOD 設為1,分別看看那所要求的TH1 為何值。代入公式:
11.0592M
9600=(2÷32)×((11.0592M/12)/(256-TH1))
TH1=250
12M
9600=(2÷32)×((12M/12)/(256-TH1))
TH1≈249.49
上面的計算可以看出使用12M晶體的時候計算出來的TH1不為整數,而TH1的值只能取整數,這樣它就會有一定的誤差存在不能產生精確的9600 波特率。當然一定的誤差是可以在使用中被接受的,就算使用11.0592M 的晶體振盪器也會因晶體本身所存在的誤差使波特率產生誤差,但晶體本身的誤差對波特率的影響是十分之小的,可以忽略不計。
⑵ 什麼是波特率在51單片機中如何使用
波特率就是一秒種傳輸0或1的個數,若波特率是9600那麼它傳輸一位0或1的時間就是1/9600秒如果串口工作在方式一下波特率是9600晶振是11059200
定時器選用timer1的自動重裝模式
即1/9600=定時時間
就是1/9600=(12*32/11059200)*(256-定時初值)。那麼
定時初值=256-(11059200/(12*32*9600));
這里的32是51單片機的硬體典型結構,串口通信使用的頻率是晶振頻率的1/32或者1/16,但是這種模式下,限制了波特率的提高,因此,現在一些改進的51單片機是1/2分頻。
⑶ 鍗曠墖鏈烘嘗鐗圭巼鏄澶氬皯
1.RS-232-C鏍囧噯瑙勫畾鐨勬暟鎹浼犺緭閫熺巼涓50銆75銆100銆150銆300銆600銆1200銆2400銆4800銆9600銆19200銆38400娉㈢壒銆傝嚜瀹氫箟闅忎究鍙瑕佸彲浠ヨ揪鍒般
2.UART涓插彛錛屼綔涓哄崟鐗囨満鏈甯哥敤鐨勯氳鎺ュ彛宸茬粡娣卞叆姣忎竴涓宓屽叆寮忓伐紼嬪笀鐨勮剳嫻楓俇ART涓插彛鏈夌潃綆鍗曘佸疄鐢ㄧ殑鐗規э紝宓屽叆寮忓伐紼嬪笀甯稿父鐢ㄦ潵灝嗗叾浣滀負璋冭瘯緋葷粺鐨勯噸瑕佸伐鍏楓俇ART涓插彛鐨勯厤緗鍙傛暟鏈夊緢澶氾紝浣嗘槸鏈甯哥敤錛屼笖闇瑕佷慨鏀圭殑鍙傛暟鍙鏈夐氳娉㈢壒閫熺巼榪欎竴涓銆
鎷撳睍璧勬枡錛
娉㈢壒鐜囷細
1.鍗曠墖鏈烘垨璁$畻鏈哄湪涓插彛閫氫俊鏃剁殑閫熺巼銆傛寚鐨勬槸淇″彿琚璋冨埗浠ュ悗鍦ㄥ崟浣嶆椂闂村唴鐨勫彉鍖栵紝鍗沖崟浣嶆椂闂村唴杞芥嘗鍙傛暟鍙樺寲鐨勬℃暟錛屽傛瘡縐掗挓浼犻240涓瀛楃︼紝鑰屾瘡涓瀛楃︽牸寮忓寘鍚10浣嶏紙1涓璧峰嬩綅錛1涓鍋滄浣嶏紝8涓鏁版嵁浣嶏級錛岃繖鏃剁殑娉㈢壒鐜囦負240Bd錛屾瘮鐗圭巼涓10浣*240涓/縐=2400bps銆
2.姣忕掗挓浼犻240涓浜岃繘鍒朵綅錛岃繖鏃剁殑娉㈢壒鐜囦負240Bd錛屾瘮鐗圭巼涔熸槸240bps銆(浣嗘槸涓鑸璋冨埗閫熺巼澶т簬娉㈢壒鐜囷紝姣斿傛浖褰繪柉鐗圭紪鐮侊級銆傛嘗鐗圭巼錛屽彲浠ラ氫織鐨勭悊瑙d負涓涓璁懼囧湪涓縐掗挓鍐呭彂閫侊紙鎴栨帴鏀訛級浜嗗氬皯鐮佸厓鐨勬暟鎹銆
3.瀹冩槸瀵圭﹀彿浼犺緭閫熺巼鐨勪竴縐嶅害閲忥紝1娉㈢壒鍗蟲寚姣忕掍紶杈1涓鐮佸厓絎﹀彿錛堥氳繃涓嶅悓鐨勮皟鍒舵柟寮忥紝鍙浠ュ湪涓涓鐮佸厓絎﹀彿涓婅礋杞藉氫釜bit浣嶄俊鎮錛夛紝1姣旂壒姣忕掓槸鎸囨瘡縐掍紶杈1姣旂壒錛坆it錛夈 鍗曚綅鈥滄嘗鐗光濇湰韜灝卞凡緇忔槸浠h〃姣忕掔殑璋冨埗鏁幫紝浠モ滄嘗鐗規瘡縐掆濓紙Baud per second錛変負鍗曚綅鏄涓縐嶅父瑙佺殑閿欒銆
鍙傝冭祫鏂欙細
鐧懼害鐧劇-娉㈢壒鐜
⑷ 鍗曠墖鏈轟腑濡備綍閫夌敤SPI銆乁ART鍜孖IC/SmBus鏈夎皝鐭ラ亾浠栦滑鐨勪紶杈撻熷害鍜屽簲鐢ㄥ満...
1銆丼PI錛歋PI(SerialPeripheralInterface)鏄疢OTOROLA鍏鍙告彁鍑虹殑鍚屾ヤ覆琛屾葷嚎鏂瑰紡銆傞珮閫熷悓姝ヤ覆琛屽彛銆3鍀4綰挎帴鍙o紝鏀跺彂鐙絝嬨佸彲鍚屾ヨ繘琛.鍥犲叾紜浠跺姛鑳藉己澶ц岃騫挎硾搴旂敤銆傚湪鍗曠墖鏈虹粍鎴愮殑鏅鴻兘浠鍣ㄥ拰嫻嬫帶緋葷粺涓銆
2銆両IC鐢1鏍逛覆琛屾暟鎹綰匡紙SDA錛+1鏍逛覆琛屾椂閽熺嚎錛圫CL錛夋瀯鎴愶紝瀹炵幇浜嗗弻宸ョ殑鍚屾ユ暟鎹浼犺緭錛堝弻鍚戜紶杈擄級銆傛湁浜轟細鍑濋棶錛屼竴鏍圭嚎浣滀負鎬葷嚎灝辯畻浜嗭紝浣嗘槸瀹冩庝箞瀹炵幇鍙屽悜浼犺緭鏁版嵁鍛錛熶綘鍙鍒蹇樹簡錛屽畠榪樻湁涓鏍規椂閽熺嚎錛屼綔鐢ㄥ悓spi鐨勬椂閽熺嚎銆
3銆丼PI鎺ュ彛涓昏佸簲鐢ㄥ湪EEPROM銆丗LASH銆佸疄鏃舵椂閽熴丄D杞鎹㈠櫒錛岃繕鏈夋暟瀛椾俊鍙峰勭悊鍣ㄥ拰鏁板瓧淇″彿瑙g爜鍣ㄤ箣闂淬係MBus鏄瘲ystemManagementBus鐨勭緝鍐欙紝鏄1995騫寸敱Intel鎻愬嚭鐨勶紝搴旂敤浜庣Щ鍔≒C鍜屾岄潰PC緋葷粺涓鐨勪綆閫熺巼閫氳銆
4銆丆AN錛氱幇鍦烘葷嚎WiFi妯″潡甯哥敤閫氫俊鎺ュ彛鍖呭惈錛歎SB銆丼DIO銆丼PI錛坰lave錛夈乁ART銆丷GMII銆丷MII銆
5銆侀栧厛錛屽崟鐗囨満紼嬪簭鍜孲PI鎬葷嚎I2C鎬葷嚎涓嶆槸涓涓鑼冪暣鐨勬傚康SPI鎬葷嚎鍜孖2C鎬葷嚎鏄紜浠舵葷嚎錛屽叾瀛樺湪鎬у彧鑳藉湪紜浠惰寖鐣翠腑浣撶幇錛屼竴浜涘瀷鍙風殑鍗曠墖鏈烘湰韜灝卞悓鏃跺叿鏈変互涓婁袱縐嶆葷嚎錛屾湁鐨勫瓨鍦ㄥ叾涓涓縐嶏紝鏈夌殑鍒欐病鏈夈
6銆丼TC鐨勫緢澶氬崟鐗囨満閮芥湁SPI妯″潡錛屾瘮濡係TC12C5A60S2銆傛湁IIC鍗忚鐨勫崟鐗囨満杈冨皯錛屼絾寰堝氱殑瀛樺偍鍣ㄦ槸IIC鎺ュ彛姣斿24C02絳夈