機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
單片機(jī)編程入門(mén)白金教程系列之九
單片機(jī)編程入門(mén)白金教程系列之九
 更新時(shí)間:2008-8-19 13:46:02  點(diǎn)擊數(shù):66
【字體: 字體顏色
  一、 使用晶體頻率為22.1184MHz的AT89C52單片機(jī),串行口應(yīng)用工作方式1,以9600bps的波特率向外發(fā)送數(shù)據(jù),數(shù)據(jù)為十個(gè)數(shù)字‘0’到‘9’,循環(huán)不斷地發(fā)送。

  解:數(shù)字字符為增量進(jìn)二進(jìn)制碼,‘0’對(duì)應(yīng)0x30,‘1’= ‘0’+ 1 = 0x31,從‘0’到‘9’對(duì)應(yīng)編碼為0x30到0x39,記憶二進(jìn)制編碼較難,實(shí)際編程中用單引號(hào)括起對(duì)應(yīng)字符表示引用該字符的二進(jìn)制編碼值,如‘?’表示引用?號(hào)的編碼值。

  在用11.0592MHz晶體時(shí),9600bps的初始化分頻初值為-6,現(xiàn)晶頻加倍,如果其它條件不變,只有分頻初始加倍為-12,才能得到9600bps;如果想得到2400bps(速率降4倍),分頻初始自然加大4倍,即為-48。根據(jù)題意編得如下程序:

#include <at89x52.h>
void main( void )
{
TMOD = (TMOD & 0x0F) | 0x20;
TH1 = -12;
PCON |= 0x80; //SMOD = 1
TR1 = 1;
SCON = 0x42;
while( 1 )
{
if( TI==1 )
{
static unsigned char Dat=‘0’;
SBUF = Dat;
TI = 0;
If( ++Dat > ‘9’) Dat=‘0’;
}
}
}

  二、 在上題的基礎(chǔ)上,改為2400bps,循環(huán)發(fā)送小寫(xiě)字母‘a’到‘z’,然后是大寫(xiě)字母‘A’到‘Z’。

#include <at89x52.h>
void main( void )
{
TMOD = (TMOD & 0x0F) | 0x20;
TH1 = -96; //注意不用倍頻方式
PCON &= 0x7F; //SMOD = 0
TR1 = 1;
SCON = 0x42;
while( 1 )
{
if( TI==1 )
{
static unsigned char Dat=‘a’;
SBUF = Dat;
TI = 0;
//If( ++Dat > ‘9’) Dat=‘0’;
++Dat;
if( Dat == (‘z’+1) ) Dat=‘A’;
if( Dat == (‘Z’+1) ) Dat=‘a’;
}
}
}

  上述改變值時(shí),也可以再設(shè)一變量表示當(dāng)前的大小寫(xiě)狀態(tài),比如寫(xiě)成如下方式:

++Dat;
{
static unsigned char Caps=1;
if( Caps != 0 )
if( Dat>‘Z’){ Dat=‘a’; Caps=0; }
else
if( Dat>‘z’){ Dat=‘A’; Caps=1; }
}

  如下寫(xiě)法有錯(cuò)誤:因?yàn)樾比大Z的編碼值大,所以Dat總是‘a’

++Dat;
if( Dat>‘Z’){ Dat=‘a’}
else if( Dat>‘z’){ Dat=‘A’}

  三、 有A和B兩臺(tái)單片機(jī),晶體頻率分別為13MHz和14MHz,在容易編程的條件下,以最快的速度進(jìn)行雙工串行通信,A給B循環(huán)發(fā)送大寫(xiě)字母從‘A’到‘Z’,B給A循環(huán)發(fā)送小寫(xiě)字母從‘a’到‘z’,雙方都用中斷方式進(jìn)行收發(fā)。

  解:由于晶體頻率不同,又不成2倍關(guān)系,所以只有通信方式1和方式3,由于方式3的幀比方式1多一位,顯然方式3的有效數(shù)據(jù)(9/11)比方式1(8/10)高,但要用方式3的第9位TB8來(lái)發(fā)送數(shù)據(jù),編程難度較大,這里方式1較容易編程。

  在計(jì)算最高速率時(shí),由于單方程,雙未知數(shù),又不知道波特率為多少,所以要綜合各方面的條件,估算出A和B的分頻常數(shù),分別為-13和-14時(shí),速率不但相同,且為最大值。如下給出A機(jī)的程序:

#include <at89x52.h>
void main( void )
{
TMOD = (TMOD & 0x0F) | 0x20;
TH1 = -13; //注意用倍頻方式
PCON |= 0x80; //SMOD = 1
TR1 = 1;
SCON = 0x52; //REN = 1
ES = 1;
EA = 1;
while( 1 );
}
void RS232_intr( void ) interrupt 4 //注意RI和TI任一位變?yōu)?都中斷
{
unsigned char rDat;
if( RI == 1 ){ RI=0; rDat=SBUF; }
if( TI==1 )
{
static unsigned char tDat=‘a’;
SBUF = tDat;
TI = 0;
If( ++Dat > ‘z’) Dat=‘a’;
}
  • 上一篇: 單片機(jī)編程入門(mén)白金教程系列之八
  • 下一篇: 目前AD/DA的常用芯片簡(jiǎn)介
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1