首先是自己遇到了問題,然后在同事的幫助下解決了,然后上網(wǎng)一查有這樣的注意文章,就轉(zhuǎn)過來了
一、深入了解字符串的問題
char str11[]="a";
P1=strlen(str11);
上面的一個(gè)是一個(gè)測試字符個(gè)數(shù)的實(shí)例,用仿真就可以看到結(jié)果。結(jié)果是1。也就是說字符’’是不會(huì)被計(jì)入的。那么我們就可以通過此函數(shù)來分辯是否是字符和字符串。當(dāng)然如果字符串是一個(gè)字符的話,那么就是我們上面的那個(gè)情況了,會(huì)直接被當(dāng)做一個(gè)數(shù)看待。
注:上位機(jī)發(fā)過來的數(shù)據(jù)全部是字符串格式的。
二、串口中斷問題
先看下面的程序。
void UART_SendByte(unsigned char dat)
{
SBUF=dat;
while(!TI) ;//等待發(fā)送完畢
TI=0;
}
這個(gè)程序就是一個(gè)簡單的串口發(fā)送字符的程序,為了能夠?qū)崿F(xiàn)自動(dòng)發(fā)送和接收,我們分析一下它。我們要同時(shí)實(shí)現(xiàn)接收,有接收那么就要有串口中斷,通過串口中斷達(dá)到接收數(shù)據(jù)的目的??墒钱?dāng)ES=1,程序并不會(huì)像我們想的那樣運(yùn)行,當(dāng)執(zhí)行完SBUF=dat后,程序開始等待,大概是5個(gè)時(shí)鐘周期后,程序并沒有直接運(yùn)行TI=0這句,而是,因?yàn)榫彌_區(qū)中的字符而直接跳轉(zhuǎn)到串口中斷函數(shù)中,甚至出現(xiàn)死循環(huán)這樣的情況。
為了避開這種情況,我們引入了下面的程序:
void UART_SendByte(unsigned char dat)
{
SBUF=dat;
ES=0;
while(!TI) ;
TI=0;
ES=1;
}
或者寫做一個(gè)中斷處理函數(shù),空的函數(shù)也可以:
void Com_INT() interrupt 4//串口中斷
{
}