羞羞小视频在线观看_羞羞视频免费入口网站_羞羞视频下载APP_男女羞羞视频软件

歡迎光臨東莞市飛江電子科技有限公司官網(wǎng)!
全國咨詢熱線

13926563901

18925580829

飛江淘寶店鋪

首頁>技術(shù)資料>51單片機(jī)

基于51單片機(jī)之編程基本模板

發(fā)布時間:2018-03-26   瀏覽量:

程序開始處的程序說明]

 
*********************************************************************************************
程序名:   
編寫人:     
編寫時間:  20 年 月 日
硬件支持:  
接口說明:   
修改日志:  
  NO.1-        
*********************************************************************************************
說明:
 
*********************************************************************************************/
 
 
 
[單片機(jī)SFR定義的頭文件]
 
#include //通用89C51頭文件
#include //通用89C52頭文件
#include //STC11Fxx或STC11Lxx系列單片機(jī)頭文件
#include //STC12Cx052或STC12Cx052AD系列單片機(jī)頭文件
#include //STC12C5A60S2系列單片機(jī)頭文件
 
[更多庫函數(shù)頭定義]
 
#include     //設(shè)定插入點(diǎn)
#include      //字符處理
#include      //定義錯誤碼
#include      //浮點(diǎn)數(shù)處理
#include     //文件輸入/輸出
#include     //參數(shù)化輸入/輸出
#include    //數(shù)據(jù)流輸入/輸出
#include     //定義各種數(shù)據(jù)類型最值常量
#include     //定義本地化函數(shù)
#include      //定義數(shù)學(xué)函數(shù)
#include      //定義輸入/輸出函數(shù)
#include     //定義雜項(xiàng)函數(shù)及內(nèi)存分配函數(shù)
#include     //字符串處理
#include    //基于數(shù)組的輸入/輸出
#include      //定義關(guān)于時間的函數(shù)
#include      //寬字符處理及輸入/輸出
#include     //寬字符分類
#include  //51基本運(yùn)算(包括_nop_空函數(shù))
 
 
 
[常用定義聲明]
 
sfr  [自定義名] = [SFR地址] ; //按字節(jié)定義SFR中的存儲器名。例:sfr P1 = 0x90;
sbit  [自定義名] = [系統(tǒng)位名] ; //按位定義SFR中的存儲器名。例:sbit Add_Key = P3 ^ 1;
bit [自定義名] ; //定義一個位(位的值只能是0或1)例:bit LED;
#define [代替名]  [原名]  //用代替名代替原名。例:#define LED P1 / #define TA 0x25
 
unsigned char [自定義名] ; //定義一個0~255的整數(shù)變量。例:unsigned char a;
unsigned int [自定義名] ; //定義一個0~65535的整數(shù)變量。例:unsigned int a;
 
 
 
[定義常量和變量的存放位置的關(guān)鍵字]
 
data 字節(jié)尋址片內(nèi)RAM,片內(nèi)RAM的128字節(jié)(例:data unsigned char a;)
bdata 可位尋址片內(nèi)RAM,16字節(jié),從0x20到0x2F(例:bdata unsigned char a;)
idata 所有片內(nèi)RAM,256字節(jié),從0x00到0xFF(例:idata unsigned char a;)
pdata 片外RAM,256字節(jié),從0x00到0xFF(例:pdata unsigned char a;)
xdata 片外RAM,64K字節(jié),從0x00到0xFFFF(例:xdata unsigned char a;)
code ROM存儲器,64K字節(jié),從0x00到0xFFFF(例:code unsigned char a;)
 
 
 
 
[選擇、循環(huán)語句]
 
if(1){
 
//為真時語句
 
}else{
 
//否則時語句
 
}
 
--------------------------
 
while(1){
 
//為真時內(nèi)容
 
}
 
--------------------------
 
do{
 
//先執(zhí)行內(nèi)容
 
}while(1);
 
--------------------------
 
