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

正文內(nèi)容

單片機(jī)第14章c語(yǔ)言程序設(shè)計(jì)-免費(fèi)閱讀

  

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