基于AT89C51的C語言使用常識.doc_第1頁
基于AT89C51的C語言使用常識.doc_第2頁
基于AT89C51的C語言使用常識.doc_第3頁
基于AT89C51的C語言使用常識.doc_第4頁
基于AT89C51的C語言使用常識.doc_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

VIP免費下載

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

-編程常識+常見元件使用常識-1.AT89C51的P0口內部無上拉電阻,使用時必須接上拉電阻,但P1,P2,P3內部有上拉電阻,所以使用時不需加上拉電阻2.基于AT89C51的c語言在使用中斷時仿真圖中必須接上中斷接口且開關電路要加驅動電路,常見開關驅動電路有三種:(1)與門(2)二極管(3)反相器(例子參見文件)附:注意設置掃鍵時間3.數碼管在使用時,在仿真圖中直接連,不用加驅動,但在protel99se原理圖中必須加驅動電路4.數碼管顯示分為靜態顯示和動態顯示,其中靜態顯示指把數碼管所有口都接上AT89C51上I/O口,使用時只要把值賦給相應口就行,而動態顯示是指把相同的口接在同一個口上,顯示時必須使用位選信號來控制顯示哪一個數碼管,并通過延時程序來利用人眼的暫留效應顯示所需的數字5.定時器和中斷在使用時必須先初始化,即進行設置6.仿真圖中線的連接可以采用不連線連接,即用相同的端口號7.C語言與中斷關系:兩者是通過共有的參數來聯系的(c語言不能調用中斷,但可以通過參數來控制中斷;中斷可以調用c語言子函數,也可以使用其變量)8.對于含有中斷以及匯編語言的混合編程,其中中斷不參與編譯,匯編語言本身已是匯編語言,所以也不參與編譯,所以這兩個如果發生錯誤根本查不出來9.中斷格式為void TINT() interrupt 1 using 1,其中interrupt 1為中斷方式,using 1為寄存器組。AT89C51的中斷方式有5種,分別為interrupt 0(外部中斷0,)interrupt 1(定時器T0中斷),interrupt 2(外部中斷1),interrupt 3(定時器T1中斷),interrupt 4(串行口中斷),其中常用的是前三個,定時器中斷用interrupt 0,外部中斷最多用兩個,即interrupt 0和interrupt 2;寄存器組有4個,分別為bank 0,bank 1,bank 2,bank 3,其中主函數默認使用bank 0,剩下的可以被其它使用,默認情況下認為不能在同一寄存器組10.AT89C51的1s延時子程序:(1)硬件方法:使用中斷實現程序為:void main(void) TMOD=0x01; /16位定時模式TH0=(65536-50000) 8; TL0=(65536-50000) & 255;TR0=1; ET0=1; EA=1; while(1) ; void timer0(void) interrupt 1 using 1/T0中斷TH0=0x3C;TL0=0xB0;/定時計數初值count+;/中斷溢出一次count+1if(count=20)Timer-;count=0; /中斷次計數,count回,倒計時時間(2) 軟件方法:a.使用NOP,但只適應于短暫延時,如10us延時子程序:void Delay10us( ) _NOP_( );_NOP_( );_NOP_( );_NOP_( );_NOP_( );_NOP_( );Delay10us( )函數中共用了6個_NOP_( )語句,每個語句執行時間為1 s。主函數調用Delay10us( )時,先執行一個LCALL指令(2 s),然后執行6個_NOP_( )語句(6 s),最后執行了一個RET指令(2 s),所以執行上述函數時共需要10 s。b.使用自增自減程序為:voidrelay(uintms)uinti,j;for(i=ms;i0;i-)for(j=110;j0;j-);(3)使用匯編語言:在C51中嵌套匯編程序段實現延時 在C51中通過預處理指令#pragma asm和#pragma endasm可以嵌套匯編語言語句。用戶編寫的匯編語言緊跟在#pragma asm之后,在#pragma endasm之前結束。如:#pragma asm匯編語言程序段#pragma endasm具體方法參見:延時子程序算法詳解11. 定時器附初值方法:a.TH0=(65536-5000)/256,TL0=(65536-5000)%256 b.TH0=(65536-50000) 8,TL0=(65536-50000) & 255(左移八位即除以28,另外28-1的結果所有8位數都為1)12. 常見顯示器件:a.led燈 b.led數碼管 c.lcd液晶顯示器13. Led燈的幾種情況:(1) 正常點亮(2) 按一下點亮,再按一下滅掉程序如下:#include #define uint unsigned int uint num,m,n; sbit key=P14; /將S1位定義為P1.4引腳 sbit LED=P10; /void delay(uint tt); void main(void) LED=1; / P2=0x00; while(1) if(!key) /消抖 num+; while(!key) / 空指令等待下次按鍵 if(num%2=1) /判斷奇偶 LED=0; else LED=1; (3) 每1s亮一次:將1s分成兩個50ms,用count控制條件:例子代碼(交通燈):#define uchar unsigned char#include/*變量、控制位定義*/uchar code table10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/09段選碼uchar code table128=0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFE,0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFE,0xFE,0xFE;/*各種狀態下紅綠燈段選碼,狀態(0-3):EW綠燈,SN紅燈;狀態(4-7):EW黃燈亮,SN紅燈;狀態(8-11):EW黃燈滅,SN紅燈;狀態(12-15):EW紅燈,SN綠燈;狀態(16-19):EW紅燈,SN黃燈亮;狀態(20-23):EW紅燈,SN黃燈滅;狀態(24-27):EWSN全紅燈*/uchar EW=30,SN=30,EW1=30,SN1=30;/初始化交通燈時間uchar count;/計時中斷次數uchari,j;/循環控制變量/*數碼管顯示子程序*/void Display(uchar j)/j控制顯示table中連續位的起始點char h,l;if(j11)/根據狀態判定時間h=Time_EW/10;/EW通行時間十位l=Time_EW%10;/EW通行時間個位else if(j23)h=Time_SN/10;/SN通行時間十位l=Time_SN%10;/SN通行時間個位for(i=0;i3)/狀態:EW綠燈,SN紅燈j=0;Display(j);/調用顯示函數while(Time_EW0)/狀態-3:EW黃燈閃爍if(count3)/狀態:EW紅燈,SN綠燈j=12;Display(j);while(Time_SN0)/狀態-6:SN黃燈閃爍j=16;if(count10)/狀態:SN黃燈亮Display(j);else/狀態:SN黃燈滅j=20;Display(j);EW=EW1;/重置EW初始時間/*主程序*/main()TMOD=0x01;/定時器工作方

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論