資料1AVR單片機(jī)簡(jiǎn)介與C語(yǔ)言基礎(chǔ)_第1頁(yè)
資料1AVR單片機(jī)簡(jiǎn)介與C語(yǔ)言基礎(chǔ)_第2頁(yè)
資料1AVR單片機(jī)簡(jiǎn)介與C語(yǔ)言基礎(chǔ)_第3頁(yè)
資料1AVR單片機(jī)簡(jiǎn)介與C語(yǔ)言基礎(chǔ)_第4頁(yè)
資料1AVR單片機(jī)簡(jiǎn)介與C語(yǔ)言基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第2章 AVR單片機(jī)基本原理單片機(jī)工作過(guò)程單片機(jī)自動(dòng)完成賦予它的任務(wù)的過(guò)程,也就是單片機(jī)執(zhí)行程序的過(guò)程,即一條條執(zhí)行的指令的過(guò)程,所謂指令就是把要求單片機(jī)執(zhí)行的各種操作用的命令的形式寫下來(lái),這是在設(shè)計(jì)人員賦予它的指令系統(tǒng)所決定的,一條指令對(duì)應(yīng)著一種基本操作;單片機(jī)所能執(zhí)行的全部指令,就是該單片機(jī)的指令系統(tǒng),不同種類的單片機(jī),其指令系統(tǒng)亦不同。為使單片機(jī)能自動(dòng)完成某一特定任務(wù),必須把要解決的問(wèn)題編成一系列指令(這些指令必須是選定單片機(jī)能識(shí)別和執(zhí)行的指令),這一系列指令的集合就成為程序,程序需要預(yù)先存放在具有存儲(chǔ)功能的部件存儲(chǔ)器中。存儲(chǔ)器由許多存儲(chǔ)單元(最小的存儲(chǔ)單位)組成,就像大樓房有許多房間組

2、成一樣,指令就存放在這些單元里,單元里的指令取出并執(zhí)行就像大樓房的每個(gè)房間的被分配到了唯一一個(gè)房間號(hào)一樣,每一個(gè)存儲(chǔ)單元也必須被分配到唯一的地址號(hào),該地址號(hào)稱為存儲(chǔ)單元的地址,這樣只要知道了存儲(chǔ)單元的地址,就可以找到這個(gè)存儲(chǔ)單元,其中存儲(chǔ)的指令就可以被取出,然后再被執(zhí)行。 程序通常是順序執(zhí)行的,所以程序中的指令也是一條條順序存放的,單片機(jī)在執(zhí)行程序時(shí)要能把這些指令一條條取出并加以執(zhí)行,必須有一個(gè)部件能追蹤指令所在的地址,這一部件就是程序計(jì)數(shù)器PC(包含在CPU中),在開始執(zhí)行程序時(shí),給PC賦以程序中第一條指令所在的地址,然后取得每一條要執(zhí)行的命令,PC之中的內(nèi)容就會(huì)自動(dòng)增加,增加量由本條指令長(zhǎng)

3、度決定,可能是1、2或3,以指向下一條指令的起始地址,保證指令順序執(zhí)行。:標(biāo)準(zhǔn)C語(yǔ)言的關(guān)健字(表2-1) 關(guān)鍵字 用途 說(shuō)明 char 聲明字符型變量或函數(shù) 數(shù)據(jù)類型double 聲明雙精度變量或函數(shù) void 聲明函數(shù)無(wú)返回值或無(wú)參數(shù),聲明無(wú)類型指針 unsigned 聲明無(wú)符號(hào)類型變量或函數(shù) struct 聲明結(jié)構(gòu)體變量或函數(shù) union 聲明聯(lián)合數(shù)據(jù)類型 signed 聲明有符號(hào)類型變量或函數(shù) short 聲明短整型變量或函數(shù) long 聲明長(zhǎng)整型變量或函數(shù) int 聲明整型變量或函數(shù) float 聲明浮點(diǎn)型變量或函數(shù) enum 聲明枚舉類型 sizeof 計(jì)算數(shù)據(jù)類型長(zhǎng)度 volati

4、le 說(shuō)明變量在程序執(zhí)行中可被隱含地改變 typedef 重新進(jìn)行數(shù)據(jù)類型定義 const 聲明常量 Static 聲明靜態(tài)變量 存儲(chǔ)種類的說(shuō)明 register 聲明寄存器變量 extern 聲明外部變量 auto 聲明自動(dòng)變量 return 函數(shù)返回語(yǔ)句 返回一個(gè)值 程序語(yǔ)句case 開關(guān)語(yǔ)句分支 default Switch語(yǔ)句的失敗選擇項(xiàng) switch 開關(guān)語(yǔ)句 goto 無(wú)條件跳轉(zhuǎn)語(yǔ)句 else 構(gòu)成if-else選擇語(yǔ)句 if if條件語(yǔ)句 continue 結(jié)束當(dāng)前循環(huán),開始下一輪循環(huán) break 跳出當(dāng)前循環(huán)體 while 構(gòu)成while和do-while循環(huán)語(yǔ)句 do 循環(huán)語(yǔ)

