1、指向code區數組的指針也要加 code 關鍵字聲明。
比如 unsigned char code arr[30]; 數組,要用指針指向它,要把指針也聲明成 unsigned charcode*p;
后來使用發現其它很多地方使用是不需要這樣聲明的,只要 unsigned char *p;就行了,但是清楚地記得那次確實是要加 code 關鍵字聲明才可以的。
2、在51里面,位變量貌似是有限的。
如果要用一個布爾型作為標識變量,為了節省控件可以用 bit 型變量,但是在DRS1000項目中遇到過一次用 bit 型變量出錯,改為 unsigned char 型就OK了,那時定義的變量已經很多了,可能是把可以用bit尋址的存儲區都用光了吧。
3、用機械開關觸發INT中斷時:
由于機械開關會震動,產生的電壓會有毛刺,這些毛刺會多次觸發中斷。會造成多次觸發的因素有兩點:
(1 )開關按下時的震動。第一次低電平到來時會進入中斷處理程序,之后就算這些震動在中斷處理程序執行的過程中產生,即使進入中斷處理程序后關掉了總中斷,這些毛刺仍然會使中斷標志位置位,會在結束中斷處理程序結束后再次馬上觸發中斷處理程序。
(2 )開關釋放時的震動。在第一次高電平到來時會退出中斷處理程序,之后的毛刺會再次進入中斷處理程序。
解決辦法:
在中斷處理程序的最后加一段低電平等待代碼,等待低電平結束再延時5ms(為了消除開關釋放時毛刺的干擾),5ms延時結束后再清除中斷標志位(在中斷處理程序執行的過程中可能已經再次觸發了中斷標志位)。代碼如下:
void int0() interrupt 0
{
/*Do something*/
while(rollRA==0);//等待低電平結束
delay5(1);//等待按鍵釋放的毛刺結束
IE0=0; //清除中斷標志位,以防再次進入中斷
}
4、對于15系列單片機,在使用串口時必須要指定AUXR寄存器的值,否則程序無法正常運行。
這個情況遇到過很多次,15系列單片機只要使用到串口就一定要知名AUXR寄存器的值,不像12系列那樣可以把這個寄存器忽略。
在使用15系列單片機時養成了一個習慣:main 函數的第一句讓 AUXR=0; ,后面串口在根據需要對其進行初始化。
-
單片機
+關注
關注
6044文章
44627瀏覽量
638976 -
單片機編程
+關注
關注
10文章
49瀏覽量
25016
發布評論請先 登錄
相關推薦
單片機的四種燒寫方式是什么
單片機四種輸入模式
四種單片機按鍵設計方案
![<b class='flag-5'>四種</b><b class='flag-5'>單片機</b>按鍵設計方案](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機課設基于51單片機的波形發生器(公開資源)(四種波形)(同時輸出兩種波形)
![<b class='flag-5'>單片機</b>課設基于51<b class='flag-5'>單片機</b>的波形發生器(公開資源)(<b class='flag-5'>四種</b>波形)(同時輸出兩<b class='flag-5'>種</b>波形)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機的四種燒寫方式
![<b class='flag-5'>單片機</b>的<b class='flag-5'>四種</b>燒寫方式](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
JTAG/SWD/ISP/SWIM詳解單片機的四種燒寫方式
![JTAG/SWD/ISP/SWIM詳解<b class='flag-5'>單片機</b>的<b class='flag-5'>四種</b>燒寫方式](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機定時器常見兩大應用問題解析
![<b class='flag-5'>單片機</b>定時器<b class='flag-5'>常見</b>兩大應用問題解析](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論