單片機的語言編程_第1頁
單片機的語言編程_第2頁
單片機的語言編程_第3頁
單片機的語言編程_第4頁
單片機的語言編程_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單片機的語言編程第1頁,課件共19頁,創(chuàng)作于2023年2月3.1C及C51語言概述

語言簡潔,使用方便靈活??梢浦残院?。表達能力強。表達方式靈活??蛇M行結構化程序設計??梢灾苯硬僮饔嬎銠C硬件。生成的目標代碼質量高。第2頁,課件共19頁,創(chuàng)作于2023年2月3.1C51的數(shù)據(jù)類型關鍵字:關鍵字則是編程語言保留的特殊標識符,它們具有固定名稱和含義,在程序編寫中不允許標識符與關鍵字相同。在C51中的關鍵字除了有ANSIC標準的32個關鍵字外還根據(jù)51單片機的特點擴展了相關的關鍵字,見表中的C51編譯器的擴展關鍵字。第3頁,課件共19頁,創(chuàng)作于2023年2月關鍵字用途說明bit位標量聲明聲明一個位標量或位類型的函數(shù)sbit位標量聲明聲明一個可位尋址變量sfr特殊功能寄存器聲明聲明一個特殊功能寄存器sfr16特殊功能寄存器聲明聲明一個16位的特殊功能寄存器data存儲器類型說明直接尋址的內部數(shù)據(jù)存儲器bdata存儲器類型說明可位尋址的內部數(shù)據(jù)存儲器idata存儲器類型說明間接尋址的內部數(shù)據(jù)存儲器pdata存儲器類型說明分頁尋址的外部數(shù)據(jù)存儲器xdata存儲器類型說明外部數(shù)據(jù)存儲器code存儲器類型說明程序存儲器interrupt中斷函數(shù)說明定義一個中斷函數(shù)reentrant再入函數(shù)說明定義一個再入函數(shù)using寄存器組選擇選擇單片機的工作寄存器組_at_絕對地址說明為非位變量指定存儲空間絕對地址small存儲模式選擇參數(shù)及局部變量放入可直接尋址的內部RAMcompact存儲模式選擇參數(shù)及局部變量放入分頁外部數(shù)據(jù)存儲區(qū)large存儲模式選擇參數(shù)及局部變量放入分頁外部數(shù)據(jù)存儲區(qū)關鍵字:第4頁,課件共19頁,創(chuàng)作于2023年2月數(shù)據(jù)類型的具體定義:數(shù)據(jù)類型說明長度值域unsignedchar無符號字符型單字節(jié)0~255signedchar帶符號字符型單字節(jié)-128~+127unsignedint無符號整型雙字節(jié)0~65535signedint帶符號整型雙字節(jié)-32768~+32767unsignedlong無符號長整型四字節(jié)0~4294967295signedlong帶符號長整型四字節(jié)-2147483648~+2147483647float單精度型四字節(jié)±1.175494E-38~±3.402823E+38*指針1~3字節(jié)對象的地址bit位變量位0或1sfr8位特殊功能寄存器單字節(jié)0~255sfr1616位特殊功能寄存器雙字節(jié)0~65535sbit可位尋址定義位0或1第5頁,課件共19頁,創(chuàng)作于2023年2月 #include“reg51.h” sbitP0_0=P0^0; voidmain() { P0_0=0; while(1); }例1:利用MCS-51單片機的P0引腳P0.0引接一只LED,送“0”點亮,送“1”滅。則要求點亮,程序如下:第6頁,課件共19頁,創(chuàng)作于2023年2月#include代表的是加載頭文件,頭文件是C編譯器中帶的已經(jīng)定義的函數(shù)的集合或自定義的一個函數(shù)的集合。程序中加載一個reg51.h的文件,那么打開reg51.h里邊的內容是什么呢?如編碼器在C盤下C51文件夾內,則REG51.h文件的路徑是C:\keil\C51\INC\reg51.h。例如:P1定義為

sfrP1=0x90;累加器A定義為

sfrACC=0xE0;定時模式TMOD定義為sfrTMOD=0x89;第7頁,課件共19頁,創(chuàng)作于2023年2月main()函數(shù)也稱為主函數(shù)C語言都是從main()函數(shù)開始執(zhí)行的。前面加了一個void是說明該函數(shù)是沒有返回值的。如果點量8個燈,可P0=0x00對引腳送0,則點亮單色燈,0x00對應二進制數(shù)值00000000,所以該條語句是同時點亮了8只單色燈。整個程序用{}括起來,形成了一個完整的C51程序。上例中,符號P0(代表P0鎖存器)已經(jīng)在頭文件“reg51.h”中有定義。P0_0表示P0.0引腳,它沒有被事先定義好,所以需要使用sbit進行定義。第8頁,課件共19頁,創(chuàng)作于2023年2月例2:P3.2引腳接一個按鍵,P1口接8只單色燈,單色燈0亮1滅,當有按鍵按下時8只單色燈高低4位交替閃亮一次。按鍵按下接收到0,否則為1。#include“reg51.h”sbitkey=P3^2;voidmain(){unsignedcharT1=0x0F,T2=0xF0,keyT;unsignedinti;for(;;){keyT=key;第9頁,課件共19頁,創(chuàng)作于2023年2月if(~keyT) { P1=T1;//高4位亮低4位滅

