單片機程序設(shè)計范文
時間:2023-03-25 15:34:52
導(dǎo)語:如何才能寫好一篇單片機程序設(shè)計,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
1 鼠標(biāo)信號發(fā)送協(xié)議與過程
鼠標(biāo)是一個功能高度集中的小型機電一體化系統(tǒng)。它首先將直線移轉(zhuǎn)換成角度位移,再轉(zhuǎn)變成數(shù)字量,然后與按鈕狀態(tài)統(tǒng)一編碼,通過RS-232串口發(fā)出。鼠標(biāo)工作所需功率從RS-232串行接口的控制線上竊取(PS/2、USB接口鼠標(biāo)除外)。當(dāng)鼠標(biāo)被拖動超過一個最小距離或某一按鈕被按下時,它按照規(guī)定的協(xié)議將移動距離和按鈕狀態(tài)通過一次或幾次信息發(fā)送到機;主機上的鼠標(biāo)驅(qū)動程序?qū)⑿畔⒆儞Q成鼠標(biāo)位置和按鈕狀態(tài)供其它程序模塊調(diào)用。每發(fā)生一次移動或按鈕狀態(tài)變化,鼠標(biāo)向上發(fā)送一次信息。通常一般鼠標(biāo)的分辨率為400DPI。理論上即沿著某一方向每拖動一英寸(一般速度),會產(chǎn)生400次信息發(fā)送過程。,如果拖動較快,則信息發(fā)送次數(shù)送減少,但所反映的總的移動距離仍然是400步。
各種串行接口鼠標(biāo)在物理層普遍采用標(biāo)準(zhǔn)的串行通信協(xié)議,波特率為1200bps。幀格式為7個數(shù)據(jù)位、2個停止位,無奇偶校驗位。上層協(xié)議則在此基礎(chǔ)上以十六進制數(shù)形式直接發(fā)更新鼠標(biāo)信息,包括:初始化報告:移動方向、距離、按鈕狀態(tài)。其一般形式如表1所示。
表1 鼠標(biāo)信息發(fā)送格式
序 號名 稱字串形式長 度意 義說 明1初始化報告4DH('M')1字節(jié)聲明初始化結(jié)束加電時發(fā)送一次2移動、按鈕P1、P2、P33字節(jié)反映按鈕狀態(tài)、移動方向和距離移動或按鈕操作時發(fā)送
上述P1、P2、P3三個參數(shù)說明:
P1_D7D6固定值01;D1D0=11本次鼠標(biāo)移動包含左右移動分量;D3D2=11本次鼠標(biāo)移動包含上下移動分量;D4=1目前鼠標(biāo)右鍵呈按下狀態(tài);D5=1目前鼠標(biāo)左鍵呈按下狀態(tài)(D4D5=00則鍵呈釋放狀態(tài))。
P2_D7D6固定值00;其余六位表示一個有符號二進制數(shù),反映左右移動量,大于0為向右移動,小于0為向左移動。
P3_D7D6固定值00;其余六位表示一個有符號二進制數(shù),反映上下移動量,大于0為向下移動,小于0為向上移動。
例如:[6CH 02H 3AH](P1=6CH,P2=02H,P3=3AH)反饋出鼠標(biāo)向右移動了2個單位,向上移動了6個單位,目前左鍵按下。
2 鼠標(biāo)接口程序設(shè)計
80C196系列單片機內(nèi)設(shè)RS-232收發(fā)器,但需要配置接口芯片實現(xiàn)電平轉(zhuǎn)換??紤]到鼠標(biāo)從串口竊取功率,接口芯片必須具有一定的驅(qū)動能力,而不能要用簡單的準(zhǔn)RS-232電平轉(zhuǎn)換器。這里采用MAX232E作為接口芯片。
圖1中左側(cè)為80C196單片機,P2.0(TXD)、P2.1(RXD)通過MAX232E形成滿足鼠標(biāo)要求的串行接口,包括生成標(biāo)準(zhǔn)RS-232C電平和提供電源供應(yīng)。圖1中最右邊為9針或24針標(biāo)準(zhǔn)串行接插件。由于鼠標(biāo)的電源供應(yīng)采用功率竊取方案,由DTR/RTS提供,這里為DTR加限流電阻防止對鼠標(biāo)造成傷害。RTS由MAX232E垢信號發(fā)送端提供,通過80C196的P2.0控制MAX232E的10腳(對應(yīng)的輸出腳為7腳)電平高低以改變7腳電位,使鼠標(biāo)可以接收來自RTS的控制命令,以實現(xiàn)鼠標(biāo)安裝與否的檢測。MAX232E的11腳(對應(yīng)的輸入腳為14腳)設(shè)備高電平以保證14腳電位為負(fù)RS-232電位,滿足鼠標(biāo)發(fā)送信號時的電平要求。
從鏈路層看,80C196串行接口的四種工作方式均不滿足鼠標(biāo)的幀格式要求;但其工作方式1(1位起始位、8位數(shù)據(jù)位、1位停止位)的總傳送位數(shù)與鼠標(biāo)(1位起始位、7個數(shù)據(jù)位、2個停止位)相同,均為10位。接收過程中80C196收到7個數(shù)據(jù)位后,將2個停止位中的第一個作為數(shù)據(jù)位裝入接收緩沖器的最高位,由于停止位在物理層是高電平,作為數(shù)據(jù)被接收后相當(dāng)于邏輯“0”;剩下的第二個停止位給好為80C196提供了有效的停止位。利用80C196的工作方式1完全可以保證正確接收鼠標(biāo)信息。
單片機起動后,通過鼠標(biāo)驅(qū)動模塊對鼠標(biāo)進行初始化,即通過P2.0使RTS電平翻轉(zhuǎn)一次而令鼠標(biāo)發(fā)送初始化報告,以確認(rèn)鼠標(biāo)是否安裝。之后,鼠標(biāo)即可隨著拖動或按鈕操作向單片機發(fā)送動作信息,經(jīng)接口模塊釋放即可反應(yīng)鼠標(biāo)位置和按鈕狀態(tài)。
鼠標(biāo)接口模塊主要包括按鈕狀態(tài)識別和位置識別兩個部分。80C196將根據(jù)接收到的鼠標(biāo)信息不斷刷新鼠標(biāo)信息緩沖區(qū)。由于鼠標(biāo)事件間隔不確定,采用掃描方式但會浪費CPU時間,還可能因來不及處理而丟失信息。有效的處理方法是采用中斷方式接收,應(yīng)用模塊通過軟件接口獲得鼠標(biāo)信息。完整的鼠標(biāo)接口程序流程圖如圖2所示。在初始化階段,首先檢查鼠標(biāo)是否存在,根據(jù)結(jié)果設(shè)置標(biāo)志位,以備以后取鼠標(biāo)信息時判斷用;根據(jù)需要設(shè)定鼠標(biāo)初始化位置、按鈕原始狀態(tài);最后設(shè)置串行接口參數(shù)(幀格式等)并開放鼠標(biāo)中斷。鼠標(biāo)發(fā)送信息時,第三個字節(jié)為一個完整的信息報告。但80C196每接收到一個字節(jié),就產(chǎn)生一次中斷,然后根據(jù)當(dāng)前字節(jié)是否大于40H確定其性質(zhì)。若是信息報告的首字節(jié),則還要進一步通過有效性檢驗后保存;若不是首字節(jié),則必須經(jīng)過一系列檢驗后保存起來。收到三個字節(jié)后立即進行命令分析和執(zhí)行。具體處理過程可參看源程序。用戶模塊通過特定接口模塊(圖2(b))獲得鼠標(biāo)當(dāng)前位置和按鈕狀,并可通過進位標(biāo)志C=0/1判斷鼠標(biāo)是否安裝。
下面是圖2、3程序流程圖如圖對應(yīng)的程序清單。該程序要求80C196單片機的工作頻率為12MHz;如果采有其它工作頻率,通過修改串行口的波特率設(shè)置參數(shù)以及延時程序的時間常數(shù)即可。
;
;8098特殊功能寄存器預(yù)定義
R0 EQU 00H:Word
SBUD EQU 07H:Byte
INT_MASK EQU 08H:Byte
INT_PEND EQU 09H:Byte
BAUD_RT EQU 0EH:Byte
IOP2 EQU 10H:Byte
SP_CON EQU 11H:Byte
SP_STAT EQU 11H:Byte
IOC1 EQU 16H:Byte
SP EQU 18H:Word
篇2
關(guān)鍵詞 單片機;C語言;TG12864;液晶顯示
中圖分類號:TP271 文獻標(biāo)識碼:A 文章編號:1671—7597(2013)031-017-02
1 TG12864液晶原理
1.1 TG12864顯示原理
點陣式LCD其顯示原理是控制LCD點陣中點的亮暗,亮和暗的點陣按一定規(guī)律可以組成漢字,組成一幅圖形和曲線等。
1.2 TG12864內(nèi)部結(jié)構(gòu)及相關(guān)指令
1.2.1 TG12864內(nèi)部結(jié)構(gòu)
TG12864是一種圖形點陣液晶顯示器,它主要由行驅(qū)動器、列驅(qū)動器及128×64全點陣液晶顯示器組成,有20個外部引腳??梢杂蓡纹瑱C控制顯示8×4個16×16點陣漢字。
1.2.2 TG12864相關(guān)指令
該類液晶顯示模塊的指令系統(tǒng)比較簡單,總共有七種。
1)顯示開關(guān)指令。
功能:設(shè)置屏幕顯示開/關(guān),DB0=1,開顯示;DB0=0,關(guān)顯示。DB7~DB0=0x3f,開顯示;DB7~DB0=0x3e,關(guān)顯示。
2)顯示起始行設(shè)置。
功能:顯示起始行是由Z地址計數(shù)器控制的,該命令自動將A0~A5位地址送入Z地址計數(shù)器,起始地址可以是0~63范圍內(nèi)任意一行。Z地址計數(shù)器具有循環(huán)計數(shù)功能,用于顯示行掃面同步,當(dāng)掃描完一行后自動加一。DB7~DB0=0xc0,顯示從0行開始。
3)頁設(shè)置。
功能:頁地址存儲在X地址計數(shù)器中,A2~A0可表示8頁,讀寫數(shù)據(jù)對頁地址沒有影響,除本指令可改變頁地址外,復(fù)位信號RST可把頁地址計數(shù)器內(nèi)容清零。DB7~DB0=0xb8,顯示從0頁開始。
4)列地址設(shè)置。
功能:列地址存儲在Y地址計數(shù)器中,讀寫數(shù)據(jù)對列地址有影響,在對DDRAM進行讀寫操作后,Y地址自動加一。DB7~DB0=0x40,顯示從0列開始。
5)讀狀態(tài)。
功能:讀忙信號標(biāo)志位BF,復(fù)位標(biāo)志RST以及顯示狀態(tài)(ON/OFF)bf=1,內(nèi)部忙;bf=0,內(nèi)部空閑;res=1,正處于復(fù)位初始化狀態(tài),res=0,正常狀態(tài)。
6)寫數(shù)據(jù)。
寫數(shù)據(jù)到DDRAM,DDRAM是存儲圖形數(shù)據(jù)的,寫數(shù)據(jù)到DDRAM前,要先執(zhí)行設(shè)置頁地址及設(shè)置列地址命令。
7)讀數(shù)據(jù)。
從DDRAM讀數(shù)據(jù),讀數(shù)據(jù)前,要先執(zhí)行設(shè)置頁地址及設(shè)置列地址命令。
2 應(yīng)用程序設(shè)計
#include
#define uchar unsigned char
#define uint unsigned int
#define disp_on 0x3f //定義開顯示
#define disp_off 0x3e //定義關(guān)顯示
#define dis_x 0xb8 //定義顯示0頁
#define dis_y 0x40 //定義顯示0列
#define dis_z 0xc0 //定義顯示0行
#define db P0
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
sbit cs1=P2^3;
sbit cs2=P2^4;
sbit rst=P2^5;
sbit bf=P2^6;
sbit res=P2^7;
uchar code tab[]={/*青海工業(yè)職業(yè)學(xué)校*/0x01,0x00,0x01,0x00,0x3F,0xF8,0x01...};
void check_busy(void);
void chushihua(void);
void delay(uint);
void wr_lcd(uchar,uchar);
void clear_lcd(void);
void display(void);
void _disp(uchar,uchar,uchar,uchar,uchar,uchar *);
void main() //主程序
{chushihua();display();while(1);}
void chushihua(void) //液晶初始化函數(shù)
{rst=0;delay(50);rst=1;
cs1=1;cs2=1;
wr_lcd(0,disp_off);
wr_lcd(0,disp_on);}
void wr_lcd(uchar i,uchar j) //寫液晶函數(shù)
{check_busy();
rs=i;rw=0;
db=j;e=1;
delay(1);
e=0;}
void check_busy(void) //檢測忙閑函數(shù)
{db=0xff;
rs=0;rw=1;
delay(1);
e=1;
while(res||bf==1);
e=0;}
void clear_lcd(void) //清屏函數(shù)
{uchar i,j;cs1=1;cs2=1;
wr_lcd(0,disp_on);
for(j=0;j
{wr_lcd(0,dis_x+j);
wr_lcd(0,dis_y);
wr_lcd(0,dis_z);
for(i=0;i
{wr_lcd(1,0x00);
wr_lcd(1,0x00);}
}
}
void _disp(uchar ye,uchar lie,uchar hang,uchar ls,uchar zs,uchar *ptr1) //液晶顯示函數(shù)
{ uchar i,j,m,n,a;
wr_lcd(0,disp_on);
for(m=0;m
{for(n=0;n
{for(j=0;j
{ wr_lcd(0,dis_x+j+ye+m*2); //顯示起始頁設(shè)置
wr_lcd(0,dis_z); //顯示起始行設(shè)置
wr_lcd(0,dis_y+lie+n*ls); //顯示起始列設(shè)置
a=j*ls+n*2*ls+m*zs*2*ls; //控制字的顯示數(shù)組位
for(i=0;i
{wr_lcd(1,*(ptr1+a+i));}
}
}
}
}
void display(void) //顯示主程序
{
uchar *ptr;
clear_lcd();
cs1=1;cs2=0; //開左屏顯示青海工業(yè)
ptr=&tab[0]; //取數(shù)組首地址
_disp(0,0,1,16,4,ptr); //顯示從0頁、0列開始,顯示一行,每個字16列顯示2個字
cs1=0;cs2=1; //開右屏顯示職業(yè)學(xué)校
ptr=&tab[128]; //取數(shù)組的第128個元素地址
_disp(0,0,1,16,4,ptr); //顯示從0頁、0列開始,顯示一行,每個字16列顯示2個字
}
void delay(uint x) //延時函數(shù)
{uchar i;
for(;x>0;x--)
for(i=0;i
以上程序,如果要從3頁,4列開始,在左屏顯示2行,每個字16列,共顯示4個字青海工業(yè),只要將顯示主程序改為:
void display(void)
{uchar *ptr;
clear_lcd();
cs1=1;cs2=0;
ptr=&tab[0];
_disp(3,4,2,16,2,ptr);}
上述液晶顯示程序,應(yīng)用起來靈活、方便,要將漢字顯示在液晶的什么位置,只需修改顯示主程序中_disp(0,0,1,16,4,ptr)函數(shù)中的數(shù)據(jù)即可。
3 結(jié)束語
用C語言程序來對液晶顯示模塊進行編程控制,編程效率高,思路清晰,處理問題靈活方便,相對匯編語言有明顯的優(yōu)勢。
篇3
【關(guān)鍵詞】SDRAM;自動化測試;設(shè)計
同步動態(tài)隨機存取內(nèi)存(synchronous dynamic random access memory,簡稱SDRAM)為同步動態(tài)存儲器,可用來臨時存放數(shù)據(jù)。SDRAM有一個同步接口,在響應(yīng)控制輸入前會等待一個時鐘信號,時鐘被用來驅(qū)動一個有限狀態(tài)機,對進入的指令進行流水線操作,而不需要等待數(shù)據(jù)寫入存儲隊列的時間。 其缺點為掉電數(shù)據(jù)會丟失。
我公司常將SDRAM存儲芯片與ARM芯片配合使用,而用戶燒寫的程序運行在SDRAM上,如果該芯片出現(xiàn)問題,用戶程序?qū)⒉荒苷_\行,而導(dǎo)致未知的問題,甚至可以導(dǎo)致裝置無法正常工作。因而對SDRAM存儲芯片內(nèi)存單元讀寫的測試可有效由于SDRAM內(nèi)存單元、地址線和數(shù)據(jù)線的問題導(dǎo)致的設(shè)備發(fā)生異常,并且實現(xiàn)測試自動化,節(jié)省了測試時間,也保證了測試的精度。
1.測試策略及組網(wǎng)
本次測試開始時,曾設(shè)計3種測試方案:
方案1:使用產(chǎn)品代碼的基礎(chǔ)上進行修改
優(yōu)點是工作量小,修改較小。
缺點是由于用戶程序直接在SDRAM上運行,生成的變量直接保存到SDRAM中,并且程序運行的過程中串口緩沖區(qū)和顯示緩沖區(qū)直接保存到SDRAM中,導(dǎo)致某些區(qū)域無法進行測試,所以放棄該方案。
方案2:通過移植UBOOT進行測試
優(yōu)點是工作量小,修改較小,測試原理成熟。
缺點是uboot的代碼和堆、??臻g0x10000000處開始,這些空間是不能被刷的,否則就掛死,所以放棄該方案。
方案3:通過修改BOOTLOADER進行測試
優(yōu)點是工作量小,修改較小,可以對整個SDRAM進行完全測試。
缺點是呈現(xiàn)給操作者的結(jié)果不夠直觀,需要測試者具有一定的編程基礎(chǔ)。
最終選擇第3種測試方案。
2.測試環(huán)境與測試儀器
搭建測試環(huán)境:①筆記本電腦一臺,型號:X230I;②硬件仿真工具一套,型號:JLINK③硬件仿真軟件,型號:AXD
3.測試內(nèi)容
3.1 數(shù)據(jù)線的連接測試
數(shù)據(jù)線的連接可能存在兩種錯誤,一種是被斷開,另一種布線或生產(chǎn)造成互相短路。Denx設(shè)計的數(shù)據(jù)線檢測算法檢測數(shù)據(jù)線的連接錯誤:以64位地址線為例,pattern=0b101010101010101010.... 能檢測出奇偶位之間的數(shù)據(jù)錯誤。如果這個錯誤被排除,每兩根數(shù)據(jù)線組成一組(這是理解下一個pattern的關(guān)鍵),再用相同的辦法,檢測每相鄰兩組之間是否有短路,就得到第二個pattern,就是 0b110011001100...... 依次類推,相繼寫入并讀出這6個pattern分別是 0xaaaaaaaaaaaaaaaa,0xcccccccccccccccc,0xf0f0f0f0f0f0f0f0,0xff00ff00ff00ff00,0xffff0000ffff0000,0xffffffff00000000就能驗證是否存在數(shù)據(jù)線交叉短路錯誤。
3.2 地址線錯誤測試
如果地址線存在錯誤,其癥狀是地址空間中的兩個不同位置被映射到同一物理存儲位置。更通俗地講,就是寫一個位置卻“改變”了另一個位置。
地址線的錯誤檢測相對簡單,其算法是:
(1)將地址的值作為內(nèi)容寫入該地址處,匯編的表示方法是(addr)=addr。即將地址值寫到地址對應(yīng)的空間里,這樣確保每一個位置的內(nèi)容不同。
(2)依次將內(nèi)存基地址的某一根地址線的值翻轉(zhuǎn)(flip/toggle)得到某個地址,從該地址取值,如果該值和基地址的值相等,則表示某一位地址線有問題。
這個算法的特點是每次只檢測一根地址線,方法簡單有效。
3.3 SDRAM內(nèi)存單元讀寫測試
(1)點擊菜單欄“Execute”―“Go”命令,程序全速運行。
(2)測試者等待XX分鐘,函數(shù)指針跳轉(zhuǎn)到Main函數(shù),看到提示則測試成功,如圖1所示:
圖1
(3)測試者等待XX分鐘,未看到上圖所示,用戶點擊菜單欄“Execute”―“Stop”命令,測試程序?qū)⑼V埂?/p>
(4)點擊菜單欄“Processor Views”―“Registers”命令,查看“Current”―“R2”的Value值,該值即為內(nèi)存單元讀寫錯誤單元。如圖2所示:
圖2
結(jié)果要求:SDRAM內(nèi)存單元讀寫正確,測試者看到測試成功圖即圖1。
3.4 測試說明
本次測試時僅對SDRAM內(nèi)存單元正確性進行測試。
存儲單元的檢測則是真正對DDR內(nèi)存芯片的檢測。內(nèi)存芯片的常見錯誤是bit-stuck,簡而言之,就是讓它是0,它偏為1,讓它為1,它偏為0,檢測方法也很簡單,就是用不同的pattern去寫盡可能所有的地址并讀回比較。因此測試數(shù)據(jù)選擇0x55555555,0xAAAAAAAA。
篇4
關(guān)鍵詞:高等院校;微機原理;單片機;教學(xué)改革
中圖分類號:G642.423 文獻標(biāo)識碼:A 文章編號:2095-1302(2012)07-0074-03
0 引 言
微機原理及應(yīng)用和單片機原理及應(yīng)用是現(xiàn)今大多數(shù)院校自動化、電氣自動化等信息工程類專業(yè)的重要課程。微機原理偏向于原理性的介紹,涉及的實驗比較簡單;而單片機則更偏向于應(yīng)用性,涉及的實驗較多。這兩門課程的實驗過程及使用的芯片及編程的的方式非常類似。大多數(shù)院校選擇先開設(shè)微機原理的課程,在隨后的一個學(xué)期開設(shè)單片機的課程。這樣的選擇在邏輯上沒有錯誤,可畢竟這兩門課程有很大的相似之處,但又有各自的特點。微機原理和單片機的內(nèi)容既相關(guān)又有明顯的區(qū)別,前后開課會使得學(xué)生可能產(chǎn)生忘了前面、記不住后面的感覺,同時兩門課的相似點又使得學(xué)生區(qū)分不清,對內(nèi)容產(chǎn)生混淆。而實驗的環(huán)節(jié),用的實驗箱不同,雖然芯片不同,學(xué)生也僅僅為做而做。在實際教學(xué)中,會經(jīng)常碰到學(xué)生提出“微機原理的匯編語言編程要分段(segment),而單片機的匯編語言編程為何不分段”、“微機原理課里的標(biāo)志寄存器有16位,為什么單片機里才有8位”等問題。此外,這兩門課一般都由同一位教師講授,教師備課時不由得對比著備課,在教學(xué)中自然把兩門課相關(guān)知識點進行描述或比較,使得單一門課程的教學(xué)時間無形中被占用。對此,以筆者實際的教學(xué)經(jīng)驗,現(xiàn)對這兩門課程的教學(xué)改革進行一些探討。
1 課程改革思路
微機原理及應(yīng)用課程主要是幫助學(xué)生理解計算機的原理和結(jié)構(gòu),通過學(xué)習(xí),使學(xué)生熟悉一款比較經(jīng)典的CPU和以該CPU為中心的總線、存儲器存儲過程等數(shù)據(jù)處理以及用匯編語言編寫程序的方法;同時,還涉及了諸如8255、8259A等一些芯片的運用及接口編程知識,微機原理及應(yīng)用偏向于原理性的闡述。而單片機原理及應(yīng)用課程主要是針對某類型已經(jīng)非常成熟的單片機型號,幫助學(xué)生學(xué)會如何使用單片微型機以及針對實現(xiàn)不同的功能進行編程的知識,該課程更偏向于應(yīng)用。
這兩門課程的內(nèi)容既有很大交叉,又有各自的特點:微機原理及應(yīng)用理論更系統(tǒng),單片機應(yīng)用性更強。獨立開設(shè)兩門課程,不可避免地會出現(xiàn)知識點的重復(fù)和各自重點的缺失。由此,針對這兩門課程授課過程中的不足,筆者有了對這兩門課程進行改革的想法。即:同步開課,結(jié)合實際教授理論內(nèi)容,合理分配實驗學(xué)時等。
2 教學(xué)方面
2.1 教學(xué)內(nèi)容
在理論教學(xué)方面,筆者對微機原理和單片機的教學(xué)內(nèi)容進行了整合。微機原理基于馮·諾依曼結(jié)構(gòu),這種理論更易于學(xué)生了解計算機體系和計算機系統(tǒng)的工作方式;單片機本質(zhì)上也是計算機系統(tǒng),只是性能弱,功能單一。因此,在理論講課過程中,應(yīng)該以微機原理為主,同時針對微機原理和單片機的明顯不同,比如同是45H,在微機原理中是立即數(shù),在單片機中是存儲的地址等,在這方面加以重點講解。微機原理的內(nèi)容較多,涉及面廣,如果對知識點面面俱到,不僅時間不夠,而且學(xué)生的學(xué)習(xí)積極性肯定不高。單片機原理課程主要基于80C51單片機進行講解,并介紹單片機的特點、在片資源、匯編語言編程、片內(nèi)接口及中斷、通信及A/D、D/A轉(zhuǎn)換等。在這當(dāng)中,肯定會遇到一些和微機原理相沖突的地方,不論講解與否,勢必會影響到后續(xù)課程講授的連貫和流暢,因此,必須要對相關(guān)內(nèi)容進行取舍。
篇5
中圖分類號:G424.1 文獻標(biāo)識碼:A
Application and Research of Project Approach
Course in Microcontroller Technology
WANG Wenhai
(Changsha Aeronautical Vocational and Technical College, Changsha, Hu'nan 410124)
AbstractBased on the objective and teaching characteristic of single-chip microcomputer vocational electronic speciality course, in the course of microcontroller technology, use of project-driven method of teaching can play the leading role of teachers and the main role students'; Improve teaching efficiency and the teaching quality,and cultivate students' comprehensive ability.
Key wordsmicrocontroller technology; project teaching; teaching do unity; action oriented
單片機技術(shù)是高職電子信息類學(xué)生必須掌握的一門技術(shù),同時也是高職院校電子類專業(yè)為電子產(chǎn)品調(diào)試、維修、助理設(shè)計等崗位服務(wù)的專業(yè)課程,學(xué)生不僅要掌握單片機的接口應(yīng)用的基本技能,還應(yīng)具有實際工程應(yīng)用能力。因此,具有實用性強、學(xué)習(xí)難度大的特點。
1 單片機技術(shù)課程的教學(xué)現(xiàn)狀
傳統(tǒng)的單片機課程教學(xué)中,一般開設(shè)幾十學(xué)時,通常是采用“填鴨式”的教學(xué)方法、“理論教學(xué)”+“課程設(shè)計”的教學(xué)模式?!袄碚摻虒W(xué)”以講授理論為主,內(nèi)容抽象、枯燥,課程設(shè)計不過是作紙上談兵的游戲,課程的教學(xué)效果一般。
2 教學(xué)做合一的教學(xué)模式和項目驅(qū)動法
“教學(xué)做合一”是指以培養(yǎng)經(jīng)濟社會發(fā)展所需要的人才為宗旨,教學(xué)活動以做為載體和目標(biāo),在做中教,在做中學(xué),在教學(xué)中推動做,在做的基礎(chǔ)上,實現(xiàn)教學(xué)做的有機統(tǒng)一。在這種教學(xué)關(guān)系下,教師是教的主體、做的主導(dǎo),主要任務(wù)是指導(dǎo)學(xué)生學(xué);學(xué)生是學(xué)主體、做的主體。主要任務(wù)是學(xué)習(xí),通過親自做的環(huán)節(jié),學(xué)得知識,掌握技能。
“項目教學(xué)法”是通過實施一個完整的項目而進行的教學(xué)活動,其目的是在課堂教學(xué)中把理論與實踐教學(xué)有機地結(jié)合起來,充分調(diào)動學(xué)生的學(xué)習(xí)積極性、培養(yǎng)學(xué)生解決實際問題的綜合能力和創(chuàng)新能力。
為解決單片機技術(shù)課程學(xué)生難學(xué)、教學(xué)效率低下和教學(xué)質(zhì)量一般的問題,進行教學(xué)改革:打破“理論教學(xué)”+“課程設(shè)計”的教學(xué)模式采用教學(xué)做合一的教學(xué)模式,拋棄“填鴨式”的教學(xué)方法采用項目驅(qū)動法是一種有效的舉措。
3 單片機技術(shù)課程教學(xué)項目的設(shè)計
根據(jù)單片機技術(shù)的課程目標(biāo)、教學(xué)內(nèi)容及教學(xué)特點,以恰當(dāng)、實用、漸進為原則設(shè)計課程教學(xué)項目。筆者在教改實踐中按課程目標(biāo)把單片機技術(shù)原理論授課內(nèi)容解構(gòu),設(shè)計了六個項目,如下:
3.1 廣告燈的設(shè)計制作
項目要求:①用keilC51、Proteus、EASY等軟件作開發(fā)工具;②用AT89C51單片機作控制;③8位發(fā)光二極管作顯示;④廣告燈輪流閃爍時間為0.2秒;⑤發(fā)揮:增加1-2種顯示模式。
項目任務(wù):①擬定總體設(shè)計制作方案;②設(shè)計硬件電路;③編制軟件流程圖及設(shè)計源程序;④仿真調(diào)試;⑤安裝元件,制作廣告燈,調(diào)試功能指標(biāo);⑥完成項目報告。
內(nèi)容:①單片機內(nèi)部的結(jié)構(gòu);②單片機的存儲器;③單片機的IO口;④單片機的引腳及工作狀態(tài);⑤單片機指令系統(tǒng);⑥簡單匯編程序設(shè)計;⑦工具軟件的使用。
3.2 頻率計的設(shè)計制作
項目要求:①用keilC51、Proteus、EASY等軟件作開發(fā)工具;②用AT89C51單片機作控制;③數(shù)碼管作顯示;④能測1HZ-65KHZ的信號頻率,誤差允許?HZ;⑤發(fā)揮:擴展頻率范圍等。
項目任務(wù): 同上。
內(nèi)容:①單片機的中斷系統(tǒng);②定時/計數(shù)器;③數(shù)碼管顯示器接口;④工具軟件的使用;⑤匯編程序設(shè)計。
3.3 電壓表的設(shè)計制作
項目要求:①用keilC51、Proteus、EASY等軟件作開發(fā)工具;②用AT89C51單片機作控制,ADC0809作AD轉(zhuǎn)換器;③三位數(shù)碼管作顯示;④能測試0-5v的直流電壓;⑤發(fā)揮:增加超量程提示功能、自動量程轉(zhuǎn)換功能等。
項目任務(wù):同上。
內(nèi)容:①C51程序設(shè)計;②A/D轉(zhuǎn)換器與單片機技術(shù);③數(shù)碼管顯示器接口;④C51程序設(shè)計。
3.4 信號源的設(shè)計制作
項目要求:①用keilC51、Proteus、EASY等軟件作開發(fā)工具;②用AT89C51單片機作控制,DAC0832作DA轉(zhuǎn)換;③三只按鍵作操作按鍵,8位數(shù)碼管作顯示;④能鍵控輸出方波、三角波、正弦波三種波形信號;⑤輸出信號幅度穩(wěn)定、頻率可調(diào);⑥發(fā)揮:幅度可調(diào)、頻率可調(diào)等。
項目任務(wù):同上。
內(nèi)容:①D/A轉(zhuǎn)換器與單片機技術(shù);②獨立式鍵盤與單片機技術(shù);③C51程序設(shè)計。
3.5 密碼鎖的設(shè)計制作
項目要求: ①用keilC51、Proteus、EASY等軟件作開發(fā)工具;②用AT89C51單片機作控制;③LCD作顯示;④具有設(shè)置、清除6位密碼的功能;⑤發(fā)揮:密碼錯誤提示、控制電機開鎖等。
項目任務(wù):同上。
內(nèi)容:①矩陣式鍵盤;②液晶1602的應(yīng)用;③C51程序設(shè)計。
3.6 遠程報警器的設(shè)計與制作
項目要求:①用keilC51、Proteus、EASY等軟件作開發(fā)工具;②用AT89C51單片機作控制,采用串行通信方式傳送數(shù)據(jù)。③主機LCD作顯示,顯示報警位置。④從機LED作顯示,具有警點狀態(tài)檢測、報警編號顯示的功能。⑤通信距離達8-10米;⑥發(fā)揮:記錄報警時間、位置、聲光報警等。
項目任務(wù):同上。
內(nèi)容:①串行通信,串行通信總線的標(biāo)準(zhǔn);②51單片機串行口及串行通信及簡單通信協(xié)議;③單片機與單片機之間通信;④端口控制;⑤C51程序設(shè)計。
4 項目教學(xué)法在單片機技術(shù)的課程教學(xué)中的實施
項目教學(xué)法在實施過程中,按照有簡單到復(fù)雜的順序?qū)嵤└鱾€項目,每個項目的實施一般以行動導(dǎo)向教學(xué)原則為指導(dǎo)教學(xué)過程分采用資訊、計劃、決策、實施、檢測、評價六個階段按四個步驟實施。第一步資訊,教師提出項目要求與任務(wù)。在老師的引導(dǎo)下,學(xué)生明確要做什么?要學(xué)什么?老師通過案例、演示等對學(xué)生進行個別或集體的指導(dǎo),使學(xué)生基本具備完成項目的能力。第二步計劃與決策,學(xué)生在老師的主導(dǎo)下制訂完成項目的實施方案。第三步實施,學(xué)生按計劃與方案完成項目任務(wù)。學(xué)生通過實施發(fā)現(xiàn)問題、解決問題、習(xí)得知識,培養(yǎng)技能。老師進行個別的提示性的指導(dǎo)。第四步檢查與評價,老師、學(xué)生分別對學(xué)生項目完成的數(shù)量與質(zhì)量進行檢查,根據(jù)評價標(biāo)準(zhǔn)做出評價與評分。學(xué)生的自省,老師的點評,使學(xué)生的知識與技能得以完善與提高。實施中,教學(xué)過程與項目完成過程相統(tǒng)一,學(xué)生在做中學(xué)、老師在做中教,獲得知識與培養(yǎng)能力相統(tǒng)一。
5 結(jié)束語
通過多年的改革實踐,項目教學(xué)法符合教學(xué)做合一的教學(xué)模式,提高了教學(xué)效率和教學(xué)質(zhì)量,值得推廣。但應(yīng)用時要注意:項目的設(shè)計要恰當(dāng)、實用、漸進,教學(xué)實施要導(dǎo)向,老師指導(dǎo)要科學(xué),評價標(biāo)準(zhǔn)要合理、評分要公正。
課題來源:本文系長沙航空職業(yè)技術(shù)學(xué)院教改課題成果
參考文獻
[1]姜大源.當(dāng)代職業(yè)教育主流教學(xué)思想研究.北京:清華大學(xué)出版社,2007.4.
篇6
關(guān)鍵詞 MATLAB;單片機;波形發(fā)生器
中圖分類號TP36 文獻標(biāo)識碼A 文章編號 1674-6708(2013)96-0208-02
在工業(yè)制造與日常研究過程里,往往需要一些可以靈活產(chǎn)生、周期與峰值等參數(shù)能方便調(diào)節(jié)、功能擴展性強的信號,這樣的特定需求通常都難以實現(xiàn)。本次設(shè)計的系統(tǒng)利用MATLAB與C51語言制作的波形發(fā)生器,能很好地解決這些問題,而且費用不高、實用性強,實現(xiàn)了硬件電路軟件化的設(shè)計。
1系統(tǒng)硬件設(shè)計
2.3.2“握手”通信處理程序
2.3.3接收子程序設(shè)計
2.3.4傳送子程序設(shè)計
本系統(tǒng)發(fā)送數(shù)據(jù)是用串行模式1來進行的,由TXD端口一次送出10個位的數(shù)據(jù)。其中起始位和結(jié)束位分別位于一頭一尾,夾在中間的是8個數(shù)據(jù)位(校驗檢查可選)。 如果串口完成了初始化工作,CPU就能執(zhí)行1條寫入SBUF指令啟動發(fā)送器來實施數(shù)據(jù)的傳送。在傳輸過程中,當(dāng)10個串行位完成輸出,SCON的位1(TI)便會置為1,表明能夠繼續(xù)進行下一批數(shù)據(jù)的送出操作。在程序設(shè)計中當(dāng)監(jiān)控到TI=1,便將數(shù)據(jù)寫入SBUF寄存器,之后再將TI位清0。具體程序設(shè)計如下:
2.3.5波形輸出子程序設(shè)計
3軟件運行結(jié)果
本次設(shè)計的所用的matlab編程軟件只用來生成波形數(shù)據(jù),而波形的周期是使用單片機來控制的。在對單片機控制編程中c語言是一種強有力的程序設(shè)計語言,然而有些時候c語言程序還是無法完全控制程序的工作,遇到一些必須精確計算指令執(zhí)行工作時間的控制問題,則一定得用匯編語言來設(shè)計了。
參考文獻
[1]馬崇良.單片微型計算機原理及應(yīng)用[M]中國紡織出版社, 1996.
[2]張毅坤,陳善久.單片微型計算機原理及應(yīng)用[M].西安電子科技大學(xué)出版社, 1998,9.
篇7
【關(guān)鍵詞】MCGS組態(tài)軟件M51單片機
一、通訊系統(tǒng)軟件設(shè)計
1.前言。電話遠程智能控制系統(tǒng)實現(xiàn)當(dāng)用戶離開用電設(shè)備時,依然可以遠程通過電話手機遙控家里的用電設(shè)備。對被控對象進行實時監(jiān)控,對家電進行全方位實時管理。同時通過雙上位機人性化的監(jiān)控界面。上位機通過MCGS組態(tài)軟件編程對下位機進行監(jiān)控,在本設(shè)計中它與下位機的通信端口為COM1。
2.MCGS與單片機的通訊。MCGS是目前較常見的一種工業(yè)控制通用組態(tài)軟件,可以利用它十分方便地構(gòu)成了分布式系統(tǒng)的監(jiān)控畫面,動態(tài)顯示控制設(shè)備的運行狀態(tài)、實時、歷時曲線和報表、上下限報警等。他是一套基于Windows平臺的,為工業(yè)過程控制和實時監(jiān)控服務(wù)的32位全中文界面組態(tài)軟件系統(tǒng)。為了與現(xiàn)場設(shè)備進行交互,它提供了國內(nèi)外各種常用的工控設(shè)備的驅(qū)動程序,但基本上是與PLC,DSP等設(shè)備的數(shù)據(jù)交互通訊。如果用MCGS與單片機實現(xiàn)實時通訊,則需要利用MCGS驅(qū)動開發(fā)工具對某一具體的通訊協(xié)議進行單獨的開發(fā)。設(shè)計者只需要經(jīng)過簡單的參數(shù)設(shè)定,輸入,就可以編程出為自己項目所用的獨立的dll構(gòu)件。
MCGS用Active DLL構(gòu)件的方式來實現(xiàn)設(shè)備驅(qū)動程序,通過規(guī)范的OLE接口掛接到MCGS中,使其構(gòu)成一個整體,所以MCGS把設(shè)備驅(qū)動程序叫做設(shè)備驅(qū)動構(gòu)件。MCGS設(shè)備構(gòu)件的實現(xiàn)方法和原理與標(biāo)準(zhǔn)VB的ActiveDLL完全一致,但MCGS規(guī)定了一套接口規(guī)范,只有遵守這些接口規(guī)范的ActiveDLL才能用作MCGS的設(shè)備驅(qū)動構(gòu)件。它必須具有如下5個屬性和8個方法:
用戶根據(jù)自己的協(xié)議要求編寫成功dll構(gòu)件之后,在MCGS開發(fā)環(huán)境中打開串口父設(shè)備,添加做好的電話遠程控制的dll構(gòu)件。
二、硬件電路設(shè)計
本設(shè)計硬件部分主要是由兩部分組成。外線DTMF雙音頻碼譯碼電路和家用電器控制電路。其中主要部分是DTMF譯碼電路。該電路由MT8880作為DTMF譯碼芯片,由AT89C52接收MT8880的D0~D3引腳采集的16進制碼,將所得到的碼反映到相對應(yīng)的引腳上,從而控制不同的用電設(shè)備。
三、程序設(shè)計
篇8
關(guān)鍵詞 單片機;智能;車位鎖;藍牙
中圖分類號 G2 文獻標(biāo)識碼 A 文章編號 1674-6708(2017)183-0076-02
現(xiàn)代工作生活中,汽車已走進千家萬戶,它給我們帶來的除了出行的迅速與便捷之外,還帶來了停車難、亂停車、車位被占等一系列問題,停車位的優(yōu)化管理成為了一個普遍且亟待解決的社會問題。若設(shè)計一種基于單片機控制的藍牙車位鎖,實現(xiàn)對車位鎖的智能化控制,讓車主不用下車去手動開關(guān)車位鎖,直接在車內(nèi)通過手機藍牙軟件來操縱車位鎖的升降,這樣就大大提高了車位鎖的實用性和便捷性。
1 車位鎖系統(tǒng)設(shè)計方案
通過功能需求分析,需要設(shè)計單片機控制電路,超聲波測距模塊,步進電機驅(qū)動模塊,藍牙通信模塊等來完成以下功能:用戶通過手機控制車位鎖的升降、實時反饋車置信息給手機、提示用戶控制車位鎖升降等。對于手機與單片機間的通信模塊,選擇使用藍牙通信,相較于紅外遙控和WiFi,藍牙有著獨特的優(yōu)勢,它不像紅外遙控,必須要對準(zhǔn)其接受窗才能讓單片機接收到信號,也不像WiFi那樣需要有WiFi覆蓋點和高額的成本。使用藍牙通信,只需手機與單片機點對點連接上即可進行無死角通信,性價比最高。
2 硬件電路設(shè)計
2.1 單片機控制電路
本次設(shè)計選取51系列單片機,他是一個集成了CPU、存儲器、定時器/計數(shù)器和I/O口等部件的微型計算機。功耗低,性能強,有8K在系統(tǒng)可編程Flash存儲器,指令代碼可兼容傳統(tǒng)的8051。通過時鐘系統(tǒng)、復(fù)位系統(tǒng)以及電源系統(tǒng)組成單片機的最小系統(tǒng),再加上超聲波電路和步進電機驅(qū)動電路即可滿足該智能車位鎖的硬件電路設(shè)計。
2.2 超聲波感應(yīng)電路
車輛在位以及汽車和車位鎖的相對位置信息是通過超聲波感應(yīng)電路實現(xiàn),本設(shè)計選取常見的HC-SR04超聲波模塊,其有4個接口端,VCC接直流5V,GND接地,TRIG為觸發(fā)控制信號接單片機I/O口,ECHO為回響信號也接到單片機的任一I/ O口即可。
其基本工作原理:1)采用I/O的TRIG觸發(fā)測距,要給上至少10us的高電平信號。2)自動發(fā)送有8個40kHz的方波,感應(yīng)電路自動檢測是否有信號返回信號。3)有信號返回時,通過單片機的I/O口ECHO輸出一個高電平,該高電平的持續(xù)時間即為超聲波從發(fā)出信號到收回信號的總時間,故其測試距離=(ECHO高電平持續(xù)時間*聲速)/2,持續(xù)時間的記錄由定時器TO來完成。
2.3 步進電機驅(qū)動電路
步進電機使用ULN2003A驅(qū)動芯片,它是一個7路的反向器電路,價格低廉,負(fù)載能力強且電流增益高,其輸出端允許通過的IC電流為200mA,飽和壓降1V。使用的步進電機28BYJ-48是一種四相八拍電機,他能夠?qū)㈦娒}沖信號轉(zhuǎn)換成角位移量,其工作電壓為12V,用ULN2003A驅(qū)動能充分發(fā)揮步進電機的功能。
將驅(qū)動芯片的4個IN分別接到單片機的4個I/O口,作為輸入,步進電機5根導(dǎo)線接到ULN2003A的輸出端(紅線為+)。單片機通過I/O口每給到一個脈沖信號,通過驅(qū)動,步進電C就會按照設(shè)定好的方向轉(zhuǎn)動一個固定的角度,在程序中用for循環(huán)語句可讓其持續(xù)轉(zhuǎn)動。通過單片機控制電機的正/反轉(zhuǎn),即可模擬車位鎖機械部分的升/降。
2.4 藍牙信息傳輸模塊
要實現(xiàn)手機與車位鎖單片機的通信,藍牙模塊是不可或缺的部分。本設(shè)計選用HC-06作為藍牙模塊,它主要采用CSR的主流藍牙芯片和藍牙V2.0的標(biāo)準(zhǔn)協(xié)議。有四個重要引腳,分別是電源、地、發(fā)送和接收端。給藍牙上電后,可通過USBTTL模塊對其進行AT模式設(shè)置(慢閃),根據(jù)用戶需要,可對其藍牙名稱、配對密碼、傳輸波特率等進行個性化設(shè)置。
HC-06需與單片機相連,RXD與TXD交叉相連,藍牙模塊就相當(dāng)于一根無形的串口線,波特率默認(rèn)為9600,單片機串口程序初始化中波特率要設(shè)為一致。
用戶通過手機藍牙App,輸入設(shè)置好的密碼,將單片機的藍牙與手機進行配對連接,藍牙接收到手機端通過App發(fā)送的指令后,將信號通過串口傳輸給單片機主控芯片并讓單片機做出相應(yīng)的處理,手機與單片機間的通信便得到實現(xiàn)。
3 軟件程序設(shè)計
3.1 單片機程序設(shè)計
本次設(shè)計的單片機程序是使用Keil的環(huán)境用C51編寫,首先在main()主函數(shù)中初始化各變量、定時器和串口等,然后進入while(1)循環(huán),PC按順序流經(jīng)車位信息提示函數(shù)、車位鎖電機處理函數(shù)、查詢車位信息函數(shù),三個函數(shù)包含了所有模塊的程序,在while(1)中往復(fù)循環(huán),并伴隨著串口中斷和定時器中斷。通過串口中斷接收手機App的指令,以此完成對車位鎖的相應(yīng)控制。
3.2 手機藍牙App程序設(shè)計
使用Eclipse集成開發(fā)環(huán)境可進行安卓程序開發(fā),一個程序工程包含布局文件和Activity控制文件。布局文件用于構(gòu)建頁面布局,Activity控制文件為整個程序的入口,后臺邏輯程序從這里開始執(zhí)行。對于安卓藍牙軟件的設(shè)計,兩句代碼和用于添加手機通過軟件連接到藍牙的權(quán)限。以此為基礎(chǔ)在Activity文件中編寫代碼,設(shè)計出藍牙軟件,亦可通過互聯(lián)網(wǎng)直接下載。
4 系統(tǒng)設(shè)計的實現(xiàn)
本設(shè)計是按照上述硬件電路、軟件程序要求模擬出的智能車位鎖系統(tǒng),基本能實現(xiàn)用戶對車位鎖的智能控制,其中單片機最小系統(tǒng)使用51單片機開發(fā)板上的電路(含電機驅(qū)動芯片),再通過杜邦線分別連接上步進電機、藍牙模塊(已設(shè)置)和超聲波模塊,給單片機上電后,使用安卓手機打開“藍牙串口助手”軟件,輸入配對密碼,連接到車位鎖單片機藍牙,通過此軟件,任意發(fā)送單片機程序設(shè)定好的指令,可實現(xiàn)控制車位鎖(步進電機等機械裝置)的升/降、查看車體與車位鎖相對距離、反饋車體入位/出位情況等功能。
參考文獻
[1]盛華,梅斌.單片機原理與應(yīng)用[M].武漢:華中科技大學(xué)出版社,2014.
篇9
摘要:現(xiàn)在單片機的程序設(shè)計,C51已經(jīng)得到廣泛的推廣和應(yīng)用,算是單片機的主流設(shè)計程序,甚至可以說作為單片機開發(fā)人員必須要掌握的一門語言了。本文簡要介紹了Franklin C51交叉編譯器的特點,較詳細(xì)地討論了C51語言程序設(shè)計的基本技巧及其與匯編語言程序的混合編程、中斷處理過程等實際問題。
關(guān)鍵詞:C51;C語言;編程
在研制單片機應(yīng)用系統(tǒng)時,匯編語言是一種常用的軟件工具。它能直接操作硬件,指令的執(zhí)行速度快。但其指令系統(tǒng)的固有格式受硬件結(jié)構(gòu)的限制很大,且難于編寫與調(diào)試,可移植性也差。隨著單片機硬件性能的提高,其工作速度越來越快,因此在編寫單片機應(yīng)用系統(tǒng)程序時,更著重于程序本身的編寫效率。而Franklin C51交叉編譯器是專為80C51系列單片機設(shè)計的一種高效的C語言編譯器,使用它可以縮短開發(fā)周期,降低開發(fā)成本,因此目前它已成為開發(fā)80C51系列單片機的流行工具。
一、C51的編程規(guī)范
(一)注釋
1.開始的注釋:
文件(模塊)注釋內(nèi)容:
公司名稱、版權(quán)、作者名稱、修改時間、模塊功能、背景介紹等,復(fù)雜的算法需要加上流程說明;
函數(shù)開頭的注釋內(nèi)容:
函數(shù)名稱、功能、說明 輸入、返回、函數(shù)描述、流程處理、全局變量、調(diào)用樣例等,復(fù)雜的函數(shù)需要加上變量用途說明 ;
2.程序中的注釋內(nèi)容:
修改時間和作者、方便理解的注釋等。注釋內(nèi)容應(yīng)簡煉、清楚、明了,一目了然的語句不加注釋。
(二)命名:
命名必須具有一定的實際意義。
1.常量的命名:全部用大寫。
2.變量的命名:
3.結(jié)構(gòu)體命名:
4.函數(shù)的命名:
函數(shù)名首字大寫,若包含有兩個單詞的每個單詞首字母大寫。
函數(shù)原型說明包括:引用外來函數(shù)及內(nèi)部函數(shù),外部引用必須在右側(cè)注明函數(shù)來源: 模塊名及文件名, 內(nèi)部函數(shù),只要注釋其定義文件名 ;
1.縮進:縮進以Tab為單位,一個Tab為四個空格大小。預(yù)處理語句、全局?jǐn)?shù)據(jù)、函數(shù)原型、標(biāo)題、附加說明、函數(shù)說明、標(biāo)號等均頂格書寫。語句塊的“{”“}”配對對齊,并與其前一行對齊;
2.空格:數(shù)據(jù)和函數(shù)在其類型,修飾名稱之間適當(dāng)空格并據(jù)情況對齊。關(guān)鍵字原則上空一格,如:
if ( ... ) 等,運算符的空格規(guī)定如下:“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正負(fù)號),“&”(取址或引用)、“*”(指使用指針時)等幾個運算符兩邊不空格(其中單目運算符系指與操作數(shù)相連的一邊),其它運算符(包括大多數(shù)二目運算符和三目運算符“?:”兩邊均空一格,“(”、“)”運算符在其內(nèi)側(cè)空一格,在作函數(shù)定義時還可據(jù)情況多空或不空格來對齊,但在函數(shù)實現(xiàn)時可以不用。
3.空行:程序文件結(jié)構(gòu)各部分之間空兩行,若不必要也可只空一行,各函數(shù)實現(xiàn)之間一般空兩行
4.修改:版本封存以后的修改一定要將老語句用/* */ 封閉,不能自行刪除或修改,并要在文件及函數(shù)的修改記錄中加以記錄。
二、C51語言程序設(shè)計的基本技巧
C語言是一種高級程序設(shè)計語言,它提供了十分完備的規(guī)范化流程控制結(jié)構(gòu)。因此采用C51語言設(shè)計單片機應(yīng)用系統(tǒng)程序時,首先要盡可能地采用結(jié)構(gòu)化的程序設(shè)計方法,這樣可使整個應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護。對于不同的功能模塊,分別指定相應(yīng)的入口參數(shù)和出口參數(shù),而經(jīng)常使用的一些程序最好編成函數(shù),這樣既不會引起整個程序管理的混亂,還可增強可讀性,移植性也好。
在程序設(shè)計過程中,要充分利用C51語言的預(yù)處理命令。對于一些常用的常數(shù),如TRUE,F(xiàn)ALSE,PI以及各種特殊功能寄存器,或程序中一些重要的依據(jù)外界條件可變的常量,可采用宏定義"#define"或集中起來放在一個頭文件中進行定義,再采用文件包含命令"#include"將其加入到程序中去。這樣當(dāng)需要修改某個參量時,只須修改相應(yīng)的包含文件或宏定義,而不必對使用它們的每個程序文件都作修改,從而有利于文件的維護和更新。
三、C51語言與匯編語言程序的混合編程
C51編譯器能對C語言源程序進行高效率的編譯,生成高效簡潔的代碼,在絕大多數(shù)場合采用C語言編程即可完成預(yù)期的目的。但有時為了編程直觀或某些特殊地址的處理,還須采用一定的匯編語言編程。它們必須有完整的約定,否則數(shù)據(jù)的交換就可能出錯。下面就以力源公司的10位串行A/D轉(zhuǎn)換器TLC1549 為例說明C語言程序與匯編語言程序的調(diào)用。
四、C51中斷處理過程
C51編譯器支持在C源程序中直接開發(fā)中斷過程,因此減輕了使用匯編語言的繁瑣工作,提高了開發(fā)效率。中斷服務(wù)函數(shù)的完整語法如下:
void函數(shù)名(void)[模式]
[再入]interrupt n [using r]
其中n(0~31)代表中斷號。C51編譯器允許32個中斷,具體使用哪個中斷由80C51系列的芯片決定。r(0~3)代表第r組寄存器。在調(diào)用中斷函數(shù)時,要求中斷過程調(diào)用的函數(shù)所使用的寄存器組必須與其相同。"再入"用于說明中斷處理函數(shù)有無"再入"能力。C51編譯器及其對C語言的擴充允許編程者對中斷所有方面的控制和寄存器組的使用。這種支持能使編程者創(chuàng)建高效的中斷服務(wù)程序,用戶只須在C語言下關(guān)心中斷和必要的寄存器組切換操作。
四、結(jié)語
C51編譯器不但可以縮短單片機控制系統(tǒng)的開發(fā)周期,而且易于調(diào)試和維護。此外,C51語言還有許多強大的功能,如提供豐富的庫函數(shù)供用戶直接調(diào)用,完整的編譯控制指令為程序調(diào)試提供必要的符號信息等等??傊珻51語言是廣大單片機開發(fā)人員的強有力的工具。
參考文獻:
[1]周立功.單片機實驗與實踐教程(三)[M].北京:北京航天航空大學(xué)出版社.2006
[2]柴鈺.單片機原理及應(yīng)用[M].北京:西安電子科技大學(xué)出版社.2009
篇10
關(guān)鍵詞:AT89C51;三線方式;串行接口;I2C
中圖分類號:TP36 文獻標(biāo)識碼:B
文章編號:1004373X(2008)0310902
Three―line Structure Design for Single Chip Series Periphery Interface Circuit
CAO Junxia1,YUAN Tonglu2
(1.Shaanxi Energy Professional and Technological Institute,Xianyang,712000,China;
2.College of Computer Science,Xi′an Shiyou University,Xi′an,710065,China)
Abstract:The paper introduces characteristics of SPI and I2C general bus protocol and its realization in MCS―51,researches scheme of single chip system,discusses its feasibility.The concrete way of realization is using Protel―99 SE to draw the schematic diagram,build the electric circuit in the experimental board with the assembly language compilation driver.To the process debugging,has realized minimum of that the system successfully.
Keywords:AT89C51;three―line control method;serial interface; I2C
SPI總線接口芯片為完成單片機的常規(guī)電路擴展設(shè)計帶來了機遇,可擴展的電路包括A/D與D/A轉(zhuǎn)換器、顯示、時鐘、存儲器、監(jiān)視復(fù)位、I/O、顯示等。本文利用國內(nèi)目前較為流行的I2C,SPI串行通信協(xié)議實現(xiàn)單片機電路的A/D轉(zhuǎn)換、 D/A轉(zhuǎn)換、時鐘、I/O擴展、E2PROM以及LED驅(qū)動器件的擴展功能,實現(xiàn)了單片機系統(tǒng)功能模塊化,電路集成化的目的。
1 SPI集成接口芯片功能及應(yīng)用
1.1 A/D轉(zhuǎn)換器
單片機應(yīng)用系統(tǒng)中典型的應(yīng)用模式是通過傳感器采集現(xiàn)場的微弱信號參數(shù),經(jīng)過濾波放大處理后再通過A/D模數(shù)轉(zhuǎn)換送至單片機系統(tǒng)實現(xiàn)各種工業(yè)調(diào)節(jié)和控制,在此過程中A/D轉(zhuǎn)換電路的設(shè)計尤其重要。早期的A/D轉(zhuǎn)換器與CPU接口一般采用并行總線方式,新型A/D轉(zhuǎn)換器采用I2C,SPI總線方式可節(jié)省CPU的I/O資源,使產(chǎn)品小型化。本文中選用的A/D轉(zhuǎn)換器為SPI串行總線接口的10位模數(shù)轉(zhuǎn)換器TLC1549。
1.2 D/A轉(zhuǎn)換器
D/A轉(zhuǎn)換器的種類繁多,從接口形式而言,有串口和并口之分。目前新型的D/A轉(zhuǎn)換器大都采用了串行總線協(xié)議。D/A芯片的輸出形式有電流型和電壓型兩種,由于電流輸出形式在實際電路中必須將輸出轉(zhuǎn)換成電壓輸出。為了簡化電路和提高可靠性,本文選用電壓型的SPI串行總線接口TLC5615 D/A轉(zhuǎn)換器。
1.3 驅(qū)動顯示器接口芯片
目前廣泛使用的顯示器件主要有LED(二極管顯示管)、LCD(液晶顯示器)和VFD(真空熒光管)等。LCD和VFD顯示器顯示成本較高,而LED顯示器造價低廉,與單片機接口方便靈活,技術(shù)上易于實現(xiàn),通常用于顯示阿拉伯?dāng)?shù)字和少數(shù)字符。本文選用LED作為顯示器件。串行總線方式的LED顯示器接口芯片與并行方式相比,僅占有CPU的少數(shù)幾根I/O口線便可實現(xiàn)LED功能,因此本設(shè)計中采用了SPI串行接口顯示驅(qū)動芯片MAX7219。
1.4 看門狗芯片X5045
單片機應(yīng)用系統(tǒng)(或產(chǎn)品)在運行中會受到各種各樣的干擾,導(dǎo)致系統(tǒng)內(nèi)部數(shù)據(jù)出錯或嚴(yán)重影響程序的運行。因此,單片機應(yīng)用系統(tǒng)的開發(fā)要考慮系統(tǒng)的可靠性設(shè)計?!翱撮T狗”是系統(tǒng)可靠性設(shè)計中的重要一環(huán)。所謂“看門狗”是指在單片機程序設(shè)計中采用的一種程序監(jiān)視技術(shù),當(dāng)單片機受到干擾失控導(dǎo)致程序跑飛或陷入死循環(huán)時,通過采取一定的軟硬件措施使程序脫離死循環(huán)或重新運行。本文中選用多功能芯片X5045。
1.5 I/O擴展芯片PCF8574
目前,在單片機應(yīng)用系統(tǒng)的串行擴展接口器件中,除了上述SPI總線以外,還有I2C總線。I2C總線提供了較完善的總線協(xié)議和最簡單的串行連接方式,并提供了總線操作的狀態(tài)處理軟件包。本文在設(shè)計中加入常用的I2C總線的I/O擴展片PCF8574,用他來增加單片機的I/O口,提高單片機的外掛器件的能力。PCF8574具有低的電流損耗并有輸出鎖存功能,能輸出大電流,可直接驅(qū)動LED發(fā)光管。
2 硬件設(shè)計
本次設(shè)計所有的接口芯片均采用串行方式,串行方式通信有單線、兩線、三線等多種方式,其中以兩線、三線最為流行。在本次設(shè)計中,主要采用三線方式,即SPI(Serial Peripheral Interface,串行接口)。設(shè)計中所用的接口器件包括A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、實時時鐘、存儲器、看門狗、I/O、LED顯示器。在本次設(shè)計中采用的是51系列的單片機作為主CPU,而他不具有SPI接口系統(tǒng),故不可直接與各個廠家生產(chǎn)的多種標(biāo)準(zhǔn)的SPI器件直接接口。為了解決這一難題,在本設(shè)計中使用軟件來模擬SPI系統(tǒng)中的4條線:串行時鐘總線SCK、主機輸入/從機輸出數(shù)據(jù)線MOSO、主機輸出/從機輸入數(shù)據(jù)線MOSI和低電平有效的從機選擇線/CS。用P2.1模擬CPU的數(shù)據(jù)輸出端(MOSI),P2.0模擬CPU的數(shù)據(jù)輸入端(MOSO),P2.2 模擬CPU的SCK輸出端。接口芯片公用這三條控制線,但在這種方式下,每次只能驅(qū)動執(zhí)行一片芯片。鑒于SPI與I2C總線電路設(shè)計、時序和程序設(shè)計的不同,又在本次設(shè)計中加入了一片I2C總線接口的I/O擴展芯片,用P1.0來模擬SDA,用P1.1來模擬SCL,以便了解兩者的截然不同之處。硬件框圖如圖1所示。
圖1 硬件框圖
3 軟件設(shè)計
用PCF8574來擴展I/O端口,低四位為燈,高四位為
小開關(guān),通過中斷的方法讀入I/O的狀態(tài)。經(jīng)過取高四位,打到低四位,以點亮或熄滅相應(yīng)的指示燈。整個系統(tǒng)在工作中,只要按下任意一個鍵都將使PCF8574產(chǎn)生中斷申請信號,使CPU響應(yīng)中斷,執(zhí)行中斷服務(wù)程序。在中斷服務(wù)程序中,CPU根據(jù)按鍵的狀態(tài)控制程序轉(zhuǎn)移。按下鍵1,調(diào)用A/D轉(zhuǎn)換子程序;按下鍵2,調(diào)用顯示子程序;按下鍵3,調(diào)用D/A轉(zhuǎn)換子程序,用示波器觀察其輸出波形;按下鍵4,調(diào)用看門狗芯片X5045的工作子程序,進行單字節(jié)的寫、讀。軟件總體流程框圖見圖2。
圖2 軟件總體流程圖
4 結(jié) 語
目前,單片機應(yīng)用系統(tǒng)的擴展已從并行方式為主過渡到以串行方式為主的時代。許多新型器件都帶有UART的移位寄存器方式,MOTOROLA公司的SPI、NS公司的Microwire、Dallas公司的1―wire和Philips公司的I2C總線等,他們都提供了較完善的總線協(xié)議,連接方式簡單,在擴展器件設(shè)計中得到廣泛的應(yīng)用。本文通過在設(shè)計中使用MCS―51的I/O口來模擬總線接口,實現(xiàn)了單片機與串行總線接口器件的數(shù)據(jù)傳輸,該方案已通過調(diào)試,整個單片機系統(tǒng)運行良好。試驗表明MCS―51的I/O口來模擬總線接口的方法在設(shè)計中可行有效。
參考文獻
[1]何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1995.
[2]馬忠梅,籍順心,張凱,等.單片機的C語言應(yīng)用程序設(shè)計[M].北京:北京航空航天大學(xué)出版社,1996.
[3]何立民.單片機應(yīng)用技術(shù)選編[M].北京:北京航空航天大學(xué)出版社,2000.
[4]譚浩強.C語言程序設(shè)計教程[M].北京:高等教育出版社,2000.
[5]祝貞鳳,張躍武.TMS320F206電路典型設(shè)計[J].現(xiàn)代電子技術(shù),2007,30(11):44―45,48.
熱門標(biāo)簽
單片機溫度控制系統(tǒng) 單片機 單片機應(yīng)用 單片機系統(tǒng) 單片 單片開關(guān)電源 單片開關(guān) 心理培訓(xùn) 人文科學(xué)概論