freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

單片機第14章c語言程序設計(完整版)

2025-02-21 17:56上一頁面

下一頁面
  

【正文】 R7, 333, HERE /*2個機器周期 */ 39 其中 {。雖然這里的“文件包含”只有一行,但 C編譯器在處理的時候卻要處理幾十行或幾百行。程序設計者就是 編寫一系列的函數(shù)模塊 ,并在需要的時候調(diào)用這個函數(shù),實現(xiàn)程序所要求的功能。 需指出,擴展片外存儲器,原理上雖很簡單,但在實際開發(fā)中,很多時候,會帶來不必要的麻煩,如可能降低系統(tǒng)穩(wěn)定性、增加成本、拉長開發(fā)和調(diào)試周期等, 推薦充分利用片內(nèi)存儲空間。只有對 C51中的各種數(shù)據(jù)類型以及存儲類型非常熟練的掌握,才能運用自如。 ( 1)片內(nèi)數(shù)據(jù)存儲器 片內(nèi) RAM可分為 3個區(qū)域 : data: 片內(nèi)直接尋址區(qū) ,位于片內(nèi) RAM的低 128字節(jié)。 注意,不要把 bit與 sbit混淆。 例如: sfr P1=0x90這一語句定義 P1口在片內(nèi)的寄存器,在后面語句中可用 “ P1=0xff” (使 P1的所有引腳輸出 20 為高電平 )之類的語句來操作特殊功能寄存器。針對AT89S51單片機的硬件特點, C51在標準 C的基礎上, 擴展了 4種數(shù)據(jù)類型 (見 表中最后 4行 )。例如庫函數(shù) printf和 scanf,在標準 C中,這兩個函數(shù)通常用于屏幕打印和接收字符,而在 Keil C51中,它們主要用于串行口數(shù)據(jù)的收發(fā)。 14 ( 3)數(shù)據(jù)存儲類型的不同 。 C51與標準 C的主要區(qū)別 不同的嵌入式處理器的 C編譯系統(tǒng) 與標準 C的不同之處 ,主要是它們所針對的嵌入式處理器的硬件系統(tǒng)不同。Vision3,可 簡寫為 181。它支持眾多的 MCS51架構(gòu)的芯片,同時集編輯、編譯、仿真等功能于一體,具有強大的軟件調(diào)試功能,是眾多的單片機應用開發(fā)軟件中最優(yōu)秀的軟件之一。用 C51開發(fā)出來的程序模塊可以不經(jīng)修改,直接被其他項目所用,這使得開發(fā)者能夠很好地利用已有的大量的標準 C程序資源與豐富的庫函數(shù),減少重復勞動。Vision3以及 C51與匯編語言的 混合編程 作以介紹。1 第 14章 單片機 C語言 程序設計基礎 2 第 14章 目錄 編程語言 Keil C51簡介 Keil C51簡介 Keil C51的開發(fā)環(huán)境 C51與標準 C的主要區(qū)別 C51語言程序設計基礎 C51語言中的數(shù)據(jù) C51的位變量定義 一個簡單的 C51程序 C51的運算符 C51的分支與循環(huán)程序結(jié)構(gòu) 3 AT89S51不同存儲區(qū)的 C51定義 C51中斷服務函數(shù)的定義 C51的程序設計舉例 中斷程序的編寫 定時器程序的編寫 串行口方式 0應用程序的編寫 獨立式鍵盤查詢方式 行列式鍵盤查詢方式 DAC0832應用程序的編寫 4 ADC0809應用程序的編寫 C51的集成開發(fā)環(huán)境 Keil 181。 6 編程語言 Keil C51簡介 目前 51系列單片機編程的 C語言都采用 Keil C51(簡稱C51), Keil C51是在標準 C語言基礎上發(fā)展起來的 。 8 ( 3)可移植性好。 10 Keil公司目前已推出 C51編譯器 ,為51單片機軟件開發(fā)提供了全新的 C語言環(huán)境,同時保留了匯編代碼高效、快速的特點。Vision3,指的是用于51單片機的 C51程序編寫、調(diào)試的 集成開發(fā)環(huán)境 。Keil C51的基本語法與標準 C相同,但對標準 C進行了擴展。 C語言最初是為通用計算機設計的,在通用計算機中只有一個程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間, 而 51系列單片機 有片內(nèi)、外程序存儲器,還有片內(nèi)、外數(shù)據(jù)存儲器。 ( 6)程序結(jié)構(gòu)的差異 。 注意: 擴展的 4種數(shù)據(jù)類型,不能使用指針對它們存取。 ( 3)特殊功能寄存器 sfr16 “ sfr16”數(shù)據(jù)類型 占用兩個內(nèi)存單元。 bit用來定義普通的位變量,值只能是二進制的 0或 1。 bdata: 片內(nèi)位尋址區(qū) ,位于片內(nèi) RAM位尋址區(qū)20H~2FH。 26 定義 變量類型 應考慮如下問題: 程序運行時該變量可能的取值范圍,是否有負值,絕對值有多大,以及相應需要的存儲空間大小。 另外,通常的單片機應用都是面對小型的控制,代碼比較短,對于程序存儲區(qū)的大小要求很低,常常是片內(nèi)RAM很緊張而片內(nèi) Flash ROM很富裕,因此如果實時性 28 要求不高, 可考慮使用 宏 ,以及將一些子函數(shù)的常量數(shù)據(jù)做成數(shù)據(jù)表,放置在程序存儲區(qū),當程序運行時,進入子函數(shù)動態(tài)調(diào)用下載至 RAM即可,退出子函數(shù)后立即釋放該內(nèi)存空間。 33 1. C51程序與函數(shù) 下面通過一個簡單 C51程序, 認識 C51程序與函數(shù)。 程序的 第 2行 用符號 P10來表示 。}在反匯編時不對應任何語句,即不占用機器周期。 ( 1)標準庫函數(shù) Keil C51具有功能強大、資源豐富的標準庫函數(shù),由C51編譯器提供。如果一個函數(shù)體內(nèi)有多個花括號,則最外層的一對“ { }”為函數(shù)體的范圍。調(diào)用空函數(shù)時, 什么工作也不做,不起任何作用。 46 ( 2)嵌套調(diào)用 是在被調(diào)用的函數(shù)中 又調(diào)用其他函數(shù)的語句 。本節(jié)對 C51中用到的 標準 C運算符進行復習 ,為 C51的程序設計打下基礎。 50 例如: 若 i=4,則執(zhí)行 x=++i時,先使 i加 1,再引用結(jié)果,即 x=5,運算結(jié)果為 i=5, x=5。 邏輯與 ΙΙ 邏輯或 ! 邏輯非 52 表 145 關(guān)系運算符及其說明 符號 說明 大于 小于 = 大于或等于 = 小于或等于 == 等于 != 不等于 53 4. 位運算 位運算符及其說明如 表 146所示。 56 1. 分支結(jié)構(gòu)程序 (1) 只有兩條分支的時候用 If (條件 ) {分支 1} else {分支 2} (2) 分支較多時 在 分支較多時的情況下使用 switch語句。i10。 63 【 例 142】 求 1到 100之間整數(shù)的和。可根據(jù)需要來選擇為 pdata類型或xdata類型。 69 表 143 AT89S51中斷號和中斷向量 AT89S51在內(nèi)部 RAM中有 4個工作寄存器區(qū) ,每個寄存器區(qū)包含 8個工作寄存器( R0R7)。 ( 2)中斷函數(shù)不能進行參數(shù)傳遞, 如果中斷函數(shù)中包含任何參數(shù)聲明都將導致編譯出錯。由 中斷初始化程序 和 中斷服務程序 兩部分組成。在程序剛啟動時,P1口上的 8只 LED亮。s),設定時器 T0的 計數(shù)初值為 X,假設晶振的頻率為 ,則 定時時間 為:定時時間 =(216?X)?12/晶振頻率 則 5000=(216 ?X)?12/ 得: X=60928,轉(zhuǎn)換成 十六 進制后為: 0xee00,其中0xee裝入 TH0, 0x00裝入 TL0。當 STB=1時, A和 B輸入端關(guān)閉,但允許 8位并行數(shù)據(jù)輸出。 單片機外接行列式鍵盤, 用于控制單片機向 FPGA(現(xiàn)場可編程門陣列)發(fā)出指令啟動 AD對信號采樣分析,并控制單片機向 LCD傳輸數(shù)據(jù)以顯示波形和參數(shù)。得到鍵位值后, 進入鍵位服務程序 。 /*延時去抖 */ 101 DelayMs(5)。 /*仍然被按下 */ /*判斷是否真的釋放 */ DelayMs(5)。 case KV_wave: /*“波形顯示”鍵 */ { 104 /*調(diào)用 wave_print(void)子函數(shù) */ } break。 } 106 DAC0832應用程序的編寫 AT89S51與 DAC0832單緩沖方式接口電路如 圖 113所示。 111 最后, *((uchar xdata*)DAC0832Addr)=c0832data意義顯然為:將 c0832data的值寫入 DAC0832的數(shù)據(jù)端口。 【 例 149】 單片機 與 ADC0809的中斷方式通信的接口 電路如 圖 144所示。ADC0809開始轉(zhuǎn)換后 EOC( End Of Converge)腳為低電平,當 A/D轉(zhuǎn)換結(jié)束時 EOC腳變?yōu)楦唠娖?,?jīng)取非后作為中斷請求信號觸發(fā)單片機中斷,在中斷服務程序中讀取A/D轉(zhuǎn)換的結(jié)果。 代碼段一: define DAC0832Addr 0xfffe define uchar unsigned char *((uchar xdata*)DAC0832Addr)=c0832data; 代碼段二: unsigned char *p; p=0xfffe; *p= c0832data; 112 顯然 前者比后者 有兩個優(yōu)點 : 首先,代碼段一的意義明確,可讀性和可移植性更強。參考程序如下: include define DAC0832Addr 0xfffe /* 0832端口地址 */ define uchar unsigned char/*定義 uchar代表單字節(jié)無符號數(shù) */ define uint unsigned int /*定義 uint無符號字 sbit P26=0xA6; /* */ 107 sbit P27=0xA7; /* */ void TransformData(uchar c0832data); /*轉(zhuǎn)換數(shù)據(jù) */ void Delay( ) ; /*執(zhí)行延時函數(shù) */ main( ) /*主函數(shù) */ { uchar cDigital=0; /*待轉(zhuǎn)換的單字節(jié)無符號數(shù)字量初值為 0*/ Delay( ); /*調(diào)用延時程序 */ while(1) /*主體函數(shù)輪詢 */ { TransformData(cDigital); /*調(diào)用數(shù)模轉(zhuǎn)換函數(shù) */ cDigital++; /*輸出鋸齒波轉(zhuǎn)換的數(shù)字量不斷加 1*/ 108 Delay( ); /*調(diào)用延時函數(shù),無參數(shù)傳遞 */ } } void TransformData(uchar c0832data) { *((uchar xdata*)DAC0832Addr)=c0832data; /*向 DAC0832輸出待轉(zhuǎn)換數(shù)字量 c0832data*/ } void Delay() /*延時程序 */ { uint i; for(i=0; i200; i++); } 109 本例說明如下: ( 1)大部分簡單、低速的外圍設備( 例如 2MHz采樣率 AD、 DA、 RS23 RS422/485串口等,而非 DDR2 SDRAM、千兆以太網(wǎng)口等)都是 基于存儲器映射的字符設備 ,對于它們的操作與對于外部存儲器的讀、寫訪問是一樣。 case KV_U_harmon: /*“電壓諧波顯示”鍵 */ { /*調(diào)用 hammon_print子函數(shù) 。 /*key not released*/ 102 break。 keyValue = ~(KEY_PORT | 0xF0)。 100 /*宏定義幾種數(shù)據(jù)類型 */ typedef unsigned char uchar。獨立式4 4鍵盤的接口電路如 下頁 圖 (見第 10章的圖 1010) 。參考程序如下。 81 ( 4)啟動和停止定時器 T0 將定時器控制寄存器 TCON中的 TR0=1,則啟動定時器 T0; TR0=0,則停止定時器 T0定時。 參考程序 : 0INT75 圖 141 控制 8只 LED交替閃爍的電路 76 include void Delay(unsigned int i) /* 定義延時函數(shù) Delay( ), i是形式參數(shù),不能賦初值 */ { unsigned int j; for(; i 0; i ) for(j=0; j333; j++) /*晶振為 12MHz, j的范圍見例 141*/ {; } /*空函數(shù) */ } 77 void main( ) /*主函數(shù) */ { EA=1; /*總中斷允許 */ EX0=1; /*外部中斷 0中斷允許 */ IT0=1; /*選擇外部中斷 0為跳沿觸發(fā)方式 */ While(1) /*循環(huán) */ { P1=0; } /* P1口的 8只 LED全亮 */ } 78 void int0
點擊復制文檔內(nèi)容
畢業(yè)設計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1