雖然學習這一門新的語言充滿種種困難,但是只有困難的東西才值得去學習,去突破,由學習知識到熱愛知識再到使用知識,掌握一門有區分度的知識這才是以后工作的堅實后盾,加油!
第一部分基礎知識
1單片機定義
2單片機結構
3基本的關系與計算
4基本數據類型
5基本語句
必會知識點:
1掌握單片機最小系統運作的必要條件(電源 晶振 復位電路)
2掌握對單片機I/O接口的操作(輸出控制電平高低 輸入檢測電平高低)
3定時器 (重點掌握最常用方式2)
4中斷 (掌握外部中斷,定時中斷,串口中斷)
5串口通信(掌握單片機之間的通信,單片機與計算機之間的通信)
第一部分——基礎
1單片機定義:單片機就是在一片硅片上集成微處理器,存儲器及各種輸入輸出端口芯片,這塊芯片具有計算機的屬性所以被稱為單片微型計算機,簡稱單片機。
解釋:通俗地講就是一塊集成芯片,但這個集成芯片有特殊功能,這些功能的實現是靠使用者自己來編程控制各個引腳在不同時候輸出不同電平,進而控制外圍電路電氣狀態。
2各類有代表性的51芯片
公司
| 產品
| AT(Atmel)
| AT89C51 AT89C52
| Intel(英特爾)
| i87C54 i87C58
| STC
| STC89C51RC STC89C52RC
| 芯片標號解釋:STC89C51RC 40C-PDIP 0707CU813.00D
STC——表示STC公司的產品
8——表示該芯片為8051內核芯片
9——內部含有flash 存儲器 0表示內部含有Mask ROM存儲器 7表示內含有紫外線可擦除存儲器
C——表示該器件為CMOS 產品 LV和LE表示該芯片為低壓產品 S表示含有可串行下載flash存儲器
5——固定不變
1——表示該芯片內部程序存儲空間大小1位4KB,2為8KB,程序存儲空間(ROM)=n乘4KB
RC——內部隨機讀寫存儲器(RAM)為512B RD+表示內部RAM為1280B
40——芯片外最高接入40MHZ晶振 AT單片機一般是24
C——產片級別 C表示商業級,溫度范圍0-70 I表示工業級,溫度范圍-40-85
A表示汽車用產品 溫度范圍-40-125 M 軍用產品 溫度范圍-55-150
PDIP——雙列直插式封裝 PLCC 塑料封裝 QFP,PFP塑料扁平式封裝 PGA 插針網絡陣列封裝 BGA 球柵陣列封裝
單片機應用:
智能儀表:數字示波器 數字萬用表 通信:手機 小靈通
武器裝備:飛機 軍艦 坦克 魚雷制導
單片機學習方法:
1首先51單片機作為入門芯片,適合初學者學。
2只用軟件仿真是學不會單片機的,要把硬件擺在面前(開發板)親自操作,體會。
3不能只看書,也不能不看書,需要大致了解單片機各個引腳功能,了解寄存器。
4實踐最重要,自己買一塊單片機開發板只需要有流水燈,數碼管,鍵盤(獨立,矩陣),A\D,D\A轉換,液晶,I2R總線,USB擴展就夠了
單片機有40個引腳,按照功能可以分為三類:
電源及時鐘引腳:VCC GND XTAL1 XTAL2(必會)
I/O口引腳: P1 P2 P3 四組8位I/O接口(必會)
編程控制引腳:RST PSEN ALE\PROG EA/VPP(了解)
XTAL1 片內振蕩電路輸入端,XTAL2 片內振蕩電路輸出端
8051芯片時鐘振蕩有兩種方式:
1片內振蕩 兩個引腳接石英晶體振蕩器和電容(10PF-30PF)
2外部時鐘 外部時鐘信號從XTAL2進 XTAL1 接地
I/O口引腳——P0口 P1口 P2口 P3口
P0口(39腳-32腳)
| 每個口可獨立控制,無內置上拉電阻,使用時需要外接
| P1口(1腳-8腳)
| 每個口可獨立控制, 內置上拉電阻 ,使用時需要進行寫1操作
| P2口(21腳-28腳)
| 同P0口
| P3口(10腳-17腳
| 同P1口
| P3引腳第二功能定義
標號 | 引腳 | 第二功能
| 說明
| P3.0 | 10 | RXD
| 串行輸入
| P3.1 | 11 | TXD
| 串行輸出
| P3.2 | 12 | TNT0\
| 外部中斷0
| P3.3 | 13 | TNT1\
| 外部中斷1
| P3.4 | 14 | T0
| 定時器/計數器0外部輸入端
| P3.5 | 15 | T1
| 定時器/計數器1外部輸入端
|
電平特性
數字電路只有兩種電平高電平1和低電平0
TTL型集成:+5V為1 0V為0
CMOS型集成:VCC可達12V,高電平為0.9VCC 低電平為0.1VCC
二進制和十六進制
十進制 | 二進制 | 十六進制 | 十進制 | 二進制 | 十六進制 | 0 | 0 | 0 | 8 | 1000 | 8 | 1 | 1 | 1 | 9 | 1001 | 9 | 2 | 10 | 2 | 10 | 1010 | A | 3 | 11 | 3 | 11 | 1011 | B | 4 | 100 | 4 | 12 | 1100 | C | 5 | 101 | 5 | 13 | 1101 | D | 6 | 110 | 6 | 14 | 1110 | E | 7 | 111 | 7 | 15 | 1111 | F | 二進制邏輯運算
與
必須都有,否則就沒有 C語言中的符號 & 運算規則:0&0=0&1=1&0=0 1&1=1
或
只要其中之一有就有 C語言中的符號 | 運算規則: 0|1=1|0=1|1=1 0|0=0
非
求反運算 C語言中的符號 ! 運算規則: !1=0 !0=1
C51中的基本數據類型
作用:設定變量前要聲明這個變量類型,好讓單片機分配合適的存儲空間
數據類型 | 關鍵字 | 所占位數 | 表示數范圍 | 無符號字符型 | unsigned char | 8 | 0-255 | 有符號字符型 | char | 8 | -128-127 | 無符號整型 | unsigned int | 16 | 0-65535 | 有符號整型 | int | 16 | -32768-32767 | 無符號長整型 | Unsigned long | 32 |
| 無符號長整型 | long | 32 |
| 單精度實型 | float | 32 |
| 雙精度實型 | double | 64 |
| 位類型 | bit | 1 | 0-1 |
二進制兩個數每個數所占空間就是1位(b)位也是單片機存儲器最小的單位 字節B(1B=8b)
float和double區別:float只能提供7位有效數字,double可以提供6位有效數字。
數據類型擴充定義:
背景:當我們需要在程序中操作這些特殊功能寄存器時,必須在程序最前面將這些名稱加以聲明,就是把寄存器器地址編碼賦給這個名稱,這樣編譯器才認識。
sbit ——特殊功能位聲明,聲明某個特殊寄存器的某一位
C51中的運算符
分為算術運算符 邏輯運算符 位運算符
算術運算符 | 邏輯運算符 | 位運算符 | 算術運算符 | 含義 | 邏輯運算符 | 含義 | 位運算符 | 含義 | + | 加 | > | 大于 | & | 邏輯與 | - | 減 | < | 小于 | ! | 邏輯或 | * | 乘 | >= | 大于等于 | ^ | 異或 | / | 除 | <= | 小于等于 | ~ | 取反 | ++ | 自加 | == | 測試相等 | >> | 左移 | -- | 自減 | != | 測試不等 | << | 右移 | % | 求余 | & & | 按位與 |
|
|
|
| || | 按位或 |
|
|
|
| ! | 非 |
|
| C51中的基礎語句
語句 | 類型 | If | 選擇語句 | while | 循環語句 | for | 循環語句 | switch/case | 多分支選擇語句 | do-while | 循環語句 | for 語句
格式:for(表達式1;表達式2;表達式3)
{語句(可以為空)}
執行過程:
1求解第一次表達式1
2求解表達式2,若為真則執行for中的語句,然后執行第3步,否則結束for語句,直接跳出,不執行第3步
3第三步:求解表達式3
第4步:跳到第2步重復執行
delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--); //延時xms秒
}
while()語句
格式:while(表達式)
{內部語句(內容可為空)}
特點:先判斷表達式,后執行語句
原則:若表達式不為0即為真,執行語句,否則跳出while循環,執行后面語句
應用:1讓程序停止 while(1);
2不停地執行某段程序
while(1)
{
P0=0xfe;
}
If語句
格式:if(表達式)
{內部語句}
特點:如果條件表達式為真(非0值),就執行后面的語句;如果條件表達式為假(0值),就不執行后面的語句
解釋:使用條件語句if可以構成分支結構,它通過用戶給定的條件進行判斷,根據判斷的結果決定執行不同的分支程序
if(key1=0) //如果key=1(按下S2鍵)
{
delayms(10); //延時去抖
if(key1=0); //再次檢測按鍵是否按下,如果按下
{
num++; //數字自加1
if(num=60) //如果數字與60測試相等
num=0; //則回到0
while(!key1); //等待按鍵釋放
}
}
switch-case語句
背景;if語句一般用來處理兩個分支,處理多個分支需要用if—else—if結構,但若分支較多,就要用switch語句,又稱開關語句,switch語句可以直接處理多個分支
格式:
switch(表達式)
{
case常量表達式1:(注意這里是“:”) 執行過程:
語句1; 首先計算switch后面表達式的值
break; 用此值一次與各個case后常量表達式比較
case常量表達式2: 如果此值與某個case后面常量表達式值相等就執行此case后語句
語句2; 當執行遇到break語句就退出switch語句
break; 若表達式值與所有case后面表達式都不相等則執行default后語句并退出
......
case常量表達式n:
語句n;
break;
default:
語句n+1;
break;
}
應用:根據輸入考試成績的等級,輸出百分制分數段
switch(grade)
{
case‘A’:
printf(“85-100\n”)
break;
case‘B’:
printf(“70-84\n”);
break;
case‘C’:
printf(“60-69\n”);
break;
case‘D’:
printf(“<60\n”);
break;
default:
printf(“error!\n”);
}
|