新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)SH79F168串口調(diào)式

單片機(jī)SH79F168串口調(diào)式

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
最近在弄中穎最新出來的8bit單片機(jī),開始的時(shí)候挺棘手的,網(wǎng)上沒有那些主流芯片那么多資料,一個(gè)小問題沒有弄清楚都要調(diào)式很久才能搞明白,最慘的在焊接電源的時(shí)候還讓我燒了片,弄得我四處找新片子,幸好今天樣片來了,燒之前沒有調(diào)通的串口終于調(diào)通了,就把程序發(fā)出來,讓像我一樣的新手別像無頭蒼蠅一樣到處亂撞,呵呵……

需要注意的地方:

本文引用地址:http://butianyuan.cn/article/201611/321516.htm

(1)將接受和發(fā)送端口設(shè)置為輸入,同時(shí)設(shè)置為輸入,只將接受端口設(shè)置為輸入都也不行;

(2)波特率的計(jì)算跟51單片機(jī)不相同,可以仔細(xì)看數(shù)據(jù)手冊(cè)怎么計(jì)算的;

(3)RI與TI共用一個(gè)中斷,需要由標(biāo)志去區(qū)分(這里跟PIC的中斷有點(diǎn)類似了)。

程序不周到的地方還望各位見諒,有什么建議盡管提。

void init_uart()

{

P3CR &= 0xF9 ; //這個(gè)需要將端口設(shè)置為輸入,不然有可能會(huì)產(chǎn)生亂碼

TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload

TH1 = 0x94 ; //Baud:9600 fosc=16.6MHz

TL1 = 0x94 ;

SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr

PCON = 0x80 ; //SMOD=1;

IEN0 |= 0x90 ; //Enable Serial Interrupt,EA=1,ES=1;

TR1 = 1 ; // timer 1 run

//TI = 1;

}

//向串口發(fā)送一個(gè)字符

void send_char_com( uint8 ch)

{

SBUF = ch;

while (!TI);

TI = 0 ;

}

//向串口發(fā)送一個(gè)字符串,strlen為該字符串長(zhǎng)度

void send_string_com( unsigned char *str, unsigned int strlen)

{

unsigned int k= 0 ;

do { send_char_com(*(str + k)); k++; }

while (k < strlen);

}

//接受串口發(fā)送過來的數(shù)據(jù),并再次發(fā)給串口

void RX_ISR() interrupt 4

{

if(RI&&ES)

{

send_char_com(SBUF);

RI=0;

}

}



評(píng)論


技術(shù)專區(qū)

關(guān)閉