本人從事從2004年大學(xué)畢業(yè)開(kāi)始從事開(kāi)發(fā)工作,先后做過(guò)單片機(jī)開(kāi)發(fā)、ucOSII開(kāi)發(fā)、手機(jī)開(kāi)發(fā)、android APP開(kāi)發(fā)、PHP開(kāi)發(fā)、微信小程序開(kāi)發(fā),目前從事物聯(lián)網(wǎng)開(kāi)發(fā)。我本人并非學(xué)計(jì)算機(jī)的,除了學(xué)校上課之外,基本上這些開(kāi)發(fā)都是自學(xué)的。邊學(xué)習(xí)邊工作,基本上以學(xué)以致用為目的,用到什么學(xué)習(xí)什么。 深深體會(huì)到自學(xué)的艱辛,尤其是最初入門(mén)的時(shí)候,那道砍邁過(guò)去后面再學(xué)習(xí)基本上就簡(jiǎn)單多了,所謂觸類(lèi)旁通,舉一反三。但是前面打基礎(chǔ)的時(shí)候是非常費(fèi)力的,看到很多評(píng)論說(shuō)C語(yǔ)言指針太難了,后來(lái)就放棄了。其實(shí)那是沒(méi)有找到好的學(xué)習(xí)方法,沒(méi)有人指導(dǎo)。只要有人帶一帶指點(diǎn)一下,問(wèn)題很快就能解決。 相比于國(guó)外的開(kāi)源學(xué)習(xí)氛圍,我認(rèn)為我們做的還遠(yuǎn)遠(yuǎn)不夠,我們的編程大師還非常少,像ucLinux、ucOSII、FreeRtos等等非常有名的嵌入式操作系統(tǒng),商業(yè)的更不用說(shuō)了,太多了。我們?cè)谲浖矫嬉恢倍际锹浜蟮臓顟B(tài),當(dāng)然近幾年我們自己也有不少好的作品。比如,Huawei LiteOS、Alios Things、djyos、RT-Thread、SylixOS等。一直想為學(xué)習(xí)單片機(jī)的同學(xué)做點(diǎn)什么,今年相對(duì)來(lái)說(shuō)會(huì)輕松一些,利用閑暇時(shí)間,給大家分享一些案例、學(xué)習(xí)方法和心得。本課系列課程主要針對(duì)初學(xué)者、單片機(jī)學(xué)習(xí)愛(ài)好者、學(xué)習(xí)中遇到困難者,有什么不清楚的地方可以留言討論。 本課的第一個(gè)案例,從串口編程輸出hello word 首先、打開(kāi)proteus(需要安裝文件的童鞋,發(fā)我私信1000,將自動(dòng)給你軟件連接)在打開(kāi)文件->示例工程,如下圖所示 打開(kāi)之后是原理圖,這個(gè)是ADC擴(kuò)展采樣的電路,暫時(shí)不管它 本節(jié)我們只演示,串口輸出hello word的內(nèi)容 第二、修改代碼如下void delayFunc(unsigned int ms)//不精確的延時(shí)10ms { unsigned int i=0; while(ms--) { while(++i<1000); i=0; } return; } void SendString(const char *s) //串口發(fā)送 { while(*s) { TI=0; SBUF=*s++; while(TI==0); } } void main(void) { unsigned int delay, MSB , LSB, adc_Res; //串口初始化部分 SCON = 0xDA; // SCON: mode 1, 8-bit UART, enable rcvr */ TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 0xFD; // TH1: reload value for 1200 baud @ 12MHz */ TR1 = 1; // TR1: timer 1 run */ TI = 1; // TI: set TI to send first char of UART */ while(1) { printf('hello Word!!\n'); //串口輸出hello word delayFunc(50);//延時(shí)500ms SendString('hello MCU!!\r\n');//串口輸出hello MCU delayFunc(50);//延時(shí)500ms } } 代碼解析已經(jīng)在具體代碼中了,運(yùn)行結(jié)果如下圖所示,是不是很簡(jiǎn)單呢??! 最后、總結(jié)知識(shí)點(diǎn)1.串口初始化部分可以參考8051的數(shù)據(jù)手冊(cè),這部分都是標(biāo)準(zhǔn)8051內(nèi)核通用的,哪個(gè)廠(chǎng)家的都一樣 2.注意printf函數(shù)是對(duì)串口格式輸出函數(shù),它的代碼不是公開(kāi)的,而是封裝在stdio庫(kù)中,是一個(gè)標(biāo)準(zhǔn)額庫(kù)函數(shù) 3.換行小知識(shí)點(diǎn),不知道你注意到?jīng)]有 printf('hello Word!!\n'); SendString('hello MCU!!\r\n'); 為什么一個(gè)是\n換行,而后面一個(gè)是\r\n表示換行呢? 這其中的原因出在printf庫(kù)函數(shù)上,printf在發(fā)現(xiàn)\n時(shí)會(huì)自動(dòng)轉(zhuǎn)換成\r\n輸出,所以后面一個(gè)函數(shù)輸出hello MCU時(shí),必須是標(biāo)準(zhǔn)的\r\n才可以。 本節(jié)課就結(jié)束了,有什么疑問(wèn)歡迎留言討論! |
|
來(lái)自: leafcho > 《半導(dǎo)體-電子》