www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]編者按:為了幫助具有PIC單片機(jī)匯編語(yǔ)言知識(shí)的技術(shù)人員或工程師,快速掌握利用C語(yǔ)言編寫PIC單片機(jī)程序的方法,本刊特推出《PIC單片機(jī)C語(yǔ)言程序設(shè)計(jì)》系列連載文章。丈中給出的C語(yǔ)言程序?qū)嵗强蓤?zhí)行的,讀者可以

編者按:為了幫助具有PIC單片機(jī)匯編語(yǔ)言知識(shí)的技術(shù)人員或工程師,快速掌握利用C語(yǔ)言編寫PIC單片機(jī)程序的方法,本刊特推出《PIC單片機(jī)C語(yǔ)言程序設(shè)計(jì)》系列連載文章。丈中給出的C語(yǔ)言程序?qū)嵗强蓤?zhí)行的,讀者可以放心引用。

  一、匯編語(yǔ)言與C語(yǔ)言

  早期的單片機(jī)程序多采用匯編語(yǔ)言編寫。用匯編語(yǔ)言編程,直接、簡(jiǎn)捷,可有效地訪問和控制各種硬件設(shè)備,如存儲(chǔ)器、I/O口等,目標(biāo)代碼簡(jiǎn)短、占用內(nèi)存少、執(zhí)行速度快、語(yǔ)句效率高。然而,由于匯編語(yǔ)言是面向機(jī)器的語(yǔ)言,不同廠家或同廠家不同系列的單片機(jī)。其匯編語(yǔ)言指令系統(tǒng)往往互不相同,即通常所說的“不兼容”。這就出現(xiàn)了精通51單片機(jī)匯編語(yǔ)言的人不能直接編寫PIC或其他單片機(jī)的匯編語(yǔ)言源程序,反之亦然的現(xiàn)象,以及產(chǎn)品升級(jí)換代和不同單片機(jī)問程序移植難的問題。而且,由于匯編語(yǔ)言是采用助記符的低級(jí)語(yǔ)言,可讀性較差,當(dāng)源程序功能多、程序長(zhǎng)時(shí),即使加了注釋,閱讀自己編寫的程序也會(huì)感到困難,更不用說修改程序和增加功能了。

  目前,單片機(jī)的應(yīng)用越來越廣,各半導(dǎo)體生產(chǎn)廠家不斷推出各種高、中、低檔單片機(jī)系列,以適應(yīng)市場(chǎng)的需求。而客戶對(duì)單片機(jī)系統(tǒng)的設(shè)計(jì)人員的基本要求,就是要選擇能夠滿足產(chǎn)品性能和成本要求的單片機(jī),并以最快的速度開發(fā)出完全滿足市場(chǎng)需求的智能化產(chǎn)品。用匯編語(yǔ)言編程顯然無法達(dá)到要求。

  用C語(yǔ)言開發(fā)單片機(jī)系統(tǒng)軟件的最大好處,是代碼效率高、軟件調(diào)試直觀、維護(hù)升級(jí)方便、代碼的重復(fù)利用率高、便于跨平臺(tái)的代碼移植等。因此,C語(yǔ)言在單片機(jī)系統(tǒng)設(shè)計(jì)中得到越來越廣泛的運(yùn)用。

  C語(yǔ)言是一種高級(jí)語(yǔ)言,具有低級(jí)語(yǔ)言的特點(diǎn),原來用各種匯編語(yǔ)言編寫的單片機(jī)程序,均可用C語(yǔ)言程序代換。

  二、C語(yǔ)言的特點(diǎn)

  C語(yǔ)言的特點(diǎn)可歸納如下。

  1.語(yǔ)言簡(jiǎn)潔

  C是一種小型語(yǔ)言,共有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,表示方法簡(jiǎn)單,只需用規(guī)范的方法。就可以構(gòu)造出功能很強(qiáng)的數(shù)據(jù)類型、語(yǔ)句和程序結(jié)構(gòu)。如用++表示加1;一一表示減1;運(yùn)算符省寫等。

  2.表達(dá)方式靈活實(shí)用

  C語(yǔ)言提供多種運(yùn)算符和表達(dá)式值的方法,對(duì)問題的表達(dá)可通過多種途徑獲得,其程序設(shè)計(jì)更主動(dòng)、靈活。它語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大,如對(duì)整型量與字符型數(shù)據(jù)及邏輯型數(shù)據(jù)可以通用等。

  3. 表達(dá)力強(qiáng)

  C語(yǔ)言有豐富的數(shù)據(jù)結(jié)構(gòu)和運(yùn)算符。包含了各種數(shù)據(jù)結(jié)構(gòu),如整型、數(shù)據(jù)類型、指針類型和聯(lián)合類型等,用來實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。C語(yǔ)言的運(yùn)算符有34種,范圍很寬,靈活使用各種運(yùn)算符可以實(shí)現(xiàn)難度極大的運(yùn)算。

  C語(yǔ)言能直接訪問硬件的物理地址,能進(jìn)行位(bit)操作。兼有高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的許多優(yōu)點(diǎn)。

  它既可用來編寫系統(tǒng)軟件,又可用來開發(fā)應(yīng)用軟件,已成為一種通用程序設(shè)計(jì)語(yǔ)言。

  4.C語(yǔ)言生成的目標(biāo)代碼質(zhì)量高

  C語(yǔ)言描述問題比匯編語(yǔ)言迅速,工作量小、可讀性好,易于調(diào)試、修改和移植,而代碼質(zhì)量與匯編語(yǔ)言相當(dāng)。

  5.結(jié)構(gòu)化程序設(shè)計(jì)

  C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言,提供編寫結(jié)構(gòu)化程序所需的控制流的結(jié)構(gòu)語(yǔ)句,如for、while、do…while、lf…else等;用函數(shù)作為程序設(shè)計(jì)的基本單位,以實(shí)現(xiàn)程序的模塊化;其源文件還可分割為多個(gè)源文件,以分別對(duì)各源文件進(jìn)行編譯,再連接生成可執(zhí)行的目標(biāo)碼(hex)文件。

  6.可移植性

  匯編語(yǔ)言是不可移植的。而C語(yǔ)言在不同機(jī)器上的C編譯程序,86%的代碼是公共的,所以C語(yǔ)言的編譯程序便于移植。在一個(gè)環(huán)境上用C語(yǔ)言編寫的程序,不改動(dòng)或稍加改動(dòng),就可移植到另一個(gè)完全不同的環(huán)境中運(yùn)行。

  三、學(xué)習(xí)方法

  用PIC單片機(jī)開發(fā)電子產(chǎn)品和用C語(yǔ)言編程,最主要的是要堅(jiān)持學(xué)習(xí),不能中斷。應(yīng)通過各種實(shí)例程序來學(xué)習(xí)C語(yǔ)言的語(yǔ)法規(guī)則。要熟練掌握C語(yǔ)言的數(shù)據(jù)類型表達(dá)方法、各種運(yùn)算符、各種語(yǔ)句結(jié)構(gòu)。

  最好能背誦。要學(xué)會(huì)用C函數(shù)實(shí)現(xiàn)所需功能的方法。實(shí)際上,每個(gè)C函數(shù)都相當(dāng)于一個(gè)功能模塊,一個(gè)C函數(shù)便可實(shí)現(xiàn)一種功能。

  此外,用C語(yǔ)言開發(fā)PIC單片機(jī)應(yīng)用產(chǎn)品,必須具有PIC單片機(jī)匯編語(yǔ)言知識(shí)。如果你已經(jīng)掌握了用匯編語(yǔ)言編寫PIC單片機(jī)源程序的方法,最好將編寫成功的PIC單片機(jī)匯編語(yǔ)言源程序,逐個(gè)用C語(yǔ)言源文件代換,從中體會(huì)C語(yǔ)言的優(yōu)越性。

  四、簡(jiǎn)單的C 語(yǔ)言程序

  為了幫助讀者進(jìn)入C語(yǔ)言編程環(huán)境,要給大家介紹一個(gè)簡(jiǎn)單的C語(yǔ)言程序。

  下面扼要介紹該程序所用到的C語(yǔ)言基本知識(shí)。更多的知識(shí)則在后文詳細(xì)介紹。

  1.主函數(shù)main( )

  C語(yǔ)言程序一般由若干個(gè)函數(shù)組成。函數(shù)是完成某個(gè)功能的算法的程序段,是C語(yǔ)言的基本組成單位。組成一個(gè)程序的若干函數(shù),可以保存在一個(gè)或幾個(gè)源程序文件中,這些文件都以。C為擴(kuò)展名(匯編語(yǔ)言以ASM為擴(kuò)展名)。一個(gè)程序必須有且只能有一個(gè)名為main的函數(shù),即是主函數(shù)main( )程序運(yùn)行時(shí),總是從主函數(shù)main( )開始執(zhí)行的。

  2.C語(yǔ)言函數(shù)

  C語(yǔ)言程序的基本單位是函數(shù)。C語(yǔ)言程序必須有且只能有一個(gè)名為main的主函數(shù)。主函數(shù)可以調(diào)用其他函數(shù),其他函數(shù)也可相互調(diào)用。被調(diào)用的函數(shù)可以是系統(tǒng)提供的庫(kù)函數(shù),也可以是程序設(shè)計(jì)者自己編寫的函數(shù)——對(duì)于MCU (如PIC單片機(jī)),所用的大多是自己編寫的函數(shù)。一個(gè)函數(shù)由函數(shù)頭和函數(shù)體兩部分組成,每個(gè)函數(shù)的形式都相同。

 ?。?)函數(shù)頭由函數(shù)名(自定義名)、函數(shù)標(biāo)志——( ),即一對(duì)圓括號(hào),以及參數(shù)表,又稱函數(shù)形式參數(shù)名和參數(shù)說明(定義形式參數(shù)類型)組成。

  前兩項(xiàng)必須有,如主函數(shù)main( ),后兩項(xiàng)為即可選項(xiàng)。注意:函數(shù)名可包括函數(shù)類型和函數(shù)名字等。

 ?。?)函數(shù)體由一對(duì)花括號(hào):{}括起來,括號(hào)內(nèi)由若干語(yǔ)句組成。這些語(yǔ)句有兩種類型:一類是說明語(yǔ)句,又稱變量定義,其作用是定義函數(shù)中用到的變量;另一類是執(zhí)行語(yǔ)句,又稱函數(shù)功能的執(zhí)行部分。

  用于完成一定的功能,即算法處理。注意:有的函數(shù)沒有變量定義部分,但有若干執(zhí)行語(yǔ)句。而在特定的情況下,則既無聲明部分,也無執(zhí)行部分,如:

  Dump( )

  {}

  這是一個(gè)空函數(shù)。什么也不做,它也是合法的函數(shù)。

  再有,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后,必須有一個(gè)分號(hào)“;”(#define……的不加分號(hào))。分號(hào)是C語(yǔ)言環(huán)境首先接觸到的基本符號(hào),在以后的文章中我們還會(huì)深入介紹這些符號(hào)的用途。

(3)賦值運(yùn)算符賦值號(hào)“=”,即賦值運(yùn)算符。

  賦值運(yùn)算符有三種表達(dá)形式,這里先介紹一種簡(jiǎn)單的賦值運(yùn)算符。

  格式:變量=表達(dá)式。

  功能:先計(jì)算出表達(dá)式值(有些表達(dá)式已有結(jié)果,勿需計(jì)算),并將該值賦給等式左端的變量。賦值運(yùn)算符是按照“自右而左”的順序進(jìn)行作業(yè)的。例如:

  PORTB=0X0 3

  TRISB=0×0 0

  TRISA=0X0 F (0X代表十六進(jìn)制)

  分別執(zhí)行以下操作:把等式右邊的0X0 3送給等式左邊的端口寄存器PORTB口,即B口低兩位為高電平,其余6位為低電平;把0X0 0送給方向寄存器TRISB,即設(shè)置B口為輸出;把0×0 F送給方向寄存器TRISA,即設(shè)置A 口低四位為輸入,高四位為輸出。

  3.PIC16F84A點(diǎn)燈電路和C語(yǔ)言程序

  下面以控制PIC16F84A單片機(jī)端口寄存器PORTB口外接的8只LED任一位的亮滅為例,介紹相關(guān)C語(yǔ)言程序的編寫。電路如圖1所示。

  筆者使用的是MPLAB tDE V7 40集成開發(fā)環(huán)境及PICC編譯器,所生成的C語(yǔ)言源程序又稱源文件。

  在編寫C的源程序時(shí),需要定義硬件的標(biāo)志頭文件(也稱包含頭文件或頭文件)。因?yàn)橛脩艚?jīng)常使用的標(biāo)準(zhǔn)寄存器地址和其位地址都被定義在Pic h標(biāo)志頭文件中,按C語(yǔ)言編譯器編譯源程序的語(yǔ)法規(guī)則,在編寫C語(yǔ)言程序時(shí),必須使用#include語(yǔ)句,把這個(gè)pic.h頭文件包含到自己的源程序中。即對(duì)于PIC中級(jí)產(chǎn)品的單片機(jī),C語(yǔ)言程序的開頭是固定格式#include<pic.h>。編譯器在編譯處理#include<pic.h>語(yǔ)句時(shí),會(huì)把pic.h的內(nèi)容。復(fù)制到你的源程序中,這樣PICC才認(rèn)為用戶使用的標(biāo)準(zhǔn)寄存器的端口地址和端1:3的位地址已經(jīng)被定義,源程序就會(huì)合法地使用這些標(biāo)準(zhǔn)寄存器及其對(duì)應(yīng)的位。關(guān)于MPLAP IDE V7.4和picc編譯器,在后文還會(huì)詳細(xì)介紹。

  4.PIC單片機(jī)端口寄存器的位定義

  這里介紹的PIC單片機(jī)端口的位定義,屬于需要背誦的內(nèi)容。

  以PIRTB為例,PIC單片機(jī)端口寄存器的位(即8位)定義,實(shí)寫如下:

  5.延時(shí)函數(shù)

  PiC單片機(jī)C語(yǔ)言中的延時(shí)函數(shù)(即延時(shí)一定值),有多種等效的編寫,這里介紹一種最簡(jiǎn)延時(shí)函數(shù),在后文中,我們還會(huì)詳細(xì)介紹各種延時(shí)函數(shù)。

  函數(shù)中的K為給定的整形值

