MCP定時器產(chǎn)生邊沿PWM輸出:PWM波是一種脈寬可調(diào)的脈沖波,用于交、直流電機的電壓控制。PWM一共有兩種調(diào)整方法,一是定頻調(diào)寬、另一種是定寬調(diào)頻。其中定頻調(diào)寬是種最常見的脈寬調(diào)制方式,它使脈沖波的頻率保持不變,只調(diào)整脈沖寬度。同時定頻調(diào)寬的PWM波形也分為兩種,一種是單邊的PWM,另一種是中心對稱的雙邊PWM。單邊的PWM的生成原理如圖1-2:定時計數(shù)器工作在增計數(shù)方式,在計數(shù)初值設(shè)置為0且比較值小于周期值的條件下,當計數(shù)值和比較值匹配時置位輸出,而在周期匹配時復位輸出,同時清零計數(shù)器,開始下一個循環(huán)。因此單邊PWM的占空比為:%100))((×−TPRNTPR(N為比較匹配數(shù)據(jù),TPR為周期寄存器的值)。比較值的改變只影響PWM的單邊波形,這便是單邊PWM波形的特點。如果比較值為零,那么PWM將一直輸出高電平;如比較值同周期值相等,則PWM會輸出一個時鐘周期的低電平,占空比近似為0;當比較值大于周期值,那么PWM將一直輸出低電平。
上傳時間: 2013-11-07
上傳用戶:moerwang
數(shù)據(jù)類型和運算符、表達式是是C51語言程序設(shè)計的最基礎(chǔ)知識,C51語言把數(shù)據(jù)分成了多種數(shù)據(jù)類型,并提供了豐富的運算對數(shù)據(jù)進行處理。本章對C51語言的基本數(shù)據(jù)類型、常量變量、運算符及表達式等進行詳細介紹。1.掌握數(shù)據(jù)類型的概念,了解C51語言能夠處理的數(shù)據(jù)類型。2.掌握常量的概念,掌握各種類型常量的特點及表示形式。3.掌握變量的概念,了解int、float、char型變量的特點,掌握這三種類型變量的定義、賦值和使用方法。理解C51中變量的存儲和編譯模式的關(guān)系,掌握單片機片內(nèi)資源的訪問方法。4.了解C51語言的基本運算符及其特點,掌握運算符的優(yōu)先級和結(jié)合性的概念。5.了解算術(shù)運算表達式、關(guān)系表達式及邏輯表達式的特點,熟練進行表達式計算,能熟練進行實際問題的表達式描述。6.熟悉自增、自減運算的特點,掌握賦值運算,了解逗號運算符和逗號表達式。7.掌握數(shù)據(jù)類型轉(zhuǎn)換的概念,能進行基本的數(shù)據(jù)類型轉(zhuǎn)換。
標簽: C51
上傳時間: 2013-12-26
上傳用戶:dingdingcandy
單片機接口技術(shù)(C51版)課件:單片機接口技術(shù)(C51版)課件精品課程,該書由張道德根據(jù)多年單片機教學、科研經(jīng)驗編著,中國水利水電出版社2007年3月出版。 1.掌握數(shù)據(jù)類型的概念,了解C51語言能夠處理的數(shù)據(jù)類型。2.掌握常量的概念,掌握各種類型常量的特點及表示形式。3.掌握變量的概念,了解int、float、char型變量的特點,掌握這三種類型變量的定義、賦值和使用方法。理解C51中變量的存儲和編譯模式的關(guān)系,掌握單片機片內(nèi)資源的訪問方法。4.了解C51語言的基本運算符及其特點,掌握運算符的優(yōu)先級和結(jié)合性的概念。5.了解算術(shù)運算表達式、關(guān)系表達式及邏輯表達式的特點,熟練進行表達式計算,能熟練進行實際問題的表達式描述。6.熟悉自增、自減運算的特點,掌握賦值運算,了解逗號運算符和逗號表達式。7.掌握數(shù)據(jù)類型轉(zhuǎn)換的概念,能進行基本的數(shù)據(jù)類型轉(zhuǎn)換。
標簽: C51 單片機接口技術(shù)
上傳時間: 2013-10-10
上傳用戶:jcljkh
設(shè)計一個單片機控制的簡易定時報警器。要求根據(jù)設(shè)定的初始值(1-59秒)進行倒計時,當計時到0時數(shù)碼管閃爍“00”(以1Hz閃爍),按鍵功能如下:(1)設(shè)定鍵:在倒計時模式時,按下此鍵后停止倒計時,進入設(shè)置狀態(tài);如果已經(jīng)處于設(shè)置狀態(tài)則此鍵無效。(2)增一鍵:在設(shè)置狀態(tài)時,每按一次遞增鍵,初始值的數(shù)字增1。(3)遞一鍵:在設(shè)置狀態(tài)時,每按一次遞減鍵,初始值的數(shù)字減1。(4)確認鍵:在設(shè)置狀態(tài)時,按下此鍵后,單片機按照新的初始值進行倒計時及顯示倒計時的數(shù)字。如果已經(jīng)處于計時狀態(tài)則此鍵無效。3.1.2 模塊1:系統(tǒng)設(shè)計(1)任務分析與整體設(shè)計思路根據(jù)題目的要求,需要實現(xiàn)如下幾個方面的功能。計時功能:要實現(xiàn)計時功能則需要使用定時器來計時,通過設(shè)置定時器的初始值來控制溢出中斷的時間間隔,再利用一個變量記錄定時器溢出的次數(shù),達到定時1秒中的功能。然后,當計時每到1秒鐘后,倒計時的計數(shù)器減1。當?shù)褂嫊r計數(shù)器到0時,觸發(fā)另一個標志變量,進入閃爍狀態(tài)。顯示功能:顯示倒計時的數(shù)字要采用動態(tài)掃描的方式將數(shù)字拆成“十位”和“個位”動態(tài)掃描顯示。如果處于閃爍狀態(tài),則可以不需要動態(tài)掃描顯示,只需要控制共陰極數(shù)碼管的位控線,實現(xiàn)數(shù)碼管的滅和亮。鍵盤掃描和運行模式的切換:主程序在初始化一些變量和寄存器之后,需要不斷循環(huán)地讀取鍵盤的狀態(tài)和動態(tài)掃描數(shù)碼管顯示相應的數(shù)字。根據(jù)鍵盤的按鍵值實現(xiàn)設(shè)置狀態(tài)、計時狀態(tài)的切換。 (2)單片機型號及所需外圍器件型號,單片機硬件電路原理圖選用MCS-51系列AT89S51單片機作為微控制器,選擇兩個四聯(lián)的共陰極數(shù)碼管組成8位顯示模塊,由于AT89S51單片機驅(qū)動能力有限,采用兩片74HC244實現(xiàn)總線的驅(qū)動,一個74HC244完成位控線的控制和驅(qū)動,另一個74HC244完成數(shù)碼管的7段碼輸出,在輸出口上各串聯(lián)一個100歐姆的電阻對7段數(shù)碼管限流。由于鍵盤數(shù)量不多,選擇獨立式按鍵與P1口連接作為四個按鍵輸入。沒有鍵按下時P1.0-P1.3為高電平,當有鍵按下時,P1.0-P1.3相應管腳為低電平。電路原理圖如圖3-1所示。
上傳時間: 2013-11-13
上傳用戶:曹云鵬
8051單片機教程:一臺能夠工作的計算機要有這樣幾個部份構(gòu)成:CPU(進行運算、控制)、RAM(數(shù)據(jù)存儲)、ROM(程序存儲)、輸入/輸出設(shè)備(例如:串行口、并行輸出口等)。在個人計算機上這些部份被分成若干塊芯片,安裝一個稱之為主板的印刷線路板上。而在單片機中,這些部份,全部被做到一塊集成電路芯片中了,所以就稱為單片(單芯片)機,而且有一些單片機中除了上述部份外,還集成了其它部份如A/D,D/A等。 PC中的CPU一塊就要賣幾千塊錢,這么多東西做在一起,還不得買個天價!再說這塊芯片也得非常大了。 不,價格并不高,從幾元人民幣到幾十元人民幣,體積也不大,一般用40腳封裝,當然功能多一些單片機也有引腳比較多的,如68引腳,功能少的只有10多個或20多個引腳,有的甚至只8只引腳。為什么會這樣呢? 功能有強弱,打個比方,市場上面有的組合音響一套才賣幾百塊錢,可是有的一臺功放機就要賣好幾千。另外這種芯片的生產(chǎn)量很大,技術(shù)也很成熟,51系列的單片機已經(jīng)做了十幾年,所以價格就低了。 既然如此,單片機的功能肯定不強,干嗎要學它呢? 話不能這樣說,實際工作中并不是任何需要計算機的場合都要求計算機有很高的性能,一個控制電冰箱溫度的計算機難道要用PIII?應用的關(guān)鍵是看是否夠用,是否有很好的性能價格比。所以8051出來十多年,依然沒有被淘汰,還在不斷的發(fā)展中。 2、MCS51單片機和8051、8031、89C51等的關(guān)系我們平常老是講8051,又有什么8031,現(xiàn)在又有89C51,它們之間究竟是什么關(guān)系? MCS51是指由美國INTEL公司(對了,就是大名鼎鼎的INTEL)生產(chǎn)的一系列單片機的總稱,這一系列單片機包括了好些品種,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的產(chǎn)品,該系列其它單片機都是在8051的基礎(chǔ)上進行功能的增、減、改變而來的,所以人們習慣于用8051來稱呼MCS51系列單片機,而8031是前些年在我國最流行的單片機,所以很多場合會看到8031的名稱。INTEL公司將MCS51的核心技術(shù)授權(quán)給了很多其它公司,所以有很多公司在做以8051為核心的單片機,當然,功能或多或少有些改變,以滿足不同的需求,其中89C51就是這幾年在我國非常流行的單片機,它是由美國ATMEL公司開發(fā)生產(chǎn)的。以后我們將用89C51來完成一系列的實驗。
上傳時間: 2013-11-17
上傳用戶:crazyer
單片機基礎(chǔ)知識單片機的外部結(jié)構(gòu):1、 DIP40雙列直插;2、 P0,P1,P2,P3四個8位準雙向I/O引腳;(作為I/O輸入時,要先輸出高電平)3、 電源VCC(PIN40)和地線GND(PIN20);4、 高電平復位RESET(PIN9);(10uF電容接VCC與RESET,即可實現(xiàn)上電復位)5、 內(nèi)置振蕩電路,外部只要接晶體至X1(PIN18)和X0(PIN19);(頻率為主頻的12倍)6、 程序配置EA(PIN31)接高電平VCC;(運行單片機內(nèi)部ROM中的程序)7、 P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 單片機內(nèi)部I/O部件:(所為學習單片機,實際上就是編程控制以下I/O部件,完成指定任務)1、 四個8位通用I/O端口,對應引腳P0、P1、P2和P3;2、 兩個16位定時計數(shù)器;(TMOD,TCON,TL0,TH0,TL1,TH1)3、 一個串行通信接口;(SCON,SBUF)4、 一個中斷控制器;(IE,IP)針對AT89C52單片機,頭文件AT89x52.h給出了SFR特殊功能寄存器所有端口的定義。教科書的160頁給出了針對MCS51系列單片機的C語言擴展變量類型。 C語言編程基礎(chǔ):1、 十六進制表示字節(jié)0x5a:二進制為01011010B;0x6E為01101110。2、 如果將一個16位二進數(shù)賦給一個8位的字節(jié)變量,則自動截斷為低8位,而丟掉高8位。3、 ++var表示對變量var先增一;var—表示對變量后減一。4、 x |= 0x0f;表示為 x = x | 0x0f;5、 TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變量TMOD的低四位賦值0x5,而不改變TMOD的高四位。6、 While( 1 ); 表示無限執(zhí)行該語句,即死循環(huán)。語句后的分號表示空循環(huán)體,也就是{;}第一章 單片機最小應用系統(tǒng):單片機最小系統(tǒng)的硬件原理接線圖:1、 接電源:VCC(PIN40)、GND(PIN20)。加接退耦電容0.1uF2、 接晶體:X1(PIN18)、X2(PIN19)。注意標出晶體頻率(選用12MHz),還有輔助電容30pF3、 接復位:RES(PIN9)。接上電復位電路,以及手動復位電路,分析復位工作原理4、 接配置:EA(PIN31)。說明原因。第二章 基本I/O口的應用第三章 顯示驅(qū)動第七章 串行接口應用
標簽: 單片機
上傳時間: 2013-10-30
上傳用戶:athjac
C語言編程基礎(chǔ):1. 十六進制表示字節(jié)0x5a:二進制為01011010B;0x6E為01101110。 2. 如果將一個16位二進數(shù)賦給一個8位的字節(jié)變量,則自動截斷為低8位,而丟掉高8位。 3. ++var表示對變量var先增一;var—表示對變量后減一。 4. x |= 0x0f;表示為 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變量TMOD的低四位賦值0x5,而不改變TMOD的高四位。 6. While( 1 ); 表示無限執(zhí)行該語句,即死循環(huán)。語句后的分號表示空循環(huán)體,也就是{;} 在某引腳輸出高電平的編程方法:(比如P1.3(PIN4)引腳)1. #include <AT89x52.h> //該頭文檔中有單片機內(nèi)部資源的符號化定義,其中包含P1.3 2. void main( void ) //void 表示沒有輸入?yún)?shù),也沒有函數(shù)返值,這入單片機運行的復位入口 3. { 4. P1_3 = 1; //給P1_3賦值1,引腳P1.3就能輸出高電平VCC 5. While( 1 ); //死循環(huán),相當 LOOP: goto LOOP; 6. } 注意:P0的每個引腳要輸出高電平時,必須外接上拉電阻(如4K7)至VCC電源。在某引腳輸出低電平的編程方法:(比如P2.7引腳)代碼1. #include <AT89x52.h> //該頭文檔中有單片機內(nèi)部資源的符號化定義,其中包含P2.7 2. void main( void ) //void 表示沒有輸入?yún)?shù),也沒有函數(shù)返值,這入單片機運行的復位入口 3. { 4. P2_7 = 0; //給P2_7賦值0,引腳P2.7就能輸出低電平GND 5. While( 1 ); //死循環(huán),相當 LOOP: goto LOOP; 6. } 在某引腳輸出方波編程方法:(比如P3.1引腳)代碼1. #include <AT89x52.h> //該頭文檔中有單片機內(nèi)部資源的符號化定義,其中包含P3.1 2. void main( void ) //void 表示沒有輸入?yún)?shù),也沒有函數(shù)返值,這入單片機運行的復位入口 3. { 4. While( 1 ) //非零表示真,如果為真則執(zhí)行下面循環(huán)體的語句 5. { 6. P3_1 = 1; //給P3_1賦值1,引腳P3.1就能輸出高電平VCC 7. P3_1 = 0; //給P3_1賦值0,引腳P3.1就能輸出低電平GND 8. } //由于一直為真,所以不斷輸出高、低、高、低……,從而形成方波 9. } 將某引腳的輸入電平取反后,從另一個引腳輸出:( 比如 P0.4 = NOT( P1.1) )
上傳時間: 2013-11-02
上傳用戶:zengduo
針對H.264的可伸縮視頻編碼擴展標準(SVC)在噪聲信道中的傳輸,采用低密度奇偶校驗碼(LDPC)提出一種非均衡差錯保護的方案。在所提的方案中,根據(jù)時間、分辨率和質(zhì)量把原視頻序列按重要性分成不同的層。由于不同層的數(shù)據(jù)對錯誤的敏感性不同,對其進行不同碼率的LDPC信道編碼,實現(xiàn)非均衡差錯保護。根據(jù)視頻流中每一幀不同層的PSNR增量不同,和不同信道碼率下正確解碼的概率不同,反復計算每一幀所有碼率組合的PSNR增量值并找出最大組,從而進行信道編碼并傳輸。實驗表明,在相同的平均碼率條件下,提出的方案相比其他方案的PSNR值增加了2.8 dB,更適合無線信道的傳輸。
上傳時間: 2013-10-13
上傳用戶:xitai
附件是一款PCB阻抗匹配計算工具,點擊CITS25.exe直接打開使用,無需安裝。附件還帶有PCB連板的一些計算方法,連板的排法和PCB聯(lián)板的設(shè)計驗驗。 PCB設(shè)計的經(jīng)驗建議: 1.一般連板長寬比率為1:1~2.5:1,同時注意For FuJi Machine:a.最大進板尺寸為:450*350mm, 2.針對有金手指的部分,板邊處需作掏空處理,建議不作為連板的部位. 3.連板方向以同一方向為優(yōu)先,考量對稱防呆,特殊情況另作處理. 4.連板掏空長度超過板長度的1/2時,需加補強邊. 5.陰陽板的設(shè)計需作特殊考量. 6.工藝邊需根據(jù)實際需要作設(shè)計調(diào)整,軌道邊一般不少於6mm,實際中需考量板邊零件的排布,軌道設(shè)備正常卡壓距離為不少於3mm,及符合實際要求下的連板經(jīng)濟性. 7.FIDUCIAL MARK或稱光學定位點,一般設(shè)計在對角處,為2個或4個,同時MARK點面需平整,無氧化,脫落現(xiàn)象;定位孔設(shè)計在板邊,為對稱設(shè)計,一般為4個,直徑為3mm,公差為±0.01inch. 8.V-cut深度需根據(jù)連板大小及基板板厚考量,角度建議為不少於45°. 9.連板設(shè)計的同時,需基於基板的分板方式考量<人工(治具)還是使用分板設(shè)備>. 10.使用針孔(郵票孔)聯(lián)接:需請考慮斷裂后的毛刺,及是否影響COB工序的Bonding機上的夾具穩(wěn)定工作,還應考慮是否有無影響插件過軌道,及是否影響裝配組裝.
上傳時間: 2014-12-31
上傳用戶:sunshine1402
注:1.這篇文章斷斷續(xù)續(xù)寫了很久,畫圖技術(shù)也不精,難免錯漏,大家湊合看.有問題可以留言. 2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調(diào)制波,通過調(diào)整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調(diào)制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調(diào)光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數(shù)字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調(diào)壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現(xiàn)難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調(diào)整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設(shè)PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現(xiàn)難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環(huán)可以看出,完成一個PWM 周期,共循環(huán)255 次。 假設(shè)bright=100 時候,在第0~100 次循環(huán)中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環(huán)里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環(huán)是高電平,155 次循環(huán)是低電平。 如果忽略指令執(zhí)行時間的話,這次的PWM 波形占空比為100/255,如果調(diào)整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設(shè)置了每次for 循環(huán)之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風格完全不同。不過對于驅(qū)動一個LED 來說,效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個For 循環(huán)。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數(shù)字IO 口變成PWM 引腳。 當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設(shè)置 int StartPWMPin = 0, EndPWMPin = 13; //設(shè)置D0~D13為PWM 引腳 int PWMResolution = 255; //設(shè)置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環(huán)是為14盞燈做漸亮的。每次Arduino loop()循環(huán), //brights 自增一次。直到brights=255時候,將brights 置零重新計數(shù)。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數(shù)一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\ 所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調(diào)整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
上傳時間: 2013-10-08
上傳用戶:dingdingcandy
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1