《8051單片機C語言編程模板》_第1頁
《8051單片機C語言編程模板》_第2頁
《8051單片機C語言編程模板》_第3頁
《8051單片機C語言編程模板》_第4頁
《8051單片機C語言編程模板》_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

《8051單片機C語言編程模板》[單片機SFR定義的頭文件#ineludevREG51.h>〃通用89C51頭文件#ineludevREG52.h>〃通用89C52頭文件#ineludevSTC11Fxx.H>〃STC11Fxx或STC11Lxx系列單片機頭文件#ineludevSTC12C2052AD.H>〃STC12CxO52或STC12Cx052AD系列單片機頭文件#include<STC12C5A60S2.H>//STC12C5A60S2系列單片機頭文件〃設(shè)定插入點〃字符處理〃定義錯誤碼〃浮點數(shù)處理[〃設(shè)定插入點〃字符處理〃定義錯誤碼〃浮點數(shù)處理#include<assert.h>#include<ctype.h>#include<errno.h>#include<float.h>#include<fstream.h>〃文件輸入/輸出#includeviomanip.h> 〃參數(shù)化輸入/輸出#includeviostream.h>〃數(shù)據(jù)流輸入/輸出〃定義各種數(shù)據(jù)類型最值常量〃定義本地化函數(shù)〃定義各種數(shù)據(jù)類型最值常量〃定義本地化函數(shù)〃定義數(shù)學函數(shù)〃定義輸入/輸出函數(shù)〃定義雜項函數(shù)及內(nèi)存分配函數(shù)〃字符串處理〃基于數(shù)組的輸入/輸出〃定義關(guān)于時間的函數(shù)〃寬字符處理及輸入/輸出〃寬字符分類〃51基本運算(包括_nop_空函數(shù))#includevlocale.h>#includevmath.h>#includevstdio.h>#includevstdlib.h>#includevstring.h>#includevstrstrea.h>#includevtime.h>#includevwchar.h>#includevwctype.h>#includevintrins.h>[常用定義聲明sfr[自定義名]=[SFR地址];〃按字節(jié)定義SFR中的存儲器名。例:sfrP1=0x90;sbit[自定義名]=[系統(tǒng)位名];〃按位定義SFR中的存儲器名。例:sbitAdd_Key=P3人1;bit[自定義名];〃定義一個位(位的值只能是0或1)例:bitLED;#define[代替名][原名]〃用代替名代替原名。例:#defineLEDP1/#defineTA0x25unsignedchar[自定義名];〃定義一個0~255的整數(shù)變量。例:unsignedchara;unsignedint[自定義名];〃定義一個0~65535的整數(shù)變量。例:unsignedinta;字節(jié)尋址片內(nèi)RAM,字節(jié)尋址片內(nèi)RAM,片內(nèi)RAM的128字節(jié)(例:dataunsignedchara;)可位尋址片內(nèi)RAM,16字節(jié),從0x20到0x2F(例:bdataunsignedchara;)所有片內(nèi)RAM,256字節(jié),從0x00到0xFF(例:idataunsignedchara;)片外RAM,256字節(jié),從0x00到0xFF(例:pdataunsignedchara;)片外RAM,64K字節(jié),從0x00到0xFFFF(例:xdataunsignedchara;)ROM存儲器,64K字節(jié),從0x00到0xFFFF(例:codeunsignedchara;)循環(huán)語句databdataidatapdataxdatacode[選擇、if(1){〃為真時語句}else{〃否則時語句}while(1){〃為真時內(nèi)容}do{〃先執(zhí)行內(nèi)容}while(1);switch(a){case0x01:〃為真時語句break;case0x02:〃為真時語句break;default:〃冗余語句break;}for(;;){〃循環(huán)語句}[主函數(shù)模板/函數(shù)名:主函數(shù)調(diào)用:無參數(shù):無返回值:無結(jié)果:程序開始處,無限循環(huán)備注:voidmain(void){〃初始程序while(1){〃無限循環(huán)程序}[中斷處理函數(shù)模板 1函數(shù)名:中斷處理函數(shù)調(diào)用:無參數(shù):無返回值:無結(jié)果:備注:voidname(void)interrupt1using1{〃處理內(nèi)容}[中斷入口說明interrupt0外部中斷0(ROM入口地址:0x03)interrupt1定時/計數(shù)器中斷0(ROM入口地址:0x0B)interrupt2外部中斷1(ROM入口地址:0x13)interrupt3定時/計數(shù)器中斷1(ROM入口地址:0x1B)interrupt4UART串口中斷(ROM入口地址:0x23)(更多的中斷依單片機型號而定,ROM中斷入口均相差8個字節(jié))using0使用寄存器組0using1使用寄存器組1using2使用寄存器組2using3使用寄存器組3[普通函數(shù)框架函數(shù)名:調(diào)用:參數(shù):無返回值:無結(jié)果:備注:voidname(void){〃函數(shù)內(nèi)容}函數(shù)名:調(diào)用:參數(shù):0?65535/0?255返回值:0?65535/0~255結(jié)果:備注:

unsignedintname(unsignedchara,unsignedintb){〃函數(shù)內(nèi)容returna;〃返回值}[延時函數(shù) 1函數(shù)名:毫秒級CPU延時函數(shù)調(diào)用:DELAY_MS(?);參數(shù):1?65535(參數(shù)不可為0)返回值:無結(jié)果:占用CPU方式延時與參數(shù)數(shù)值相同的毫秒時間備注:應用于1T單片機時iv600,應用于12T單片機時iv125voidDELAY_MS(unsignedinta){unsignedinti;while(--a!=0){for(i=0;i<600;i++);}[定時/計數(shù)器函數(shù) 'M100M100110 0 13位T/C,由TL低5位和TH的8位組成13位計數(shù)器1 1 16位T/C,TL和TH共16位計數(shù)器0 2 8位T/C,TL用于計數(shù),當TL溢出時將TH中的值自動寫入TL1 3 兩組8位T/C函數(shù)名:定時/計數(shù)器初始化函數(shù)調(diào)用:T_C_init();參數(shù):無返回值:無結(jié)果:設(shè)置SFR中T/C1和(或)T/C0相關(guān)參數(shù)備注:本函數(shù)控制T/C1和T/C0,不需要使用的部分可用〃屏蔽voidT_C_init(void){TMOD=0x11;〃高4位控制T/C1[GATE,C/T,M1,M0,GATE,C/T,M1,EA=1; 〃中斷總開關(guān)TH1=0xFF;〃16位計數(shù)寄存器T1高8位(寫入初值)TL1=0xFF;〃16位計數(shù)寄存器T1低8位ET1=1;//T/C1中斷開關(guān)TR1=1;//T/C1啟動開關(guān)//TH0=0x3C;//16位計數(shù)寄存器T0高8位//TL0=0xB0;//16位計數(shù)寄存器T0低8位(0x3CB0=50mS延時)//ET0=1;//T/C0中斷開關(guān)//TR0=1;//T/C0啟動開關(guān)}函數(shù)名:定時/計數(shù)器1中斷處理函數(shù)調(diào)用:[T/C1溢出后中斷處理參數(shù):無返回值:無結(jié)果:重新寫入16位計數(shù)寄存器初始值,處理用戶程序備注:必須允許中斷并啟動T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致voidT_C1(void)interrupt3using3{〃切換寄存器組到3TH1=0x3C;〃16位計數(shù)寄存器T1高8位(重新寫入初值)TL1=0xB0;〃16位計數(shù)寄存器T1低8位(0x3CB0=50mS延時)〃函數(shù)內(nèi)容函數(shù)名:定時/計數(shù)器0中斷處理函數(shù)調(diào)用:[T/C0溢出后中斷處理參數(shù):無返回值:無結(jié)果:重新寫入16位計數(shù)寄存器初始值,處理用戶程序備注:必須允許中斷并啟動T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致voidT_C0(void)interrupt1using1{〃切換寄存器組到1THO=0x3C;〃16位計數(shù)寄存器TO高8位(重新寫入初值)TL0=OxBO;〃16位計數(shù)寄存器TO低8位(0x3CB0=50mS延時)〃函數(shù)內(nèi)容}[外部中斷INT函數(shù)函數(shù)名:外部中斷INT初始化函數(shù)調(diào)用:INT_init();參數(shù):無返回值:無結(jié)果:啟動外部中斷INT1、INTO中斷,設(shè)置中斷方式備注:voidINT_init(void){EA=1; 〃中斷總開關(guān)EX1=1;〃允許外部中斷1中斷EX0=1;〃允許外部中斷0中斷IT1=1;〃1:下沿觸發(fā) 0:低電平觸發(fā)IT0=1;〃1:下沿觸發(fā) 0:低電平觸發(fā)函數(shù)名:外部中斷INT1中斷處理程序調(diào)用:[外部引腳INT1中斷處理參數(shù):無返回值:無結(jié)果:用戶處理外部中斷信號備注:voidINT_1(void)interrupt2using2{〃切換寄存器組到2〃用戶函數(shù)內(nèi)容

函數(shù)名:外部中斷INTO中斷處理程序調(diào)用:[外部引腳INTO中斷處理參數(shù):無返回值:無結(jié)果:用戶處理外部中斷信號備注:voidINT_O(void)interrupt0using2{〃切換寄存器組到2〃用戶函數(shù)內(nèi)容[UART串口函數(shù)[UART串口函數(shù)函數(shù)名:UART串口初始化函數(shù)調(diào)用:UART_init();參數(shù):無返回值:無結(jié)果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)備注:振蕩晶體為12MHz,PC串口端設(shè)置[4800,8,無,1,無TH1=0xF3;TH1=0xF3;TL1=0xF3;PCON=0x80;TR1=1;〃定時器初值高8位設(shè)置〃定時器初值低8位設(shè)置voidUART_init(void){EA=1;〃允許總中斷(如不使用中斷,可用〃屏蔽)ES=1;〃允許UART串口的中斷TMOD=0x20; 〃定時器T/C1工作方式2SCON=0x50; 〃串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)〃波特率倍頻(屏蔽本句波特率為2400)〃定時器啟動函數(shù)名:UART串口初始化函數(shù)調(diào)用:UART_init();參數(shù):無

返回值:無結(jié)果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)備注:振蕩晶體為11.0592MHz,PC串口端設(shè)置[19200,8,無,1,無TH1=0xFD;TH1=0xFD;TL1=0xFD;PCON=0x80;TR1=1;〃定時器初值高8位設(shè)置〃定時器初值低8位設(shè)置voidUART_init(void){EA=1;〃允許總中斷(如不使用中斷,可用〃屏蔽)ES=1;〃允許UART串口的中斷TMOD=0x20; 〃定時器T/C1工作方式2SCON=0x50; 〃串口工作方式1,允許串口接收(SCON=0x40時禁止串口接收)〃波特率倍頻(屏蔽本句波特率為9600)〃定時器啟動函數(shù)名:UART串口接收中斷處理函數(shù)調(diào)用:[SBUF收到數(shù)據(jù)后中斷處理參數(shù):無返回值:無結(jié)果:UART串口接收到數(shù)據(jù)時產(chǎn)生中斷,用戶對數(shù)據(jù)進行處理(并發(fā)送回去)備注:過長的處理程序會影響后面數(shù)據(jù)的接收voidUART_R(void)interrupt4using1{〃切換寄存器組到1unsignedcharUART_data;〃定義串口接收數(shù)據(jù)變量RI=0; 〃令接收中斷標志位為0(軟件清零)UART_data=SBUF; 〃將接收到的數(shù)據(jù)送入變量UART_data〃用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(shù)據(jù)處理)//SBUF=UART_data; 〃將接收的數(shù)據(jù)發(fā)送回去(刪除〃即生效)〃while(TI==0); 〃檢查發(fā)送中斷標志位//TI=0; 〃令發(fā)送中斷標志位為0(軟件清零)函數(shù)名:UART串口接收CPU查尋語句(非函數(shù)體)調(diào)用:將下面內(nèi)容放入主程序參數(shù):無返回值:無結(jié)果:循環(huán)查尋接收標志位RI,如有收到數(shù)據(jù)則進入if(RI==1){}備注:〃接收中斷標志位為1時unsignedcharUART_data;〃定義串口接收數(shù)據(jù)變量〃接收中斷標志位為1時UART_data=SBUF; 〃接收數(shù)據(jù)SBUF為單片機的接收發(fā)送緩沖寄存器RI=0; 〃令接收中斷標志位為0(軟件清零)〃用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(shù)據(jù)處理)//SBUF=UART_data; 〃將接收的數(shù)據(jù)發(fā)送回

溫馨提示

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

最新文檔

評論

0/150

提交評論