最近在弄中颖最新出来的8bit单片机,开端的时分挺扎手的,网上没有那些干流芯片那么多材料,一个小问题没有弄清楚都要调式好久才干搞理解,最惨的在焊接电源的时分还让我烧了片,弄得我四处找新片子,幸亏今日样片来了,烧之前没有调通的串口总算调通了,就把程序发出来,让像我相同的新手别像无头苍蝇相同处处乱闯,呵呵……
需求留意的当地:
(1)将承受和发送端口设置为输入,一起设置为输入,只将承受端口设置为输入都也不可;
(2)波特率的核算跟51单片机不相同,能够仔细看数据手册怎样核算的;
(3)RI与TI共用一个中止,需求由标志去区别(这儿跟PIC的中止有点相似了)。
程序不周到的当地还望各位见谅,有什么主张虽然提。
void init_uart()
{
P3CR &= 0xF9 ; //这个需求将端口设置为输入,否则有可能会发生乱码
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;
}
//向串口发送一个字符
void send_char_com( uint8 ch)
{
SBUF = ch;
while (!TI);
TI = 0 ;
}
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com( unsigned char *str, unsigned int strlen)
{
unsigned int k= 0 ;
do { send_char_com(*(str + k)); k++; }
while (k < strlen);
}
//承受串口发送过来的数据,并再次发给串口
void RX_ISR() interrupt 4
{
if(RI&&ES)
{
send_char_com(SBUF);
RI=0;
}
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/259631.html