韓靜
摘 要:目前市面上的單片機(jī)應(yīng)用技術(shù)教材大多將重點(diǎn)集中在單片機(jī)結(jié)構(gòu)原理、接口電路與編程方面,沒有更好地體現(xiàn)單片機(jī)程序的可移植、可復(fù)用及其實(shí)現(xiàn)方法。文中提出基于構(gòu)件化的單片機(jī)程序設(shè)計方法,以推動單片機(jī)應(yīng)用技術(shù)教材建設(shè)與改革,提高教材的教學(xué)效果,同時為高校單片機(jī)應(yīng)用技術(shù)教學(xué)提供一種可行的因材施教途徑。
關(guān)鍵詞:單片機(jī);構(gòu)件化;可移植與可復(fù)用;教材建設(shè)與改革;因材施教;計算機(jī)應(yīng)用技術(shù)
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:2095-1302(2019)03-0-04
0 引 言
單片機(jī)應(yīng)用技術(shù)是電子信息、物聯(lián)網(wǎng)、自動化等專業(yè)的核心課程。經(jīng)市場調(diào)研,從單片機(jī)編程語言角度出發(fā),目前單片機(jī)應(yīng)用技術(shù)教材主要包括匯編語言、C語言、匯編語言和C語言并存的三種類型,不論哪種類型的教材,都將重點(diǎn)集中于講述單片機(jī)結(jié)構(gòu)原理、接口電路與編程,而沒有體現(xiàn)單片機(jī)程序的可移植、可復(fù)用及其實(shí)現(xiàn)方法。為此,提出基于構(gòu)件化的單片機(jī)程序設(shè)計方法。
1 基于構(gòu)件的單片機(jī)程序設(shè)計方法
現(xiàn)給出keil環(huán)境下51單片機(jī)的定時器應(yīng)用構(gòu)件化程序設(shè)計框架如圖1所列。以此說明單片機(jī)構(gòu)件化程序設(shè)計方法[1-2]。
由圖1可以看出,03底層驅(qū)動構(gòu)件、04應(yīng)用外設(shè)構(gòu)件、05通用軟件構(gòu)件、06工程源程序都是由本構(gòu)件的.h和.c文件組成。在此框架下可通過添加其他構(gòu)件和修改應(yīng)用層程序(工程源程序)而完成不同功能的軟件設(shè)計。因此,基于構(gòu)件化的單片機(jī)程序設(shè)計方法,可很好地實(shí)現(xiàn)單片機(jī)程序的移植和復(fù)用[3-5]。
在教學(xué)中,MCU底層驅(qū)動構(gòu)件和應(yīng)用外設(shè)構(gòu)件可先由老師設(shè)計好,引導(dǎo)學(xué)生將學(xué)習(xí)重點(diǎn)放在以下方面:
(1)掌握MCU底層驅(qū)動構(gòu)件頭文件和應(yīng)用外設(shè)構(gòu)件頭文件的使用方法,熟悉相關(guān)宏定義,掌握對外接口函數(shù)的調(diào)用方法;
(2)根據(jù)系統(tǒng)功能,進(jìn)行工程源程序設(shè)計和優(yōu)化。在此基礎(chǔ)上,引導(dǎo)基礎(chǔ)較好的學(xué)生進(jìn)行MCU底層驅(qū)動構(gòu)件和應(yīng)用外設(shè)驅(qū)動構(gòu)件設(shè)計,進(jìn)一步提高其單片機(jī)程序設(shè)計水平??梢?,基于構(gòu)件化的單片機(jī)程序設(shè)計方法,為高校單片機(jī)應(yīng)用技術(shù)教學(xué)提供了一種有效的因材施教途徑[6-8]。
下面給出其中定時器TIMER底層驅(qū)動構(gòu)件文件夾的程序代碼,以說明構(gòu)件化程序的設(shè)計思想和設(shè)計方法。
1.1 定時器TIMER底層驅(qū)動構(gòu)件頭文件
//==========================================
//文件名稱:timer.h
//功能概要:定時器TIMER底層驅(qū)動構(gòu)件頭文件
//芯片類型:STC89C52
//版權(quán)所有:CMP-HJ
//版本更新:2018-10-18? V1.0
//==========================================
#ifndef? _TIMER_H//防止重復(fù)定義(_TIMER_H開頭)
#define? _TIMER_H
//1.文件包含
#include “common.h”//包含公共要素頭文件
//2.宏定義
//(1)定時器號0、1
#define TIMER_0? ? ? ?0//TIMER 0
#define TIMER_1? ? ? ?1//TIMER 1
//3.對外接口函數(shù)聲明
//==========================================
//函數(shù)名稱:timer_init
//函數(shù)功能:定時器初始化
//函數(shù)參數(shù):timer_No: 定時器號TIMER_0、TIMER_1
//? ?int_ms:定時時間,單位ms,推薦最大值50ms
//函數(shù)返回:無
//==========================================
void timer_init(uint_8 timer_No, uint_8 int_ms);
//==========================================
//函數(shù)名稱:timer_start
//函數(shù)功能:定時器啟動運(yùn)行
//函數(shù)參數(shù):timer_No:定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_start(uint_8 timer_No);
//==========================================
//函數(shù)名稱:timer_stop
//函數(shù)功能:定時器停止運(yùn)行
//函數(shù)參數(shù):timer_No: 定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_stop(uint_8 timer_No);
//==========================================
//函數(shù)名稱:timer_int_enable
//函數(shù)功能:開定時器中斷
//函數(shù)參數(shù):timer_No: 定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_int_enable(uint_8 timer_No);
//==========================================
//函數(shù)名稱:timer_int_disable
//函數(shù)功能:關(guān)定時器中斷
//函數(shù)參數(shù):timer_No: 定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_int_disable(uint_8 timer_No);
#endif//防止重復(fù)定義(_TIMER_H 結(jié)尾)
//==========================================
1.2 定時器TIMER底層驅(qū)動構(gòu)件源文件
//==========================================
//文件名稱:timer.c
//功能概要:定時器TIMER底層驅(qū)動構(gòu)件源文件
//芯片類型:STC89C52
//版權(quán)所有:CMP-HJ
//版本更新:2018-10-18? V1.0
//==========================================
//1.包含本構(gòu)件頭文件
#include “timer.h”
//2.對僅用于本文件的全局變量和內(nèi)部函數(shù)的聲明
//3.對外接口函數(shù)的定義與實(shí)現(xiàn)
//==========================================
//函數(shù)名稱:timer_init
//函數(shù)功能:定時器初始化
//函數(shù)參數(shù):timer_No: 定時器號TIMER_0、TIMER_1
//? ?int_ms:定時時間,推薦最大值50 ms單位ms
//函數(shù)返回:無
//==========================================
void timer_init(uint_8 timer_No, uint_8 int_ms)
{
uint_16 timer_value;//存放定時器初值
switch(timer_No)
{
case TIMER_0:
TMOD &= ~0x0f;//TIMER_0工作方式1
TMOD |= 0x01;
timer_value=65536-(uint_16)(int_ms*(CLK_KHZ/12));
TH0 = timer_value>>8;//定時器初值高8位
TL0 = (uint_8)timer_value;//定時器初值低8位
break;
case TIMER_1:
TMOD &= ~0xf0;//TIMER_0工作方式1
TMOD |= 0x10;
timer_value=65536-(uint_16)(int_ms*(CLK_KHZ/12));
TH1 = timer_value>>8;//定時器初值高8位
TL1 = (uint_8)timer_value;//定時器初值低8位
break;
default:
break;
}
}
//==========================================
//函數(shù)名稱:timer_start
//函數(shù)功能:定時器啟動運(yùn)行
//函數(shù)參數(shù):timer_No: 定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_start(uint_8 timer_No)
{
switch(timer_No)
{
case TIMER_0:
TR0 = 1;//TIMER_0啟動
break;
case TIMER_1:
TR1 = 1;//TIMER_1啟動
break;
default:
break;
}
}
//==========================================
//函數(shù)名稱:timer_stop
//函數(shù)功能:定時器停止運(yùn)行
//函數(shù)參數(shù):timer_No:定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_stop(uint_8 timer_No)
{
switch(timer_No)
{
case TIMER_0:
TR0 = 0;//TIMER_0停止
break;
case TIMER_1:
TR1 = 0;//TIMER_1停止
break;
default:
break;
}
}
//==========================================
//函數(shù)名稱:timer_int_enable
//函數(shù)功能:開定時器中斷
//函數(shù)參數(shù):timer_No:定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_int_enable(uint_8 timer_No)
{
switch(timer_No)
{
case TIMER_0:
ET0 = 1;//TIMER_0定時中斷允許
break;
case TIMER_1:
ET1 = 1;//TIMER_1定時中斷允許
break;
default:
break;
}
}
//==========================================
//函數(shù)名稱:timer_int_disable
//函數(shù)功能:關(guān)定時器中斷
//函數(shù)參數(shù):timer_No: 定時器號TIMER_0、TIMER_1
//函數(shù)返回:無
//==========================================
void timer_int_disable(uint_8 timer_No)
{
switch(timer_No)
{
case TIMER_0:
ET0 = 0;//TIMER_0定時中斷允許
break;
case TIMER_1:
ET1 = 0;//TIMER_1定時中斷允許
break;
default:
break;
}
}
2 結(jié) 語
實(shí)踐證明,在上述基于構(gòu)件化的單片機(jī)程序設(shè)計框架下,通過搭積木的方式添加其他MCU底層驅(qū)動構(gòu)件和應(yīng)用外設(shè)驅(qū)動構(gòu)件,并根據(jù)實(shí)際需要編寫工程源程序文件夾中的程序,可快速實(shí)現(xiàn)不同的應(yīng)用功能。同時,基于構(gòu)件化的單片機(jī)程序設(shè)計方法,為高校單片機(jī)應(yīng)用技術(shù)教學(xué)提供一種可行的因材施教、分層教學(xué)的途徑。因此采用構(gòu)件化的單片機(jī)應(yīng)用技術(shù)教材將會推動單片機(jī)應(yīng)用技術(shù)教學(xué)改革,提高教材的教學(xué)效果[9-10]。
參 考 文 獻(xiàn)
[1]王宜懷.嵌入式技術(shù)基礎(chǔ)與實(shí)踐[M].北京:清華大學(xué)出版社,2017.
[2]蔡伯峰,王宜懷.基于ARM Cortex-M4的構(gòu)件化匯編框架的研究[J].計算機(jī)測量與控制,2016,24(10):138-141.
[3]曹國平,王宜懷,凌云.基于KL25的RFID構(gòu)件化工程框架研究[J].電子技術(shù)應(yīng)用,2015,41(8):20-23.
[4]張?zhí)祜w,龍海燕,丁嬌,等.基于項目化教學(xué)的單片機(jī)課程改革[J].物聯(lián)網(wǎng)技術(shù),2018,8(4):119-120.
[5]王靜霞.單片機(jī)應(yīng)用技術(shù)(C語言版)[M].北京:清華大學(xué)出版社,2015.
[6]聶森.《單片機(jī)原理及應(yīng)用》課程教學(xué)改革研究[J].教育教學(xué)論壇,2018(52):85-86.
[7]段凌飛,黃健全,張宏橋.單片機(jī)課程實(shí)踐與理論教學(xué)的深入分析與改革應(yīng)用[J].中國現(xiàn)代教育裝備,2018(23):80-82.
[8]李波.《單片機(jī)原理與應(yīng)用》實(shí)驗教學(xué)改革與實(shí)踐[J].電子世界,2018(23):101.
[9]金國華,畢勝,王璐,等.單片機(jī)實(shí)踐教學(xué)體系構(gòu)建與實(shí)施[J].電氣電子教學(xué)學(xué)報,2018,40(06):129-133.
[10]劉長榮,丁勤.基于嵌入式構(gòu)件技術(shù)的教學(xué)具設(shè)計[J].信息與電腦,2016(16):45-46.