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

正文內容

單片機第14章c語言程序設計-免費閱讀

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

下一頁面
  

【正文】 單片機 采用 中斷方式 讀取 A/D轉換后的數據。 因此, 以下兩個代碼段在功能上是等價的 。 【 例 148】 根據 圖 113的接口電路,編寫產生如 圖114所示鋸齒波的程序。 case KV_parameter: /* “參數顯示”鍵 */ { /*調用 parameter_print()子函數 */ } break。 if(~(KEY_PORT | 0xF0) != 0) continue。 /*檢測是否仍有鍵按下并獲取 P1口鍵位列號 */ KEY_PORT = 0x0F。 98 頭文件 : ifndef KEY_H include include define KEY_H define KEY_PORT P1 define KV_FALSE 0Xff /*無鍵按下 * / /*宏定義鍵位值 * / define KV_START 0x11 /*“開始采樣”鍵 * / define KV_END 0x12 /*“結束采樣”鍵 * / define KV_wave 0x14 /*“顯示波形”鍵 */ define KV_parameter 0x18 /*“顯示基本參數”鍵 */ 99 define KV_U_harmon 0x21 /*“顯示電壓諧波分析”鍵 */ define KV_I_harmon 0x22 /*“顯示電流諧波分析”鍵 * / define KV_7 0x24 /*未使用的按鍵,下同 */ define KV_8 0x28 define KV_9 0x41 define KV_10 0x42 define KV_11 0x44 define KV_12 0x48 define KV_13 0x81 define KV_14 0x82 define KV_15 0x84 define KV_16 0x88 uchar KeyScan(void)。 采用查詢方式 對實現(xiàn)行列式鍵盤的鍵值讀取。 85 當 8位串行數據發(fā)送完畢后,引起中斷,在中服務程序中,串行發(fā)出下一個 8位數據。 ( 3)設置 IE寄存器 本例由于采用定時器 T0中斷,因此需將 IE寄存器中的EA、 ET0位置 1。按一次按鈕開關 K1,使引腳 地,產生一個外中斷 0的中斷請求,在中斷服務程序中,讓低 4位 LED和 高 4位 LED交替閃爍 。 中斷初始化程序 的位置位于主程序中,主要包括 選擇外部中斷的觸發(fā)方式、開中斷、設置中斷優(yōu)先級 等。 INT172 ( 3)在任何情況下都不能直接調用中斷函數, 否則會產生編譯錯誤。 C51擴展了一個 關鍵字 using,專門用來 選擇 AT89S51的 4個不同的工作寄存器區(qū) 。 對于 片外擴展的 I/O端口 ,根據硬件譯碼地址,將其看作片外 RAM的一個單元,使用 語句 define進行定義 。 程序如下: include include main( ) { int nVar1, nSum; for(nVar1=0,nSum=1; nSum=100; nSum++) nVar1+ =nCount; /*累加求和 */ while(1); } 64 關于循環(huán),需說明的是,在無操作系統(tǒng)的控制器和處理器上運行的程序, 主體通常采用 輪詢方式 ,即把所有的操作包含在一個 while(1){}中,如例 141。i++)對應的匯編語句為: 60 CLR A ; 1個機器周期 MOV R7,A ; 2個機器周期 LOOP: INC R7 ; 1個機器周期 CJNE R7, 0AH, LOOP ; 2個機器周期 而 for (i=2。 57 switch ( ) { case( ):語句; break; case( ):語句; break; ………… default:語句; break; } 58 注意: 每個 switch分支必須有一個 break語句, 否則程序并不能跳出 switch,就會繼續(xù)執(zhí)行 case后面的 case語句。 表 146 位運算其說明 符號 說明 amp。 再如: 若 i=4,則執(zhí)行 x=i++時,先引用 i值,即 x=4,再使 i加 1,運算結果為 i=5, x=4。 1. 算術運算符 如 表 143所示。 ( 3)遞歸調用 函數的遞歸調用就是一個函數在其函數體內有調用自身。 定義空函數的 目的 ,是 為以后程序功能的擴充 。 C51區(qū)分大小寫 ,例如 Delay與 delay,編譯時是不同的兩個名稱。進行程序設計時,應該善于充分利用 41 這些功能強大、資源豐富的標準庫函數,提高編程效率。因而,該 for循環(huán)共需 1+2+333*(1+2)=1002個機器周期,約為 1ms。在 C51中,如果直接寫“ ”編譯器并不能識別,而且 個合法的 C51語言程序變量名,所以必須給它起一個另外的名字,這里起的名字是 P10,可是 P10是否就是 ,所以必須給它們建立聯(lián)系,這里 使用了 C51的 關鍵字 “ sbit”來進行定義。 【 例 141】 在 AT89S51的 接有一只發(fā)光二極管,二極管的陰極接 ,陽極通過限流電阻接 +5V,現(xiàn)在讓發(fā)光二極管每隔 800ms閃滅,占空比為 50%。 29 C51的位變量定義 由于 AT89C51能夠進行位操作, C51擴展了“ bit”數據類型用來定義位變量,這是 C51與標準 C的不同之處。在夠用的情況下,盡量選擇 8位即一個字節(jié)的 char型,特別是 unsiged char。 idata: 片內間接尋址區(qū) ,片內 RAM所有地址單元 ( 00H~FFH)。而 sbit定義的是特殊功能 22 寄存器的可尋址位, 其值是可進行位尋址的特殊功能寄存器的位絕對地址, 例如 PSW寄存器 OV位的絕對地址0xd2。 sfr16和 sfr一樣用于操作特殊功能寄存器。 18 表 141 Keil C51支持的數據類型 數據類型 位數 字節(jié)數 取值范圍 signed char 8 1 128~+127, 有符號字符變量 unsigned char 8 1 0~255, 無符號字符變量 signed int 16 2 32768~+32767, 有符號整型數 unsigned int 16 2 0~65535, 無符號整型數 signed long 32 4 2147483648~+2147483647, 有符號長整型數 unsigned long 32 4 0~+4294967295, 無符號長整型數 float 32 4 177。由于 51單片機的硬件資源有限,它的編譯系統(tǒng)不允許太多的程序嵌套。 標準 C并沒有提供這部分存儲器的地址范圍的定義。 深入理解 Keil C51對標準 C的 擴展部分 是掌握 Keil C51的關鍵之一。 181。 現(xiàn)在, Keil C51已被 完全集成 到一個功能強大的全新集成開發(fā)環(huán)境( IDE) 181。 為某種型號單片機開發(fā)的 C語言程序,只需將與硬件相關之處和編譯連接的參數進行適當修改,就可以方便地移植到其他型號的單片機上。 Keil C51簡介 C語言是美國國家標準協(xié)會( ANSI)制定的編程語言標準, 1987年 ANSI公布 87 ANSI C,即標準 C語言。Vision3介紹 集成開發(fā)環(huán)境 Keil 181。最后還對 C51的集成開發(fā)環(huán)境 Keil 181。 ( 2)模塊化開發(fā)與資源共享 。 Keil C51在兼容 ANSI C的基礎上,又增加很多與 51單片機硬件相關的編譯特性,使得開發(fā) 51系列單片機程序更為方便和快捷,程序代碼運行速度快,所需存儲器空間小,完全可以和匯編語言相媲美。Keil C51一般 簡寫為 C51,指的是 51單片機編程所用的 C語言;而 Keil 181。 12 在 用戶目標板調試方式 下,利用硬件目標板中的監(jiān)控程序可以直接調試目標硬件系統(tǒng),使用戶節(jié)省購買硬件仿真器的費用。 51系列單片機包含位操作空間和豐富的位操作指令,因此 Keil C51與 ANSI C相比又擴展了4種類型,以便能夠靈活地進行操作。 15 有一些庫函數可以繼續(xù)使用, 但這些庫函數都必須針對 51單片機的硬件特點來作出相應的開發(fā),與標準 C庫函數的構成與用法有很大的不同。 C51語言中的數據 1. 數據類型 Keil C51的基本數據類型如 表 141所示。利用它可訪問 AT89S51內部的所有特殊功能寄存器。 例如: sfr PSW=0xd0 ; /*定義 PSW寄存器地址為 0xd0*/ sbit PSW ^2 = 0xd2 ; /*定義 OV位為 */ 符號“ ^”前面是特殊功能寄存器的名字,“ ^”的后面數字定義特殊功能寄存器可尋址位在寄存器中的位置,取值必須是 0~7。下面對 表 142作以說明。 在資源有限的條件下,如何節(jié)省存儲單元并保證運行效率,是對開發(fā)者的一個考驗。 選擇外部數據存儲器可 先選擇 pdata類型 , 最后選用 xdata類型 。 一個 C51源程序無論包含了多少函數,它 總是從 main()函數 開始執(zhí)行 , 不論 main()函數 位于程序的什么位置 。 37 打開 “ sfr P1=0x90;”, 即定義符號 P1與地址 0x90對應,而 P1口的地址就是 0x90。j++) {。 2. 用戶自定義函數與庫函數 從結構上劃分,函數分為 主函數 main ( )和 普通函數兩種。 42 函數的 首部(函數的第 1行), 包括函數名、函數類型、函數屬性、函數參數(形式參數)名、參數類型。 例如, 例 141中的 第 3行 的“ i” 是 形式參數 。調用分為以下幾種。 ? 在參數的傳遞上,實際參數可以傳遞給間接調用的再入函數。 ++i, i:在使用 i之前,先使 i值加(減) 1。 符號 說明 amp。順序結構是程序的基本結構,程序自上而下,從main()的函數開始一直到程序運行結束,程序只有一條路可走,沒有其他的路徑可以選擇。 這里有一個值得注意的現(xiàn)象,能夠反映出 C51在編譯中對于執(zhí)行時間和占用的存儲單元的權衡。 三種循環(huán)中,經常使用的是 for語句 。 66 注意: AT89S51片內的 4個并行 I/O口( P0~P3),都是 SFR, 故對 P0~P3采用 定義 SFR的方法 。 中斷服務函數的一般形式為: 函數類型 函數名(形式參數表) [interrupt n] [using n] 關鍵字 interrupt后面的 n是 中斷號 ,對于 AT89S51,取值為 0~4,編譯器 從 8 n+3處產生中斷向量 。 71 例如 , 外中斷 1( ) 的中斷服務函數書寫如下: void int1( ) interrupt 2 using 0/*中斷號 n=2,選擇 0區(qū)工作寄存器區(qū) */ 編寫 AT89S51中斷程序時,應遵循以下規(guī)則 : ( 1)中斷函數沒有返回值 , 如果定義了一個返回值,將會得到不正確的結果。 73 C51的程序設計舉例 本節(jié)重點介紹對 AT89S51片內各種功能部件及硬件接口的 C51例程 ,讀者應仔細閱讀并理解這些例程。接口電路如 圖 141所示。所以, TMOD寄存器 應初始化為 0x01。圖中 CLK端為同步脈沖輸入端。 例如, 3號鍵按下,則 在 PC機顯示屏上顯示“ key No. 3 down”。 先獲取鍵位列號: 按照之前的驅動方式對 P1口驅動高半字節(jié)為全 0,低半字節(jié)全 1,讀回 P1口的低半字節(jié)值。 /*檢測是否有鍵按下 */ KEY_PORT = 0x0F。 /*等待按鍵釋放 */ do { KEY_PORT = 0x0F。 */ } 103 break。 default: break。 這種方法(例 147程序中陰影標注一行)是較為經典和精簡的代碼風格,初學者可以用如下拆分、等價的方式理解這句代碼: 首先, 由于宏替換, (uchar xdata*)DAC0832Addr相當于 (uchar xdata*) 0xfffe,即將 0xfffe強制轉換為指向外部數據空間的 unsigned char類型的指針,指針內容為0xfffe,即指向了 DAC0832數據端口。 當 cDig
點擊復制文檔內容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1