單片機(jī)通信技術(shù)要點(diǎn)
1.單片機(jī)的晶振。無(wú)論是內(nèi)部晶振還是外部晶振,都能正常通信,關(guān)鍵在于晶振的頻率。大神們都說(shuō)用外部晶振比較穩(wěn)定,這個(gè)因?yàn)闇y(cè)試中沒(méi)發(fā)現(xiàn)區(qū)別太大,所以不作評(píng)論。
2.單片機(jī)波特率的計(jì)算。這個(gè)是關(guān)鍵中的重點(diǎn)。建議使用大神們寫(xiě)的51串口通信計(jì)算器這個(gè)軟件進(jìn)行計(jì)算,比較精確。波特率的大小設(shè)置,直接影響了錯(cuò)誤碼的多少。這個(gè)問(wèn)題沒(méi)得到足夠重視,往往是通信失敗的直接原因。
3.串口初始化的設(shè)置還比較靠譜,網(wǎng)上資料都可以用。諸如:
TMOD =0x20;//T1工作為方式2
SCON =0x50;//方式1:10位異步同通訊,串口允許接收
PCON =0x80;//波特率倍增,SMOD=1
TH1=TL1=0xe6; // 波特率2400
TR1=1;// 啟動(dòng)定時(shí)器1
ES=1;
EA=1;//總中斷允許
以上設(shè)置可以通用,直接復(fù)制,粘貼即可使用。TH,TL值用51串口計(jì)算器計(jì)算取得,盡可能用最小誤差的數(shù)值。
4.發(fā)送數(shù)據(jù)標(biāo)準(zhǔn)程序
void send_char(unsigned char txd)
// 傳送一個(gè)字符
{
SBUF = txd;
while(!TI);
TI=0;
}
5.接收數(shù)據(jù)的標(biāo)準(zhǔn)程序
void re_char(unsigned char txd)
//接收一個(gè)字符
{
while(1)
{
if(RI) // 是否有數(shù)據(jù)到來(lái)
{
tmp = SBUF; // 暫存接收到的數(shù)據(jù)
P0=tmp; //點(diǎn)亮P0一組燈。
RI = 0; //RI清零
}
}
}
6.補(bǔ)充要點(diǎn);刷機(jī)軟件版本選擇。STC12C4052AD單片機(jī)用STC-ISPV488版本可以快速刷機(jī);STC12C5A602S只能用STC-ISP 480版本刷機(jī)。原因也許只能向宏晶科技官方咨詢(xún)了。
評(píng)論