6.C語(yǔ)言程序清單

  PIC16F84A單片機(jī)PORTB口外接8只LED間亮和位1、2、6外接的LED分別點(diǎn)亮的程序清單如下(源文件名PIC01.C):

  說明:以上是一個(gè)完整的,可執(zhí)行圖1 LED點(diǎn)燈的C程序,主要由端口寄存器PORTB 1:3的位定義,延時(shí)函數(shù)delay ()定義; 主函數(shù)main()、延時(shí)函數(shù)void delay( )及各種語(yǔ)句等組成。

  該C程序第三行以符號(hào)“∥”開頭的說明文是一個(gè)注釋,它可在一行內(nèi)寫完,亦可分多行寫完。注釋可寫在程序的任何位置,用于幫助閱讀和理解程序。說明程序的相關(guān)功能、注意事項(xiàng),以及說明有關(guān)算法等。注釋應(yīng)盡可能簡(jiǎn)捷。在編譯時(shí),注釋不產(chǎn)生代碼。C程序還可用“ ”開頭到“ ”結(jié)尾之間的內(nèi)容作注釋,與符號(hào)“∥”開頭的注釋是等效的。

  上述程序的第一行,是引導(dǎo)程序開始的用#in—clude語(yǔ)句的頭文件。

  第二行是PIC單片機(jī)PORTB口的位定義,這里指8位,即(&ddd)*8。

  第三行是第二行端口寄存器PORTB的位定義的注釋。

  第四行~第六行是端口寄存器PORTB口的RBO、RB1、RB6三位的定義,以便在后續(xù)程序中對(duì)其賦值之用。

  第七行是RBO、RB1、RB6三位的定義注釋。

  第八行是延時(shí)函數(shù)的定義第九行到結(jié)尾的功能(參看相關(guān)注釋)。

  關(guān)于端口寄存器的位表達(dá)方式。在用C語(yǔ)言編寫PIC單片機(jī)源文件時(shí),一旦端口的位被定義,即(以端口PORTB為例);#daefine PORTBIT (ddd,bit)((unsigned)(&ddd) 8+(bie)),在該條件下,端口PORTB的位有兩種表達(dá)方式,在C程序中均是等效的。以PORTB的0位為例:

  它們都是等效的。但一旦位定義中用了PORTB_ O.則在賦值時(shí)也應(yīng)用PORTB—O: 或位定義用了PORT_O,對(duì)應(yīng)賦值時(shí)也應(yīng)用PORT_O。

(待續(xù))

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