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

正文內(nèi)容

c專家編程總結(jié)(編輯修改稿)

2024-10-21 05:15 本頁面
 

【文章內(nèi)容簡介】 調(diào)用。1函數(shù)不使用using 時,所使用寄存器組保持與此函數(shù)被調(diào)用前相同,不對RS0和RS1的值進行修改;當(dāng)使用了using 關(guān)鍵字后,此函數(shù)所使用的寄存器組與using所定義的一樣。1當(dāng)指定中斷程序的工作寄存器組時,保護工作寄存器的工作就可以被省略。使用關(guān)鍵 字using 后跟一個0 到3 的數(shù)對應(yīng)著4 組工作寄存器當(dāng)指定工作寄存器組的時候默 認的工作寄存器組就不會被推入堆棧這將節(jié)省32 個處理周期,因為入棧和出棧都需要2 個處理周期。為中斷程序指定工作寄存器組的缺點是所有被中斷調(diào)用的過程都必須使用 同一個寄存器組否則參數(shù)傳遞會發(fā)生錯誤。1如何使用pdata 類型的變量?當(dāng)要使用到pdata 類型的變量,如下: void main(void){ uchar pdata a。a=0x01。}則需要進行如下設(shè)置,否則pdata 的變量a則會無效。a、。默認時,PPAGEENALBE為0,表示不允許pdata類型的變量,須將其值改為1;PPAGE表示pdata類型的變量存儲在哪一頁,01H表示存放在外部存儲器的第1頁,地址范圍100H至1FFH。此項設(shè)置需和BL51連接器的設(shè)置一致。b、修改BL51連接器。,如下圖。圖中Pdata的值可以填寫100H至1FFH中任意一個,表示pdata類型的變量從所填寫的值開始存儲。例如,當(dāng)Pdata填寫的值為108H時,表示pdata類型的變量從108H開始存儲,因此,存儲范圍變?yōu)榱?08H至1FFH。另外,存儲模式Compact的作用是將沒有指定存儲類型的變量定義為pdata類型,對uchar pdata a。變量的定義沒有影響,但對uchar a。則有影響。1XBYTE的用法。XBYTE存在于include 頭文件中。XBYTE[0x000F]=data; // 此語句表示將data寫到外部RAM中的0x000F data=XBYTE[0x000F] // 此語句表示讀取外部RAM中0x000F的數(shù)據(jù) 以下語句與上面的語句等效:define EX_RAM XBYTE[0x000F] //將EX_RAM定義為外部RAM的地址0x000F EX_RAM=data。// 此語句表示將data寫到外部RAM中的0x000F data=EX_RAM // 此語句表示讀取外部RAM中0x000F的數(shù)據(jù)1如何在keil中用匯編實現(xiàn)51中沒有的指令部分MCU與8051兼容,但會增加8051中沒有的指令,如華邦的W77E58和N79E352等芯片,具有8051中沒有的指令DEC DPTR。如何才Keil中實現(xiàn)此指令呢? 方法1:在需要執(zhí)行該指令的地方放置相應(yīng)的機器碼 MAIN:MOV DPTR,02H DB 0A5H。由于從數(shù)據(jù)手冊上得知,DEC DPTR的機器碼為0A5H,故此處相當(dāng)于執(zhí)行了DEC DPTR指令。AJMP $ END方法2:使用宏定義的方法/*宏定義,表示用DEC_DPTR代替MACRO與ENDM之間的內(nèi)容*/ DEC_DPTR MACRODB 0A5H。此處不能與MACRO同一行 ENDMMAIN: MOV DPTR,02H DEC_DPTR。放置機器碼0A5H,相當(dāng)于執(zhí)行DEC DPTR AJMP $ END通過將以上兩種方法生成的hex文件調(diào)入到編程器中,發(fā)現(xiàn)代碼一樣。經(jīng)測試,同樣可以用以上兩種方法代替8051中已有的指令。例如,從數(shù)據(jù)手冊可知,MOV A,0FH的長度為2字節(jié),機器碼的值為74H,0FH。因此,經(jīng)驗證,以下三個程序等效,產(chǎn)生的HEX文件一樣 MAIN: MOV A,55H DB 74H DB 0FH MOV P1,A AJMP $ ENDMAIN: MOV A,55H MOV A,0FH MOV P1,A AJMP $ ENDTEST MACRO DB 74H DB 0FH ENDM MAIN: MOV A,55H TEST MOV P1,A AJMP $ END1匯編中包含頭步驟:例如,T2CON為定時器2的特殊功能寄存器,地址為0C8H,要對此寄存器賦值01H,除了MOV 0C8H,01H 和T2CON EQU 0C8H MOV T2CON,01H 外,還有用包含頭文件的方法 include MOV T2CON,01H 此時,需要將A51中的“Defines 8051 SFR Names”的勾去掉。1指針C51 提供一個3 字節(jié)的通用存儲器指針。通用指針的頭一個字節(jié)表明指針所指的存儲 區(qū)空間,另外兩個字節(jié)存儲16 位偏移量。對于DATA IDATA 和PDATA 段只需要8 位偏移量。Keil 允許使用者規(guī)定指針指向的存儲段,這種指針叫具體指針。使用具體指針的好處是節(jié)省了存儲空間編譯器不用為存儲器選擇和決定正確的存儲器操作指令產(chǎn)生代碼這樣就使代碼更加簡短但你必須保證指針不指向你所聲明的存儲區(qū)以外的地方否則會產(chǎn)生錯誤而且很難調(diào)試。由于使用具體指針能夠節(jié)省不少時間所以我們一般都不使用通用指針。EEPROM存放開關(guān)機(復(fù)位)次數(shù)方法:每次開機(復(fù)位)讀取EEPROM存放開關(guān)機的數(shù)據(jù),并加1后重新寫入EEPROM。2C51中,將printf函數(shù)與串口輸出結(jié)合注意事項:a、關(guān)串口中斷;b、初始化串口,并使TI=1;c、KEIL里擴展出了b(8位),h(16位),l(32位)來對輸入字節(jié)寬的設(shè)置在Keil C51中用printf輸出一個單字節(jié)變量時要使用%bd,若使用%d,則默認為雙字節(jié)寬度,輸出可能會出錯。如unsigned char counter。printf(“Current count: %bdn”, counter)。而在標準C語言中都是使用%d: printf(“Current count: %dn”, counter)。d、輸出數(shù)據(jù)類型的長度應(yīng)與定義的數(shù)據(jù)類型長度一致,如:uint tem2=97。printf(“%c,%bdn”,tem2,tem2)。第一個輸出會出錯。2我一般不刻意的注意這個,都是從軟件自身找問題的。我寫程序時對于軟件抗干擾都是在程序狀態(tài)上考慮意外情況的,例如:if(a == 1){...} else if(a == 2){....} else{//這個else 一定得加的,即使自己認為不可能出現(xiàn)的情況也要加上..//經(jīng)過好多程序走飛的情況發(fā)現(xiàn):大多情況都是缺少這個語句條件的,這 //語句可以寫成重新初始化a } 還有程序出現(xiàn)堆棧比較深的運算(例如浮點乘除法后)或中斷比較深,我加2個_nop_()。2STC12C5410AD外部RAM使用方法:,如下圖。2中斷嵌套當(dāng)有外部中斷0時,中斷標志位IE0由硬件自動置1,進入中斷服務(wù)程序后,IE0被自動清0。若外部中斷0觸發(fā)信號在執(zhí)行完中斷服務(wù)程序后仍沒有撤除,就會再次使已經(jīng)變0的中斷標志位IE0置1,再次進入中斷服務(wù)程序;若在響應(yīng)中斷服務(wù)程序期間,再次產(chǎn)生外部中斷0觸發(fā)信號時,此中斷不能被識別,因為CPU在響應(yīng)中斷時會自動關(guān)閉同一中斷。如果外部中斷0比外部中斷1的優(yōu)先級高,當(dāng)在響應(yīng)外部中斷0期間產(chǎn)生外部中斷1時,如果執(zhí)行完外部中斷0后,外部中斷1的中斷請求標志位IE1仍沒有清除的話,將會響應(yīng)外部中斷1的請求;但是如果在響應(yīng)外部中斷0期間,外部中斷1的觸發(fā)信號產(chǎn)生后又撤除的話,IE1也會自動清除,也就是說,執(zhí)行完外部中斷0后,不會去響應(yīng)外部中斷1。當(dāng)多個中斷源同時向CPU請求中斷時,CPU就可以通過中斷優(yōu)先權(quán)電路率先響應(yīng)中斷優(yōu)先權(quán)高的中斷請求,而把中斷優(yōu)先權(quán)低的中斷請求暫時擱置起來,等到處理完優(yōu)先權(quán)高的中斷請求后再來響應(yīng)優(yōu)先權(quán)低的中斷。如果某一中斷源提出中斷請求后,CPU不能立即響應(yīng),只要該中斷請求標志位不被軟件人為清除,中斷請求的狀態(tài)就將一直保持,直到CPU響應(yīng)中斷為止。但是對于串行口中斷,即使CPU響應(yīng)了中斷,其中斷標志位RI/TI也不會自動清零,而必須在中斷服務(wù)程序中設(shè)置清除RI/TI的指令后,才會再一次地提出中斷請求。2在滿足應(yīng)用要求的前提下,選擇配較低的單片機,較小的RAM/ROM、較低的ADC分辨率、較低的ADC速率,較少的IO管腳都可以降低單片機的整體功耗。當(dāng)然了,這個得能滿足你產(chǎn)品需求的前提下。2對于一個數(shù)字系統(tǒng)而言,其功耗大致滿足公式:P=CV2f。其中C為系統(tǒng)的負載電容,V為電源電壓,f為系統(tǒng)工作頻率[2]。功耗與電源電壓的平方成正比,因此電源電壓對系統(tǒng)的功耗影響最大,其次是工作頻率,再次就是負載電容。負載電容對設(shè)計人員而言,一般是不可控的,因此設(shè)計一個低功耗系統(tǒng),在不影響系統(tǒng)性能的前提下,盡可能地降低電源的電壓和工作頻率。對于大多數(shù)低功耗單片機來說,工作頻率越低,意味著消耗的電流也越小,但是不能認為頻率越低,系統(tǒng)整體功耗越小,因為工作頻率降低,意味著需要更長的處理時間,其他外圍電路消耗的電能就越多。目前有很多單片機都允許有兩個或者兩個以上的時鐘源,低頻時鐘作為如UART、定時器等外圍功能器件的時鐘源,高頻時鐘作為系統(tǒng)的主時鐘。在不需要高速運行的場合下,低頻時鐘也可以作為系統(tǒng)主時鐘使用。對于需要在工作狀態(tài)與空閑狀態(tài)之間頻繁切換的應(yīng)用,在考慮單片機本身低功耗的同時,應(yīng)該考慮切換時間和切換電流??紤]到有些場合單片機的工作特點,選擇單片機不光要關(guān)注工作電流,更應(yīng)該關(guān)注單片機休眠時的靜態(tài)電流。單片機豐富的低功耗模式和極低的靜態(tài)電流,在滿足特定應(yīng)用功能的同時,有效降低系統(tǒng)的功耗。盡量關(guān)閉MCU內(nèi)部不用的資源,比如ATmega8內(nèi)部的模擬比較器,默認是開著的,還有ATmega88內(nèi)部的大多數(shù)資源都可以在不用的時候用軟件關(guān)閉。2定時/ 計數(shù)器的實時性定時/ 計數(shù)器啟動計數(shù)后,當(dāng)計滿回0 溢出向主機請求中斷處理,由內(nèi)部硬件自動進行。但從回0 溢出請求中斷到主機響應(yīng)中斷并作出處理存在時間延遲,且這種延時隨中斷請求時的現(xiàn)場環(huán)境的不同而不同,一般需延時3 個機器周期以上,這就給實時處理帶來誤差差。大多數(shù)應(yīng)用場合可忽略不計,但對某些要求實時性苛刻的場合,可采用動態(tài)補償措施。所謂動態(tài)補償,即在中斷服務(wù)程序中對THx、TLx 重新置計數(shù)初值時,應(yīng)將THx、TLx 從回0 溢出又重新從0 開始繼續(xù)計數(shù)的值讀出,并補償?shù)皆嫈?shù)初值中去進行重新設(shè)置??煽紤]如下補償方法: CLR EA ;禁止中斷MOV A,T L x ;讀TLx 中已計數(shù)值 ADD A,LOW ;LOW 為原低字節(jié)計數(shù)初值 MOV T L x,A ;設(shè)置低字節(jié)計數(shù)初值 MOV A,HIGH ;原高字節(jié)計數(shù)初值送A ADDC A,T H x ;高字節(jié)計數(shù)初值補償 MOV T H x,A ;置高字節(jié)計數(shù)初值 SETB EA ;開中斷2動態(tài)讀取運行中的定時器/計數(shù)值在動態(tài)讀取運行中的定時/ 計數(shù)器的計數(shù)值時,如果不加注意,就可能出錯。這是因為不可能在同一時刻同時讀取THx 和TLx 中的計數(shù)值。比如,先讀TLx 后讀THx,因為定時/ 計數(shù)器處于運行狀態(tài),在讀TLx 時尚未產(chǎn)生向THx 進位,而在讀THx 前已產(chǎn)生進位,這時讀得的THx 就不對了;同樣,先讀THx 后讀TLx 也可能出錯。一種可避免讀錯的方法是:先讀THx,后讀TLx,將兩次讀得的THx 進行比較;若兩次讀得的值相等,則可確定讀的值是正確的,否
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1