5、句的循環(huán)體 for for循環(huán)語(yǔ)句 現(xiàn)在我們來(lái)分析下面這個(gè)程序的構(gòu)成。 #include <mega16.h> /包含所用單片機(jī)對(duì)應(yīng)的頭文件 void delay_ms(unsigned int time)/延時(shí)程序,time是形式參數(shù) unsigned int i,j; for(i=time;i>0;i-)/i不斷減1,一直到i>0條件不成立為止 for(j=112;j>0;j-)/j不斷減1,一直到j(luò)>0條件不成立為止 ; Void main(void) DDRB=0xFF;while(1) PORTB=0x00;/ 點(diǎn)亮P1端口 delay_ms(50

6、0); /調(diào)用延時(shí)函數(shù) PORTB=0xff;/ 息滅P1端口 delay_ms(500);/調(diào)用延時(shí)函數(shù) 1標(biāo)識(shí)符是用來(lái)定義源程序當(dāng)中的某個(gè)對(duì)象名稱,例如語(yǔ)句,數(shù)據(jù)類型,函數(shù),變量,數(shù)組等。語(yǔ)言標(biāo)識(shí)符只能由字母,數(shù)字,下劃線,而且還一定要以字母或者下劃線開始; 2標(biāo)識(shí)符的長(zhǎng)度由系統(tǒng)決定,但至少前個(gè)字符有效,字符超出的部分由系統(tǒng)省略; 3上面表2-1所說(shuō)的C語(yǔ)言關(guān)鍵字由系統(tǒng)保留不能用作標(biāo)識(shí)符。 4聲名標(biāo)識(shí)符的時(shí)候,最好是選取具有一定代表意義的明詞,例如延時(shí)函數(shù)就可以定義為“delay_ms”,盡量不要取名“aa” “bb”“tt”等等沒(méi)有特定意義的標(biāo)識(shí)符,這樣雖然沒(méi)有違反C語(yǔ)言的規(guī)則,但是在程

7、序里就很容易混淆,我們?cè)诰帉懗绦虻臅r(shí)候一定要養(yǎng)成良好的習(xí)慣。 5C語(yǔ)言區(qū)分大小寫,例如定義一個(gè)延時(shí)函數(shù)的形式參數(shù)time,但是如果程序當(dāng)中再出現(xiàn)一個(gè)由大寫字母定義的標(biāo)識(shí)符TIME,那么它們?cè)诔绦虍?dāng)中是兩個(gè)不同的標(biāo)識(shí)符,是沒(méi)有沖突的, 6C語(yǔ)言程序當(dāng)中有且只有一個(gè)main函數(shù),函數(shù)是構(gòu)到C語(yǔ)言程序的單位。 7,一個(gè)C語(yǔ)言程序,無(wú)論main函數(shù)的物理位置在那里,總是從main函數(shù)開始執(zhí)行。 8書寫C語(yǔ)言程序的時(shí)候,可以一行寫多條程序,也可以一行只寫一條程序,總的來(lái)講,C語(yǔ)言的書寫是自由的,但是我們最好還是按照一定的格式來(lái)書寫,這樣在調(diào)試程序時(shí)比較容易,也比較容易讀懂程序。 9每句程序語(yǔ)句后面一定要

8、加分號(hào),分號(hào)是C語(yǔ)言結(jié)構(gòu)的一部分,如果缺少了就會(huì)語(yǔ)法出錯(cuò)。 10函數(shù)分兩部分組成,在上面的程序當(dāng)中void delay_ms(unsigned int time)是一個(gè)函數(shù)的首部,即函數(shù)頭,而在括號(hào)里面的unsigned int是數(shù)據(jù)類型,它聲明了time是一個(gè)無(wú)符號(hào)整型的變量。而下面的: unsigned int i,j; for(i=time;i>0;i-)/i不斷減1,一直到i>0條件不成立為止 for(j=112;j>0;j-)/j不斷減1,一直到j(luò)>0條件不成立為止 ; 是函數(shù)體,函數(shù)體里的語(yǔ)句一定要用“ ”花括號(hào)括起來(lái)。這是函數(shù)的語(yǔ)法結(jié)構(gòu)。 11注釋,在程序