switch (a){
 case 0x01:
  //為真時語句
  break;
 case 0x02:
  //為真時語句
  break;
 default:
  //冗余語句
  break;
}
 
--------------------------
 
for(;;){
 
//循環(huán)語句
 
}
 
--------------------------
 
 
[主函數(shù)模板]
 
*********************************************************************************************
函數(shù)名:主函數(shù)
調(diào)  用:無
參  數(shù):無
返回值:無
結(jié)  果:程序開始處,無限循環(huán)
備  注:
**********************************************************************************************/
void main (void){
 
 //初始程序
 
 while(1){
 
  //無限循環(huán)程序
 
 }
}
**********************************************************************************************/
 
 
[中斷處理函數(shù)模板]
*********************************************************************************************
函數(shù)名:中斷處理函數(shù)
調(diào)  用:無
參  數(shù):無
返回值:無
結(jié)  果:
備  注:
**********************************************************************************************/
void name (void) interrupt 1 using 1{
 
 //處理內(nèi)容
}
**********************************************************************************************/
 
[中斷入口說明]
 
interrupt 0 外部中斷0(ROM入口地址:0x03)
interrupt 1 定時/計(jì)數(shù)器中斷0(ROM入口地址:0x0B)
interrupt 2 外部中斷1(ROM入口地址:0x13)
interrupt 3 定時/計(jì)數(shù)器中斷1(ROM入口地址:0x1B)
interrupt 4 UART串口中斷(ROM入口地址:0x23)
(更多的中斷依單片機(jī)型號而定,ROM中斷入口均相差8個字節(jié))
 
using 0 使用寄存器組0
using 1 使用寄存器組1
using 2 使用寄存器組2
using 3 使用寄存器組3
 
 
 
 
[普通函數(shù)框架]
 
*********************************************************************************************
函數(shù)名:
調(diào)  用:
參  數(shù):無
返回值:無
結(jié)  果:
備  注:
**********************************************************************************************/
void name (void){
 
//函數(shù)內(nèi)容
 
}
**********************************************************************************************/
 
 
 
*********************************************************************************************
函數(shù)名:
調(diào)  用:
參  數(shù):0~65535 / 0~255
返回值:0~65535 / 0~255
結(jié)  果:
備  注:
**********************************************************************************************/
unsigned int name (unsigned char a,unsigned int b){
 
//函數(shù)內(nèi)容
 
return a; //返回值
}
**********************************************************************************************/
 
 
 
[延時函數(shù)]
 
*********************************************************************************************
函數(shù)名:毫秒級CPU延時函數(shù)
調(diào)  用:DELAY_MS (?);
參  數(shù):1~65535(參數(shù)不可為0)
返回值:無
結(jié)  果:占用CPU方式延時與參數(shù)數(shù)值相同的毫秒時間
備  注:應(yīng)用于1T單片機(jī)時i<600,應(yīng)用于12T單片機(jī)時i<125
*********************************************************************************************/
void DELAY_MS (unsigned int a){
 unsigned int i;
 while( --a != 0){
  for(i = 0; i < 600; i++);
 }
}
*********************************************************************************************/
 
 
 
[定時/計(jì)數(shù)器函數(shù)]
 