for(i=0;i<10000;i++);//延時作用

P1=T2;//高4位滅低4位亮

for(i=0;i<10000;i++);//延時作用

}}}例2:P3.2引腳接一個按鍵,P1口接8只單色燈,單色燈0亮1滅,當有按鍵按下時8只單色燈高低4位交替閃亮一次。按鍵按下接收到0,否則為1。第10頁,課件共19頁,創(chuàng)作于2023年2月3.2函數(shù)3.2.1函數(shù)定義通常C語言的編譯器會自帶標準的函數(shù)庫,這些都是一些常用的函數(shù)。標準函數(shù)已由編譯器軟件商編寫定義,使用者直接調用就可以了,而無需定義。同時C語言允許使用者根據(jù)需要編寫特定功能的函數(shù),要調用它必須要先對其進行定義。定義的模式如下:函數(shù)類型函數(shù)名稱(形式參數(shù)表){ 函數(shù)體}第11頁,課件共19頁,創(chuàng)作于2023年2月3.2.2函數(shù)的調用調用就是指一個函數(shù)體中引用另一個已定義的函數(shù)來實現(xiàn)所需要的功能,這時函數(shù)體稱為主調用函數(shù),函數(shù)體中所引用的函數(shù)稱為被調用函數(shù)。一個函數(shù)體中可以調用數(shù)個其它的函數(shù),這些被調用的函數(shù)同樣也可以調用其它函數(shù),也可以嵌套調用。在C51語言中主函數(shù)main是不能被其它函數(shù)所調用的。第12頁,課件共19頁,創(chuàng)作于2023年2月調用函數(shù)的一般形式如下:函數(shù)名(實際參數(shù)表)“函數(shù)名”就是指被調用的函數(shù)。實際參數(shù)表可以為零或多個參數(shù),多個參數(shù)時要用逗號隔開,每個參數(shù)的類型、位置應與函數(shù)定義時所的形式參數(shù)一一對應,它的作用就是把參數(shù)傳到被調用函數(shù)中的形式參數(shù),如果類型不對應就會產(chǎn)生一些錯誤。調用的函數(shù)是無參函數(shù)時不寫參數(shù),但不能省后面的括號。第13頁,課件共19頁,創(chuàng)作于2023年2月3.2.3中斷函數(shù)中斷服務函數(shù)只有在CPU響應中斷時才會被執(zhí)行,這在處理突發(fā)事件和實時控制是十分有效的。

關鍵字是interrupt,是函數(shù)定義時的一個必選項,只要在某個函數(shù)定義后面加上這個選項,這個函數(shù)就變成了中斷服務函數(shù)。第14頁,課件共19頁,創(chuàng)作于2023年2月定義中斷服務函數(shù)時可以用如下的形式。函數(shù)類型函數(shù)名(形式參數(shù))interruptn[usingn]interrupt缺省關鍵字是不可的,由它告訴編譯器該函數(shù)是中斷服務函數(shù),并由后面的n指明所使用的中斷號。n的取值范圍為0-31,但具體的中斷號要取決于芯片的型號,像AT89C51實際上就使用0-4號中斷。每個中斷號都對應一個中斷向量,具體地址為8n+3,中斷源響應后處理器會跳轉到中斷向量所處的地址執(zhí)行程序編譯器會在這地址上產(chǎn)生一個無條件跳轉語句,轉到中斷服務函數(shù)所在的地址執(zhí)行程序。第15頁,課件共19頁,創(chuàng)作于2023年2月下表是8051的中斷向量和中斷號。注意:函數(shù)不能直接調用中斷函數(shù);不能通過形參傳遞參數(shù);但中斷函數(shù)允許調用其它函數(shù),兩者所使用的寄存器組應相同。

第16頁,課件共19頁,創(chuàng)作于2023年2月#include<reg51.h>sbitP1_0=P1^0;voidtimer0(void)interrupt1using1{

/*T0中斷服務程序入口*/P1_0=!P1_0;TH0=-(1000/256);

/*計數(shù)初值重裝*/TL0=-(1000%256);}例3設單片機的fosc=12MHz,要求用T0的方式1編程,在P1.0腳輸出周期為2ms的方波。第17頁,課件共19頁,創(chuàng)作于2023年2月voidmain(void){TMOD=0x01;

/*T0工作在定時器方式1*/P1_0=0;TH0=-(1000/256);

/*預置計數(shù)初值*/TL0=-(1000%256);EA=1;

/*CPU開中斷*/ET0=1;

溫馨提示

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

評論

0/150

提交評論