9、中添加注釋是為了能更加容易讀懂和理解程序,GCCAVR支持兩種風(fēng)格的注釋方法“/”和“/*-*/”。 “/”的意思是在其后面的全部引導(dǎo)為注釋,而“/*-*/”的意思是在“/*”開始,一直到遇到“*/”為止,在其里面的內(nèi)容都被認(rèn)為是注釋。大家要注意,在編寫程序的時(shí)候如果不小心冊(cè)除了一個(gè)“*/”那么從“/*”開始的內(nèi)容就全部被認(rèn)為是注釋,這一點(diǎn)大家要小心。 12文件包含,文件包含不是必要的。#include <mega16.h>就是一種文件包含,但是為了將程序更加人性化,模塊化,所以引入了文件包含,它的意思是將擴(kuò)展名為“.h”的文件包含到當(dāng)前文件當(dāng)中。 “.h” 是head的縮寫為頭文

10、件的意思。 C語(yǔ)言支特的數(shù)據(jù)類型包括基本類型,指針類型,其中基本類型又可按以下的來(lái)劃分。 基本類型分為:字符型(char) 整型(int) 長(zhǎng)整型(long) 浮點(diǎn)型(double) 表2-2 數(shù)據(jù)類型 名稱 長(zhǎng)度 值域 unsigned char 無(wú)符號(hào)字符型 單字節(jié) 0255 signed char 有符號(hào)字符型 單字節(jié) -128 +127 unsigned int 無(wú)符號(hào)整型 雙字節(jié) 065535 signed int 有符號(hào)整型 雙字節(jié) -32768 +32767 unsigned long 無(wú)符號(hào)長(zhǎng)整型 4字節(jié) 04294967295 signed long 有符號(hào)長(zhǎng)整型 4字節(jié) -

11、2147483648+2147483647 float 浮點(diǎn)型 4字節(jié) +-1.175494E-38+-3.402823E+38 * 指針型 13字節(jié) 對(duì)象地址 算術(shù)運(yùn)算符與表達(dá)式(用于各類數(shù)值運(yùn)算) 表2-3 + 加 - 減 * 乘 / 除 % 求余(或稱求模運(yùn)算) + 自增 - 自減 +i 意思是:i自增1后再參與運(yùn)算。 -i 意思是:i自減1后再參與運(yùn)算。 i+ 意思是:i參與運(yùn)算后,i的值再自增1。 i- 意思是:i參與運(yùn)算后,i的值再自減1。 關(guān)系運(yùn)算符與表達(dá)式(用于比較運(yùn)算) 表2-4 > 大于 < 小于 = 等于 >= 大于等于 <= 小于等于 != 不等

12、于 邏輯運(yùn)算符與表達(dá)式(用于邏輯運(yùn)算) 表2-5 && 邏輯與 | 邏輯或 ! 邏輯非 位操作運(yùn)算符與表達(dá)式(參與運(yùn)算的量,按二進(jìn)制數(shù)進(jìn)行運(yùn)算。) 表2-6 & 按位相與 | 按位相或 按位取反 按位異或 << 左移 >> 右移 賦值運(yùn)算符(用于賦值運(yùn)算) 表2-8 = 賦值 簡(jiǎn)單賦值 += 加法賦值 復(fù)合算術(shù)賦值 -= 減法賦值 *= 乘法賦值 /= 除法賦值 %= 取余賦值 &= 邏輯與賦值 復(fù)合位運(yùn)算賦值 |= 邏輯或賦值 = 邏輯異或賦值 >>= 右移賦值 <<= 左移賦值 運(yùn)算符的優(yōu)先級(jí)與結(jié)合性 表2-1

13、0 優(yōu)先級(jí) 操作符 功能 結(jié)合性 1(最高) () 改變優(yōu)先級(jí) 從左至右 數(shù)組下標(biāo) > 指向結(jié)構(gòu)成員 . 結(jié)構(gòu)體成員 2 + - - 自增1 自減1 從右至左 & 取地址 * 取內(nèi)容 ! 邏輯取反 按位取反 + - 正數(shù) 負(fù)數(shù) () 強(qiáng)制類型轉(zhuǎn)換 sizeof 計(jì)算內(nèi)存字節(jié)數(shù) 3 * / % 乘法 除法 求余 從左至右 4 + - 加法 減法 5 << >> 左移位 右移位 6 < <= > >= 小于 小于等于 大于 大于等于 7 = != 等于 不等于 8 & 按位與 9 按位異或 10 | 按位或 11 &&a

14、mp; 邏輯與 12 | 邏輯或 13 ?: 條件運(yùn)算符 從右至左 14 = += -= *= /= %= &= = |= <<= >>=復(fù)合賦值運(yùn)算符 從右至左 15(最低) , 逗號(hào)運(yùn)算符 從左至右 從表2-11可知,語(yǔ)言中的運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15級(jí)。1級(jí)最高,15級(jí)最低。在表達(dá)式中,優(yōu)先級(jí)較高的要比優(yōu)先級(jí)較低的先進(jìn)行運(yùn)算。 而在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí), 則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。 語(yǔ)言中各運(yùn)算符的結(jié)合性分為兩種,即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。 13C語(yǔ)言的基本語(yǔ)句 if(條件表達(dá)式) 語(yǔ)句 if(條件表達(dá)式)

15、 語(yǔ)句1 else 語(yǔ)句2 if(條件表達(dá)式1) 語(yǔ)句1 else if(條件表達(dá)式2) 語(yǔ)句2 else if(條件表達(dá)式3) 語(yǔ)句3 else 語(yǔ)句4 for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語(yǔ)句 char i; /聲明變量i P1=0xfe; /點(diǎn)亮第一只led管 for(i=0;i<8;i+)/for循環(huán)語(yǔ)句 P1<<=1; /每循環(huán)一次點(diǎn)亮一只led管 for(i=0; i<8;)/for循環(huán)語(yǔ)句 P1<<=1; /每循環(huán)一次點(diǎn)亮一只led管 i+; /更新表達(dá)式 for(; ;)/for循環(huán)語(yǔ)句 P1<<=1; /每循環(huán)一次點(diǎn)亮

16、一只led管 while(條件表達(dá)式) 循環(huán)語(yǔ)句 do 循環(huán)體語(yǔ)句 while(條件表達(dá)式); 在前面討論switch語(yǔ)句的時(shí)候,已經(jīng)講過(guò)break可以退出switch語(yǔ)句,如果沒(méi)有break語(yǔ)句,那么switch語(yǔ)句就永遠(yuǎn)地循環(huán)下去。而在循環(huán)控制語(yǔ)句當(dāng)中,break起到提前結(jié)束循環(huán)的作用。在循環(huán)語(yǔ)句中,break語(yǔ)句常與if語(yǔ)句結(jié)合使用。我們來(lái)看下面的例子。 for(i=0;i<100;i+) if(i=50) break; printf("%dn",i); 程序當(dāng)中本來(lái)printf應(yīng)該輸出100個(gè)值,但是里面出現(xiàn)了一個(gè)if語(yǔ)句,意思是:假如i的值為50的條件成立,

17、則退出循環(huán)體,那就提前結(jié)束了循環(huán)。在使用break前要注意兩點(diǎn):第1 break在else if語(yǔ)句中不起作用;第2當(dāng)有多層循環(huán)語(yǔ)句嵌套的時(shí)候,break語(yǔ)句只退出本層的循環(huán)continue語(yǔ)句只用在循環(huán)控制語(yǔ)句當(dāng)中,其作用是跳過(guò)本次的循環(huán),繼續(xù)進(jìn)行下一次的循環(huán)。continue語(yǔ)句同樣常與if語(yǔ)句相結(jié)合使用。 for(i=0;i<10;i+) if(i%2=0) continue; printf("%dn",i); 程序當(dāng)中本來(lái)應(yīng)該進(jìn)行10次循環(huán),從而輸出從09的10個(gè)數(shù)。但是程序中出現(xiàn)了一句“continue;”,那么什么時(shí)候執(zhí)行“continue;”語(yǔ)句?。【褪?/p>

18、當(dāng)i 除以2的余數(shù)為0時(shí),則跳過(guò)本次的循環(huán)。那么最后輸出的值為1、3、5、7、9。 一維數(shù)組的定義 第一種方式 :int array5=1,2,3,4,5; 第二種方式:int array5=1,2; 第三種方式:int array =1,2,3,4,5; 函數(shù)的定義無(wú)參數(shù)函數(shù)定義的語(yǔ)法格式: 返回類型標(biāo)識(shí)符 函數(shù)名() 聲明部分 程序語(yǔ)句 void delay(void) /函數(shù)頭 unsigned int i,j; /聲明部分 for(i=100;i>0;i-) /程序語(yǔ)句 for(j=112;j>0;j-) ; 有參數(shù)函數(shù)定義的語(yǔ)法格式: 返回類型標(biāo)識(shí)符 函數(shù)名(形式參數(shù)) 聲明部分 程序語(yǔ)句 int compare(int a,int b)/函數(shù)頭,括號(hào)里為形式參數(shù) if(a>b) /以下是程序語(yǔ)句 return a; else return b; 對(duì)于實(shí)參與形參的特點(diǎn)再有以下的幾點(diǎn)補(bǔ)充: (1) 實(shí)參與形參在類型數(shù)量順序應(yīng)保持一致,否則會(huì)在編繹的時(shí)候出現(xiàn)警告或者程序運(yùn)行的結(jié)果錯(cuò)誤。 (2) 被調(diào)函數(shù)的形參只有被調(diào)用的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論