-----------------------------------------------------------------------------
M1 M0 方式 說明
0 0 0 13位T/C,由TL低5位和TH的8位組成13位計(jì)數(shù)器
0 1 1 16位T/C,TL和TH共16位計(jì)數(shù)器
1 0 2 8位T/C,TL用于計(jì)數(shù),當(dāng)TL溢出時將TH中的值自動寫入TL
1 1 3 兩組8位T/C
-----------------------------------------------------------------------------*********************************************************************************************
函數(shù)名:定時/計(jì)數(shù)器初始化函數(shù)
調(diào)  用:T_C_init();
參  數(shù):無
返回值:無
結(jié)  果:設(shè)置SFR中T/C1和(或)T/C0相關(guān)參數(shù)
備  注:本函數(shù)控制T/C1和T/C0,不需要使用的部分可用//屏蔽
**********************************************************************************************/
void T_C_init (void){
 TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
 EA = 1; //中斷總開關(guān)
 
 TH1 = 0xFF; //16位計(jì)數(shù)寄存器T1高8位(寫入初值)
 TL1 = 0xFF; //16位計(jì)數(shù)寄存器T1低8位
 ET1 = 1; //T/C1中斷開關(guān)
 TR1 = 1; //T/C1啟動開關(guān)
 
 //TH0 = 0x3C; //16位計(jì)數(shù)寄存器T0高8位
 //TL0 = 0xB0; //16位計(jì)數(shù)寄存器T0低8位(0x3CB0 = 50mS延時)
 //ET0 = 1; //T/C0中斷開關(guān)
 //TR0 = 1; //T/C0啟動開關(guān)
}
**********************************************************************************************/
 
*********************************************************************************************
函數(shù)名:定時/計(jì)數(shù)器1中斷處理函數(shù)
調(diào)  用:[T/C1溢出后中斷處理]
參  數(shù):無
返回值:無
結(jié)  果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序
備  注:必須允許中斷并啟動T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致
**********************************************************************************************/
void T_C1 (void) interrupt 3  using 3{ //切換寄存器組到3
 TH1 = 0x3C; //16位計(jì)數(shù)寄存器T1高8位(重新寫入初值)
 TL1 = 0xB0; //16位計(jì)數(shù)寄存器T1低8位(0x3CB0 = 50mS延時)
 
 //函數(shù)內(nèi)容
}
**********************************************************************************************/
 
*********************************************************************************************
函數(shù)名:定時/計(jì)數(shù)器0中斷處理函數(shù)
調(diào)  用:[T/C0溢出后中斷處理]
參  數(shù):無
返回值:無
結(jié)  果:重新寫入16位計(jì)數(shù)寄存器初始值,處理用戶程序
備  注:必須允許中斷并啟動T/C本函數(shù)方可有效,重新寫入初值需和T_C_init函數(shù)一致
**********************************************************************************************/
void T_C0 (void) interrupt 1  using 1{ //切換寄存器組到1
 TH0 = 0x3C; //16位計(jì)數(shù)寄存器T0高8位(重新寫入初值)
 TL0 = 0xB0; //16位計(jì)數(shù)寄存器T0低8位(0x3CB0 = 50mS延時)
 
 //函數(shù)內(nèi)容
}
**********************************************************************************************/
 
 
 
 
[外部中斷INT函數(shù)]
 
*********************************************************************************************
函數(shù)名:外部中斷INT初始化函數(shù)
調(diào)  用:INT_init();
參  數(shù):無
返回值:無
結(jié)  果:啟動外部中斷INT1、INT0中斷,設(shè)置中斷方式
備  注:
**********************************************************************************************/
void INT_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é)  果:用戶處理外部中斷信號
備  注:
**********************************************************************************************/
void INT_1 (void) interrupt 2  using 2{ //切換寄存器組到2
 
 //用戶函數(shù)內(nèi)容
 
**********************************************************************************************/
 
*********************************************************************************************
函數(shù)名:外部中斷INT0中斷處理程序
調(diào)  用:[外部引腳INT0中斷處理]
參  數(shù):無
返回值:無
結(jié)  果:用戶處理外部中斷信號
備  注:
**********************************************************************************************/
void INT_0 (void) interrupt 0  using 2{ //切換寄存器組到2
 
 //用戶函數(shù)內(nèi)容
 
**********************************************************************************************/
 
 
 
[UART串口函數(shù)]
 
*********************************************************************************************
函數(shù)名:UART串口初始化函數(shù)
調(diào)  用:UART_init();
參  數(shù):無
返回值:無
結(jié)  果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)
備  注:振蕩晶體為12MHz,PC串口端設(shè)置 [ 4800,8,無,1,無 ]
**********************************************************************************************/
void UART_init (void){
 EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
 ES = 1; //允許UART串口的中斷
 
 TMOD = 0x20; //定時器T/C1工作方式2
 SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
 TH1 = 0xF3; //定時器初值高8位設(shè)置
 TL1 = 0xF3; //定時器初值低8位設(shè)置
 PCON = 0x80; //波特率倍頻(屏蔽本句波特率為2400)
 TR1 = 1; //定時器啟動   
}
**********************************************************************************************/
 
 
*********************************************************************************************
函數(shù)名:UART串口初始化函數(shù)
調(diào)  用:UART_init();
參  數(shù):無
返回值:無
結(jié)  果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)
備  注:振蕩晶體為11.0592MHz,PC串口端設(shè)置 [ 19200,8,無,1,無 ]
**********************************************************************************************/
void UART_init (void){
 EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
 ES = 1; //允許UART串口的中斷
 
 TMOD = 0x20; //定時器T/C1工作方式2
 SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
 TH1 = 0xFD; //定時器初值高8位設(shè)置
 TL1 = 0xFD; //定時器初值低8位設(shè)置
 PCON = 0x80; //波特率倍頻(屏蔽本句波特率為9600)
 TR1 = 1; //定時器啟動   
}
**********************************************************************************************/
 
