版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單片機(jī)C語言教程全集
第一課建立你的第個KeilC51項(xiàng)目
隨著單片機(jī)技術(shù)的不斷發(fā)展,以單片機(jī)C語言為主流的高級語言也不斷被更多的單
片機(jī)愛好者和工程師所喜愛。使用C51肯定要使用到編譯器,以便把寫好的C程序編譯
為機(jī)器碼,這樣單片機(jī)才能執(zhí)行編寫好的程序。KEILUVISI0N2是眾多單片機(jī)應(yīng)用開發(fā)
軟件中優(yōu)秀的軟件之,它支持眾多不一樣公司的MCS51架構(gòu)的芯片,它集編輯,編譯,
仿真等于一體,同時還支持,PLM,匯編和C語言的程序設(shè)計(jì),它的界面和常用的微軟VC++
的界面相似,界面友好,易學(xué)易用,在調(diào)試程序,軟件仿真方面也有很強(qiáng)大的功能。本
站提供的單片機(jī)c語言教程都是基于keilc51的。
下面結(jié)合8051介紹單片機(jī)C語言的優(yōu)越性:
?無須懂得單片機(jī)的具體硬件,也能夠編出符合硬件實(shí)際的專業(yè)水平的程序;
?不懂得單片機(jī)的指令集,也能夠編寫完美的單片機(jī)程序;
?不同函數(shù)的數(shù)據(jù)實(shí)行覆蓋,有效利用片上有限的RAM空間;
?提供auto、static、const等存儲類型和專門針對8051單片機(jī)的data、idata、
pdata、xdata、code等存儲類型,自動為變量合理地分配地址;
?C語言提供復(fù)雜的數(shù)據(jù)類型(數(shù)組、結(jié)構(gòu)、聯(lián)合、枚舉、指針等),極大地增強(qiáng)了程
序處理能力和靈活性;
?提供small、compact、large等編譯模式,以適應(yīng)片上存儲器的大小;
?中斷服務(wù)程序的現(xiàn)場保護(hù)和恢復(fù),中斷向量表的填寫,是直接與單片機(jī)相關(guān)的,
都由C編譯器代辦;
?程序具有堅(jiān)固性:數(shù)據(jù)被破壞是導(dǎo)致程序運(yùn)行異常的重要因素。C語言對數(shù)據(jù)進(jìn)行
了許多專業(yè)性的處理,避免了運(yùn)行中間非異步的破壞
?提供常用的標(biāo)準(zhǔn)函數(shù)庫,以供用戶直接使用;
?有嚴(yán)格的句法檢查,錯誤很少,可容易地在高級語言的水平上迅速地被排掉;
?可方便地接受多種實(shí)用程序的服務(wù):如片上資源的初始化有專門的實(shí)用程序自動
生成;再如,有實(shí)時多任務(wù)操作系統(tǒng)可調(diào)度多道任務(wù),簡化用戶編程,提高運(yùn)行的安全性
等等。
?頭文件中定義宏、說明復(fù)雜數(shù)據(jù)類型和函數(shù)原型,有利于程序的移植和支持單片
機(jī)的系列化產(chǎn)品的開發(fā);
以上簡單介紹了KEILC51軟件,要使用KEILC51軟件,必需先要安裝它,這也是學(xué)
習(xí)單片機(jī)編程語言所要求的第一步一一建立學(xué)習(xí)環(huán)境。
本站提供無限制版的keilc51下載(此處)(安裝的方法在壓縮包內(nèi)有詳細(xì)說明,這
里就不做介紹了)
安裝好后,您是不是想建立自己的第一個單片機(jī)C語言程序項(xiàng)目呢?下面就讓我們一
起來建立一個小程序吧,請根據(jù)教程一步步的來,你絕對可以在短時間內(nèi)熟悉c51的。
本教程所涉及c51源代碼請點(diǎn)此下載
首先當(dāng)然是運(yùn)行KEIL軟件,接著按下面的步驟建立您的第個項(xiàng)目:
(1)點(diǎn)擊Project菜單,選擇彈出的下拉式菜單中的NewProject,如圖1-2。接
著彈出?個標(biāo)準(zhǔn)Windows文件對話窗口,如圖1-3。在“文件名”中輸入您的第一個C
程序項(xiàng)目名稱,這里我們用“test”?!氨4妗焙蟮奈募U(kuò)展名為uv2,這是KEIL
uVision2項(xiàng)目文件擴(kuò)展名,以后能直接點(diǎn)擊此文件以打開先前做的項(xiàng)目。
夜pVision2
ProjectDebugPeripheralsToolsSVCSJ
NewProject..,
ImportpVisionlProject...
OpenProject
CloseProject
FileExtensionsjBooksandEnvironment
Targets;Groups,Files,,,
SelectDeviceforTarget,..
圖1-2NewProject菜單
圖1-3文件窗口
(2)選擇所要的單片機(jī),這里選擇常用的Ateml公司的AT89c51。而且本單片機(jī)c
語言教程里的大部分程序都是基于此芯片的,此時屏幕如圖14所示。AT89C51有什么
功能、特點(diǎn)呢?看圖中右邊有簡單的介紹。完成上面步驟后,就可以進(jìn)行程序的編寫了。
(3)首先在項(xiàng)目中創(chuàng)建新的程序文件或加入I口程序文件。如果您沒有現(xiàn)成的程序,那
么就要新建一個程序文件。在KEIL中有一些程序的Demo,在這里我們還是以一個C程
序?yàn)槔榻B如何新建?個C程序和如何加到您的第一個項(xiàng)目中吧。點(diǎn)擊圖1-5中1
的新建文件的快捷按鈕,在2中出現(xiàn)一個新的文字編輯窗口,這個操作也能通過菜單
File-New或快捷鍵Ctrl+N來實(shí)現(xiàn)。好了,現(xiàn)在能編寫程序了。卜面是經(jīng)典的一段程
序,呵,如果您看過別的程序書也許也有類似的程序:
iiinclude
#include
voidmain(void)
SCON=0x50;〃串行口方式1,允許接收
TMOD=0x20;〃定時器1定時方式2
TCON=0x40;〃設(shè)定時器1開始計(jì)數(shù)
TH1=0xE8;//11.0592MHz1200波特率
TL1=0xE8;TI=1;
TRI=1;〃啟動定時器
whiled)
(
)
)
printf("HelloWorld!\n,z);〃顯示HelloWorld
SelectDeviceforTarget'Target1,2JxJ
CPU
Vendor
Dtvic?AT89csi「UseExtendedLink"(LX51)inst??dofBL51
FMily:BCS-51r〔k,ExtendedAxEbler(AX51)ofA51
口3?Description:
ATS9C40518051b0”dFullStaticCMOScontrollerwithThrt?'Level
32I/Olines,2Tia?rx/Cotmt?rs6Interruptssources
AT89C51/
4KFlashMeory,128BytesOn-chipRAM
J
1
1
1
1
確定I股清
圖1-4選取芯片
成test-fl|ision2
圖1-5新建程序文件
這段程序的功能是不斷從串行口輸出“Hell。World!”字符,先不管程序的語法和
意思吧,先看看如何把它加入到項(xiàng)目中和如何編譯試運(yùn)行。
(4)點(diǎn)擊圖1-5中的3保存新建的程序,也能用菜單File-Save或快捷鍵Ctrl+S
進(jìn)行保存。因是新文件所以保存時會彈出類似圖卜3的文件操作窗口,把第一個程
序命名
為testl.c,保存在項(xiàng)目所在的目錄中,這個時候您會發(fā)現(xiàn)程序單詞有了不一樣的
顏色,說明KEIL的C語言語法檢查生效了。如圖『6鼠標(biāo)在屏幕左邊的SourceGroup1
文件夾圖標(biāo)上右擊彈出菜單,在這里能做在項(xiàng)目中增加減少文件等操作。選“AddFile
toGroup"SourceGroup1'"彈出文件窗口,選擇剛剛保存的文件,按ADD按鈕,
關(guān)閉文件窗,程序文件已加到項(xiàng)目中了。這個時候在SourceGroup1文件夾圖標(biāo)左邊出
現(xiàn)了?個小+號說明,文件組中有了文件,點(diǎn)擊它能展開查看。
PBjtest-MisionZ
FileEditViewProjectDebugPeripheralsToolsSVCSWindowHelp
倒百。013電嚕|qa|率率4%,%叁聃『
g闔幽鬲米|Target1三|
d*J白D:\MyData\其它、我的文章\C51正
臼行Target1
tfinclude<AT89X51.H>
;“…國^Sourci
SelectDeviceforTarget'Target1'
OptionsforGroup'SourceGroup1'
OpenFile
lOjRebuildtarget
(XiBuildtargetF7
TranslateFile
后Stopbuild
AddFilestoGroup'SourceGroup1'
Targets^Groups,Files...
RemoveGroup'SourceGroup1'andit'sFiles
o
圖1-6把文件加入到項(xiàng)目文件組中
(5)C程序文件已被加到了項(xiàng)目中了,下面就剩下編譯運(yùn)行了。這個項(xiàng)目只是用做學(xué)
習(xí)新建程序項(xiàng)目和編譯運(yùn)行仿真的基本方法,所以使用軟件默認(rèn)的編譯設(shè)置,它不會生
成用于芯片燒寫的HEX文件。先來看圖『7吧,圖中1、2、3都是編譯按鈕,不一
樣是1是用于編譯單個文件。2是編譯鏈接當(dāng)前項(xiàng)£1,如果先前編譯過一次之后文件
沒有做動編輯改動,這個時候再點(diǎn)擊是不會再次重新編譯的。3是重新編譯,每點(diǎn)擊」
次均會再次編譯鏈接一次,不管程序是否有改動。在3右邊的是停止編譯按鈕,只有
點(diǎn)擊了前三個中的任一個,停止按鈕才會生效。5是菜單中的它們。在4中能看到編
譯的錯誤信息和使用的系統(tǒng)資源情況等,以后我們要查錯就靠它了。6是有一個小放大
鏡的按鈕,這就是開啟'關(guān)閉調(diào)試模式的按鈕,它也存在于菜單Debug-Start\StopDebug
Session,快捷鍵為Ctrl+F5o
P1Vtest-Wision2
FileEditView:ProjectDebugPeripheral
窗蘇凰。NewProject...
ImportpVisionlProject
奧昌@6OpenProject
卷置管昌CloseProject
0二左FileExtensions3Books.
Targets^Groups^Files.
SelectDeviceForTarge
RemoveItem
OptionsforTarget'Tar
ClearGroupandFileO[
xJlBuildtare(XiBuildtarget,)
compilingiOlRebuildalltargetfiles
linking..
ProgramS:彥TranslateD:\MyData\J
"test"-(
通Stopbuild
圖1-7編譯程序
(6)進(jìn)入調(diào)試模式,軟件窗口樣式大致如圖―8所示。圖中1為運(yùn)行,當(dāng)程序處于
停止?fàn)顟B(tài)時才有效,2為停止,程序處于運(yùn)行狀態(tài)時才有效。3是復(fù)位,模擬芯片的復(fù)
位,程序回到最開頭處執(zhí)行。按4能打開5中的串行調(diào)試窗口,這個窗口能看到從51
芯片的串行口輸入輸出的字符,這里的第一個項(xiàng)目也正是在這里看運(yùn)行結(jié)果。這些在菜
單中也有。首先按4打開串行調(diào)試窗口,再按運(yùn)行鍵,這個時候就能看到串行調(diào)試窗
口中不斷的打印“Hell。World!?.最后要停止程序運(yùn)行回到文件編輯模式中,就要先
按停止按鈕再按開啟,關(guān)閉調(diào)試模式按鈕。然后就能進(jìn)行關(guān)閉KEIL等相關(guān)操作
FileEditViewProjectDebugPeripheralsToolsSVCSWindowHelp
窗百。0)|%船亳|二總
率率々%%吻聃圉
?|昌|@|底國他命眄E3
?}中陰%}o四
4
自D:\MyD._|口1xwSerial#1
tfinclude<AT89X51.H—HelloWorld!
#include<stdio.h>—HelloWorld!-
HelloWorld!.)
voidmain(void)HelloWorld!
HelloWorld!
6SCON=0x50;//串」HelloWorld!
TMnn=nv?n-//市ii1XI
[j|Files(51...5[=]testl.c國Serial#1
XjLoad"DAXM^wX1
,djj勺
II
圖1-8調(diào)試運(yùn)行程序
色cn
sylar源于heros
lize314于2010-05-06給此貼評了10分
看推薦視頻,得100元卓越禮品券
q回復(fù)二回復(fù)本帖少回到頂端
單片機(jī)c語言教程第二課C51HEX文件的生成和單片機(jī)最小系統(tǒng)發(fā)表于[2
2009-07-3015:03:51樓]
?sylar
上一篇建立了第一個單片機(jī)c語言項(xiàng)目,但為了讓編譯好的程序能通
過編程器寫入51芯片中,要先用編譯器生成HEX文件,卜面來看看如何
用KEILUVISI0N2來編譯生成用于燒寫芯片的HEX文件。HEX文件格式是
我是加高Intel公司提出的按地址排列的數(shù)據(jù)信息,數(shù)據(jù)寬度為字節(jié),所有數(shù)據(jù)使用
級會員16進(jìn)制數(shù)字表示,常用來保存單片機(jī)或其他處理器的目標(biāo)程序代碼。它保
存物理程序存儲區(qū)中的目標(biāo)代碼映象。一般的編程器都支持這種格式。我
用戶等級:
們先來打開第一個項(xiàng)目,打開它的所在目錄,找到test.Uv2的文件就能
院士打開先前的項(xiàng)目了。然后右擊圖2-1中的1項(xiàng)目文件夾,彈出項(xiàng)目功能菜
加為好友單,選OptionsforTarget*Targetl',彈出項(xiàng)目選項(xiàng)設(shè)置窗口,同樣
發(fā)短消息先選中項(xiàng)目文件夾圖標(biāo),這個時候在Project菜單中也有一樣的菜單可選。
打開項(xiàng)目選項(xiàng)窗口,轉(zhuǎn)到Output選項(xiàng)頁圖2-2所示,圖中1是選擇編譯
所有發(fā)言
輸出的路徑,2是設(shè)置編譯輸出生成的文件名,3則是決定是否要創(chuàng)建HEX
個人檔案文件,選中它就能輸出HEX文件到指定的路徑中。選好了?好,我們再將
它重新編譯一次,很快在編譯信息窗口中就顯示HEX文件創(chuàng)建到指定的路
最后登陸時
徑中了,如圖2-3。這樣我們就可用自己的編程器所附帶的軟件去讀取并
間:燒到芯片了,再用實(shí)驗(yàn)板看結(jié)果,至于編程器或仿真器品種繁多具體方法
2010-06-04就看它的說明書了,這里也不做討論。
08:20:15(技巧:一、在圖2T中的1里的項(xiàng)目文件樹形目錄中,先選中對象,
狀態(tài):離線再單擊它就可對它進(jìn)行重命名操作,雙擊文件圖標(biāo)便可打開文件。二、在
Project下拉菜單的最下方有最近編輯過
的項(xiàng)目路徑保存,這里能快速打開最近在編輯的項(xiàng)目。)
圖2-1項(xiàng)目功能菜單
圖2-2項(xiàng)目選項(xiàng)窗口
[=)Files于…UjB
*1Buildtarget'Target1'
Jcompilingtest1.c...
linking...
ProgramSize:data=30.1xdata=0code=110。
creotinqhexfilefrom"test",??
"test"-0Error(s)r0Warning(s).
―[\Build人Command入FindinFiles/
圖2-3編譯信息窗口
或許您已把編譯好的文件燒到了芯片上,如果您購買或自制了帶串行
口輸出元件的學(xué)習(xí)實(shí)驗(yàn)板,那您就能把串行口和PC機(jī)串行口相聯(lián)用串行
口調(diào)試軟件或Windows的超級終端,將其波特率設(shè)為1200,就能看到不
停輸出的“Hell。World!”字樣。如果您還沒有實(shí)驗(yàn)板,那這里先說說
AT89C51的最小化系統(tǒng),再以一實(shí)例程序驗(yàn)證最小化系統(tǒng)是否在運(yùn)行,這
個最小化系統(tǒng)也易于自制用于實(shí)驗(yàn)。圖2-4便是AT89c51的最小化系
統(tǒng),不過為了讓我們能看出它是在運(yùn)行的,加了一個電阻和一個LED,用
以顯示它的狀態(tài),晶體震蕩器能根據(jù)自己的情況使用,一般實(shí)驗(yàn)板上是用
11.0592MHz或12MHz,使用前者的好外是能產(chǎn)生標(biāo)準(zhǔn)的串行口波特率,后
者則一個機(jī)器周期為1微秒,便于做精確定時。在自己做實(shí)驗(yàn)里,注意的
是VCC是+5V的,不能高于此值,不然將損壞單片機(jī),太低則不能正常
工作。在31腳要接高電平,這樣我們才能執(zhí)行片內(nèi)的程序,如接低電平
則使用片外的程序存儲器。卜面建一個新的項(xiàng)目名為OneLED來驗(yàn)證最小
化系統(tǒng)是否能工作(所有的例程都可在筆者的主頁下面下載到,網(wǎng)址:
。程序如下:
#include〃預(yù)處理命令
voidmain(void)〃主函數(shù)名
〃這是第一種注釋方式
unsignedinta;〃定義變量a為int類型
/*這是第二種注釋方式
*/
do{//dowhile組成循環(huán)
for(a=0;a<50000;a++);〃這是一個循環(huán)Pl_0=0;〃設(shè)P1.0口
為低電平,點(diǎn)亮LEDfor(a=0;a<50000;a++);〃這是一個循環(huán)Pl_0=
1;〃設(shè)P1.0口為高電平,熄滅LED
)
while(l);
)
13
s
2p103
二
3p113
4p12㈡3
5p13巴3
6p1403
7p15,3
Sp16。3
p17、
vcco
132
1Un
12弓2
-乙N
15
14H1
H。2
31|12
E;2
匕
19
A
18X74
30pFXLJAc2
9*S
RhrSs
q
S.2K17II二
g
16RiM2
Wrs/Xn
AT89C51
O
VCC
圖2-4AT89c51最小化系統(tǒng)
這里先講講KEILC編譯器所支持的注釋語句。一種是以符號
開始的語句,符號之后的語句都被視為注釋,直到有回車換行。另一種是
在“/*”和“*/”符號之內(nèi)的為注釋。注釋不會被C編譯器所編譯。?
個C應(yīng)用程序中應(yīng)有一個main主函數(shù),main函數(shù)能調(diào)用別
的功能函數(shù),但其它功能函數(shù)不允許調(diào)用main函數(shù)。不論main函
數(shù)放在程序中的那個位置,總是先被執(zhí)行。用上面學(xué)到的知識編譯寫好的
OneLED程序,并把它燒到剛做好的最小化系統(tǒng)中。上電,剛開始時LED是
不亮的(因?yàn)樯想姀?fù)位后所有的10口都置1引腳為高電平),然后延時
一段時間(for(a=0;a<50000;a++)這句在運(yùn)行),LED亮,再延時,LED熄
滅,然后交替亮、火。第一個真正的小實(shí)驗(yàn)就做完,如果沒有這樣的效果
那么您就要認(rèn)真檢查一下電路或編譯燒寫的步驟了。
儀
sylar源于heros
了解更多電源解決方案
q回復(fù)上回復(fù)本帖㈤回到頂端
單片機(jī)c語言教程第三課C51數(shù)據(jù)類型發(fā)表于2009-07-3015:04:52
sylar
每寫一個程序,總離不開數(shù)據(jù)的應(yīng)用,在學(xué)習(xí)c51語言的過程中掌握
理解數(shù)據(jù)類型也是很關(guān)鍵的。先看表3—1,表中列出了KEIL
uVision2單片機(jī)c語言編譯器所支持的數(shù)據(jù)類型。在標(biāo)準(zhǔn)C語言中基
我是MM高級本的數(shù)據(jù)類型為char,int,short,long,float和double,而在c51
會員編譯器中int和short相同,float和double相同,這里就不列
出說明了。下面來看看它們的具體定義:
用戶等級:院士
加為好友發(fā)短
消息
數(shù)據(jù)類型長度值域
所有發(fā)言個人
unsignedchar單字節(jié)0-255
檔案
signedchar單字節(jié)-128—+127
最后登陸時間:unsignedint雙字節(jié)0-65535
2010-06-04signedint雙字節(jié)-32768?+32767
08:20:15unsignedlong四字節(jié)0-4294967295
狀態(tài):離線signedlong四字節(jié)-2147483648?+2147483647
float四字節(jié)±1.175494E-38?±3.402823E+38
*1-3字節(jié)對象的地址
bit位0或1
sfr單字節(jié)0?255
sfrl6雙字節(jié)0-65535
sbit位0或1
表3-1KEILuVision2單片機(jī)c語言編譯器所支持的數(shù)據(jù)類型
1.char字符類型
char類型的長度是一個字節(jié),通常用于定義處理字符數(shù)據(jù)的變量或常
量。分無符號字符類型unsignedchar和有符號字符類型signed
char,默認(rèn)值為signedchar類型。unsignedchar類型用字節(jié)中
所有的位來表示數(shù)值,所能表達(dá)的數(shù)值范圍是0-255。signedchar
類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表
示負(fù)數(shù),負(fù)數(shù)用補(bǔ)碼表示。所能表示的數(shù)值范圍是T28?+127。
unsignedchar常用于處理ASCII字符或用于處理小于或等于255
的整型數(shù)。
*正數(shù)的補(bǔ)碼與原碼相同,負(fù)二進(jìn)制數(shù)的補(bǔ)碼等于它的絕對值按位取
反后加1?
2.int整型
int整型長度為兩個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。分有符號int
整型數(shù)signedint和無符號整型數(shù)unsignedint,默認(rèn)值為signed
int類型。signedint表示的數(shù)值范圍是-32768?+32767,字節(jié)中
最高位表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負(fù)數(shù)。unsigned
int表示的數(shù)值范圍是0-65535。
先停一下來寫個小程序看看unsignedchar和unsignedint用于延
時的不一樣效果,說明它們的長度是不一樣的,學(xué)習(xí)它們的使用方法。
依舊用上一篇的最小化系統(tǒng)做實(shí)驗(yàn),不過要加多一個電阻和LED,如
圖3—1。實(shí)驗(yàn)中用D1的點(diǎn)亮表明正在用unsignedint數(shù)值延時,
用
D2點(diǎn)亮表明正在用unsignedchar數(shù)值延時。
圖3—1第3課實(shí)驗(yàn)用電路把這個項(xiàng)目稱為TwoLED,實(shí)驗(yàn)程序如
下:
#include〃預(yù)處理命令
voidmain(void)//主函數(shù)名
(
unsignedinta;//定義變量a為unsignedint類型
unsignedcharb;〃定義變量b為unsignedchar類型
do
{//dowhile組成循環(huán)
for(a=0;a<65535;a++)
Pl0=0;//65535次設(shè)P1.0口為低電平,點(diǎn)亮LEDPl0=1;//
設(shè)P1.0口為高電平,熄滅LED
for(a=0;a<30000;a++);//空循環(huán)
for(b=0;b<255;b++)
Pl_l=0;//255次設(shè)Pl.1口為低電平,點(diǎn)亮LEDPl」=1;//
設(shè)Pl.1口為高電平,熄滅LED
for(a=0;a<30000;a++);〃空循環(huán)
)
while(1);
)
同樣編譯燒寫,上電運(yùn)行您就能看到結(jié)果了。很明顯D1點(diǎn)亮的時間
長于D2點(diǎn)亮的時間。
這里必須要講的是,當(dāng)定義一個變量為特定的數(shù)據(jù)類型時,在程序使
用該變量不應(yīng)使它的值超過數(shù)據(jù)類型的值域。如本例中的變量b不
能賦超出0~255的值,如for(b=0;b<255;b++)改為for(b=0;
b<256;b++),編譯是能通過的,但運(yùn)行時就會有問題出現(xiàn),就是說b
的值永遠(yuǎn)都是小于256的,所以無法跳出循環(huán)執(zhí)行下一句P1J=L
從而造成死循環(huán)。同理a的值不應(yīng)超出0-65535。
3.long長整型
long長整型長度為四個字節(jié),用于存放一個四字節(jié)數(shù)據(jù)。分有符號
long長整型signedlong和無符號長整型unsignedlong,默認(rèn)值
為signedlong類型。signedint表示的數(shù)值范圍是-2147483648?
+2147483647,字節(jié)中最高位表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”
表示負(fù)數(shù)。unsignedlong表示的數(shù)值范圍是0~4294967295。
4.float浮點(diǎn)型
float浮點(diǎn)型在十進(jìn)制中具有7位有效數(shù)字,是符合IEEE-754標(biāo)
準(zhǔn)的單精度浮點(diǎn)型數(shù)據(jù),占用四個字節(jié)。因浮點(diǎn)數(shù)的結(jié)構(gòu)較復(fù)雜在以
后的章節(jié)中再做詳細(xì)的討論。
5.*指針型指針型本身就是一個變量,在這個變量中存放的指向另
一個數(shù)據(jù)的地址。這個指針變量要占據(jù)一定的內(nèi)存單元,對不一樣的
處理器長度也不盡相同,在c51中它的長度?般為1?
3個字節(jié)。指針變量也具有類型,在以后的課程中有專門一課做探討,
這里就不多說了。
6.bit位標(biāo)量
bit位標(biāo)量是c51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個位
標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。它的值是一個二進(jìn)制
位,不是0就是1,類似一些高級語言中的Boolean類型中的True
和False。
7.sfr特殊功能寄存器
sfr也是一種擴(kuò)充數(shù)據(jù)類型,點(diǎn)用個內(nèi)存單元,值域?yàn)?~255。利
用它能訪問51里;1機(jī)內(nèi)部的所有特殊功能寄存器。如用sfrPl=
0x90這一句定P1為P1端口在片內(nèi)的寄存器,在后面的語句中用
以用P1=255(對P1端口的所有引腳置高電平)之類的語句來操
作特殊功能寄存器。
8.sfrl616位特殊功能寄存器
sfrl6占用兩個內(nèi)存單元,值域?yàn)?—65535。sfrl6和sfr一樣用
于操作特殊功能寄存器,所不一樣的是它用于操作占兩個字節(jié)的寄存
器,如定時器T0和Tl?
9.sbit可錄址位
sbit同樣是單片機(jī)c語言中的一種擴(kuò)充數(shù)據(jù)類型,利用它能訪問芯
片內(nèi)部的RAM中的可尋址
位或特殊功能寄存器中的可尋址位。如先前定義了
sfrPl=0x90;〃因Pl端口的寄存器是可位尋址的,所以能定義
sbitPl_l=Pl-1;〃P1」為Pl中的Pl.1引腳
〃同樣我們能用Pl.1的地址去寫,如sbitPl1=0x91;這樣在以
后的程序語句中就能用Pl_l來對Pl.1引腳進(jìn)行讀寫操作了。通常
這些能直接使用系統(tǒng)供給的預(yù)處理文件,里面己定義好各特殊功能寄
存器的簡單名字,直接引用能省去一點(diǎn)時間,我自己是一直用的。當(dāng)
然您也能自己寫自己的定義文件,用您認(rèn)為好記的名字。
4
sylar源于heros
提高空載性能,降低待機(jī)功耗并
提升輕載效率q回復(fù)立回復(fù)本帖
回到頂端
單片機(jī)c語言教程第四課C51常量發(fā)表于2009-07-3015:05:41[4樓]
sylar
上篇學(xué)習(xí)了KElLc單片機(jī)c語言編譯器所支持的數(shù)據(jù)類型。而這些c51
數(shù)據(jù)類型又是怎么用在常量和變量的定義中的呢?又有什么要注意的嗎?
常量就是在程序運(yùn)行過程中不能改變值的量,而變量是能在程序運(yùn)行過程
我是MM高中不斷變化的量。變量的定義能使用所有c51編譯器支持的數(shù)據(jù)類型,而
級會訴常量的數(shù)據(jù)類型只有整型、浮點(diǎn)型、字符型、字符串型和位標(biāo)量。這一篇
學(xué)習(xí)常量定義和使用方法,而下一篇則學(xué)習(xí)單片機(jī)c語言的變量。
用戶等級:
院士常量的數(shù)據(jù)類型說明是這樣的
加為好友i.整型常量能表示為十進(jìn)制如123,0,-89等。十六進(jìn)制則以O(shè)x開頭
發(fā)短消息如0x34,-0x3B等。長整型就在數(shù)字后面加字母L,如104L,034L,0xF340
>七g一等。
所有發(fā)旨
個人檔案2.浮點(diǎn)型常量可分為十進(jìn)制和指數(shù)表示形式。十進(jìn)制由數(shù)字和小數(shù)
層尸”葉”點(diǎn)組成,如0.888,3345.345,0.0等,整數(shù)或小數(shù)部分為0,能省略但必須
最后登陸時
有小數(shù)點(diǎn)。指數(shù)表示形式為[土]數(shù)字[.數(shù)字]e[土]數(shù)字,口中的內(nèi)容為可
間:選項(xiàng),其中內(nèi)容根據(jù)具體情況可有可無,但其余部分必須有,如
2010-06-04
08:20:15125e3,7e9,-3.Oe-3。
狀態(tài):離線
3.字符型常量是單引號內(nèi)的字符,如'a,,等,不能顯示的控制字
符,能在該字符前面加一個反斜杠“\”組成專用轉(zhuǎn)義字符。常用轉(zhuǎn)義字
符表請看表4—1。
4.字符串型常量由雙引號內(nèi)的字符組成,如“test”,“0K”等。當(dāng)引號
內(nèi)的沒有字符時,為空字符串。在使用特殊字符時同樣要使用轉(zhuǎn)義字符如
雙引號。在C中字符串常量是做為字符類型數(shù)組來處理的,在存儲字符
串時系統(tǒng)會在字符串尾部加上\。轉(zhuǎn)義字符以作為該字符串的結(jié)束符?字符
串常量“A”和字符常量'A,是不一樣的,前者在存儲忖多占用一個字節(jié)
的字間。
5.位標(biāo)量,它的值是一個二進(jìn)制。
轉(zhuǎn)義字符含義ASCII碼(16/10進(jìn)制)
\()空字符(NULL)00H/0
\n換行符(LF)0AH/10
\r回車符(CR)0DH/13
\t水平制表符(HT)09H/9
\b退格符(BS)08H/8
\f換頁符(FF)0CH/12
單引號27H/39
V,雙引號22H/34
反斜杠5CH/92
及4-1常用轉(zhuǎn)義字符表
常量可用在不必改變值的場合,如固定的數(shù)據(jù)表,字庫等。常量的定義方
式有幾種,下面來加以說明。
ttdifineFalse0x0;〃用預(yù)定義語句能定義常量
#difineTrue0x1;〃這里定義False為0,True為1
〃在程序中用到False編譯時自動用0替換,同理True替換為1
unsignedintcodea=100;〃這一句用code把a(bǔ)定義在程序存儲器中
并賦值
constunsignedintc=100;〃用const定義c為無符號int常量并賦
值以上兩句它們的值都保存在程序存儲器中,而程序存儲器在運(yùn)行中是不
允許被修改的,
所以如果在這兩句后面用了類似a=110,a++這樣的賦值語句,編譯時將會
出錯。
下面寫個跑馬燈程序來實(shí)驗(yàn)嚇典型的常量使用方法。先來看看電路圖吧。
它是在上一篇的
實(shí)驗(yàn)電路的基礎(chǔ)上增加幾個LED組成的,也就是用P1口的全部引腳分別
驅(qū)動一一個LED,電路如圖4-1所示。
新建一個RunLED的項(xiàng)目,主程序如下:
include〃預(yù)處理文件里面定義了特殊寄存器的名稱如P1口定義為P1
voidmain(void)
{
〃定義花樣數(shù)據(jù)
constunsignedchar
design[32]={0xFF,OxFE,OxFD,OxFB,0xF7,OxEF,OxDF,OxBF,0x7F,
0x7F,OxBF,OxDF,OxEF,0xF7,OxFB,OxFD,OxFE,OxFF,
OxFF,OxFE,OxFC,0xF8,OxFO,OxEO,OxCO,0x80,0x0,
0xE7,OxDB,OxBD,Ox7E,OxFF};
unsignedinta;〃定義循環(huán)用的變量
unsignedcharb;〃在c51編程中因內(nèi)存有限盡可能注意變量類型的使
用
〃盡可能使用少字節(jié)的類型,在大型的程序中很受用
do{
for(b=0;b<32;b++)
}
}whiled);
}
for(a=0;a<30000;a++);//延時一段時間
Pl=design}];〃讀已定義的花樣數(shù)據(jù)并寫花樣數(shù)據(jù)到P1口
程序中的花樣數(shù)據(jù)能自以去定義,因這里我們的LED要AT89c51的P1
引腳為低電平才會點(diǎn)亮,所以我們要向P1口的各引腳寫數(shù)據(jù)0對應(yīng)連
接的LED才會被點(diǎn)亮,P1□的八個引腳剛好對應(yīng)P1口特殊寄存器的八
個二進(jìn)位,如向P1口定數(shù)據(jù)OxFE,轉(zhuǎn)成二進(jìn)制就是
11111110,最低位D0為0這里P1.0引腳輸出低電平,LED1被點(diǎn)亮。如
此類推,大家不難算出自己想要做的效果了。大家編譯燒寫看看,效果就
出來,顯示的速度您能根據(jù)需要調(diào)整延時a的值,不要超過變量類型的
值域就很行了。哦,您還沒有實(shí)驗(yàn)板?那如何能知道程序運(yùn)行的結(jié)果呢?
呵,不用急,這就來說說用KEILuVision2的軟件仿真來調(diào)試10U輸出
輸入程序。
P1J0POJO(ADO):
P1.1PO.l(ADl)—
P1J2P0RAD2)—
P13P03(AD3):
P1.4P0.4(AD4)
P15P05(AD5):
7
P1J6P0J6(AD6):
8
P1.7P0.7(AD7)—
VCCO-
INT1(P33)P2J0(A8):
JKTO(P32)P2.1(A9)—
P22(A10)—
15
—
ITT1(P35)P23(A11)
T0(P3.4)P2.4(A12)
TP2J(A13)—
-±_Y131
I——I1-24MHEA/VPP2J6(A14)
P2.7(A15)—
19
18XTAL1
-T-30pFXTAL2VCC—
GND-
9
RESETRXD(P3J0)—
TXD(P3.1)—
_1_C3上16RD(P3.7)ALEyPROG;
(^,lOuF一WR(P36)PSEN
AT89c51
vcc
圖4-1八路跑馬燈電路編譯運(yùn)行上面的程序,然后按外部設(shè)備菜單
Peripherals—I/OPorts—Port1就打開
Por
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目申報(bào)服務(wù)合作意向合同
- 電動皮卡購銷合同
- 深入了解服務(wù)合同的種類與形式
- 拆遷過程中房屋買賣合同樣本
- 灰砂磚購銷流程合同
- 房屋買賣合同案例分析報(bào)告
- 技術(shù)服務(wù)合同的技術(shù)轉(zhuǎn)讓收費(fèi)流程
- 飼料運(yùn)輸購銷合同
- 房屋買賣定金支付合同書
- 國際裝卸運(yùn)輸合同范本
- 2023年自動化項(xiàng)目經(jīng)理年度總結(jié)及下一年計(jì)劃
- 冬季山區(qū)行車安全
- 30題戰(zhàn)略規(guī)劃崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 教聯(lián)體經(jīng)驗(yàn)交流材料
- JC-T 940-2004 玻璃纖維增強(qiáng)水泥 (GRC)裝飾制品
- 國家開放大學(xué)《供應(yīng)鏈管理》形考作業(yè)1-4參考答案
- 科研倫理與學(xué)術(shù)規(guī)范
- 學(xué)校人事工作個人總結(jié)
- SGS 質(zhì)量檢驗(yàn)報(bào)告
- 水庫蓄水安全鑒定報(bào)告
- 大額保單操作實(shí)務(wù)
評論
0/150
提交評論