*********************************************************************************************
函數(shù)名:UART串口接收中斷處理函數(shù)
調(diào)  用:[SBUF收到數(shù)據(jù)后中斷處理]
參  數(shù):無
返回值:無
結(jié)  果:UART串口接收到數(shù)據(jù)時產(chǎn)生中斷,用戶對數(shù)據(jù)進(jìn)行處理(并發(fā)送回去)
備  注:過長的處理程序會影響后面數(shù)據(jù)的接收
**********************************************************************************************/
void UART_R (void) interrupt 4  using 1{ //切換寄存器組到1
 unsigned char UART_data; //定義串口接收數(shù)據(jù)變量
 RI = 0;   //令接收中斷標(biāo)志位為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ā)送中斷標(biāo)志位
 //TI = 0;  //令發(fā)送中斷標(biāo)志位為0(軟件清零)
**********************************************************************************************/
 
*********************************************************************************************
函數(shù)名:UART串口接收CPU查尋語句(非函數(shù)體)
調(diào)  用:將下面內(nèi)容放入主程序
參  數(shù):無
返回值:無
結(jié)  果:循環(huán)查尋接收標(biāo)志位RI,如有收到數(shù)據(jù)則進(jìn)入if (RI == 1){}
備  注:
**********************************************************************************************/
 
unsigned char UART_data; //定義串口接收數(shù)據(jù)變量
if (RI == 1){  //接收中斷標(biāo)志位為1時
 UART_data = SBUF; //接收數(shù)據(jù) SBUF 為單片機(jī)的接收發(fā)送緩沖寄存器
 RI = 0;   //令接收中斷標(biāo)志位為0(軟件清零)
 
 //用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(shù)據(jù)處理)
 
 //SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去(刪除//即生效)
 //while(TI == 0); //檢查發(fā)送中斷標(biāo)志位
 //TI = 0;  //令發(fā)送中斷標(biāo)志位為0(軟件清零)
}
**********************************************************************************************/
 
 
*********************************************************************************************
函數(shù)名:UART串口發(fā)送函數(shù)
調(diào)  用:UART_T (?);
參  數(shù):需要UART串口發(fā)送的數(shù)據(jù)(8位/1字節(jié))
返回值:無
結(jié)  果:將參數(shù)中的數(shù)據(jù)發(fā)送給UART串口,確認(rèn)發(fā)送完成后退出
備  注:
**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定義串口發(fā)送數(shù)據(jù)變量
 SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去
 while(TI == 0);  //檢查發(fā)送中斷標(biāo)志位
 TI = 0;   //令發(fā)送中斷標(biāo)志位為0(軟件清零)
}
**********************************************************************************************/