c8051f系列單片機開發(fā)應(yīng)用筆記c8051f02x帶注釋例程_第1頁
c8051f系列單片機開發(fā)應(yīng)用筆記c8051f02x帶注釋例程_第2頁
c8051f系列單片機開發(fā)應(yīng)用筆記c8051f02x帶注釋例程_第3頁
c8051f系列單片機開發(fā)應(yīng)用筆記c8051f02x帶注釋例程_第4頁
c8051f系列單片機開發(fā)應(yīng)用筆記c8051f02x帶注釋例程_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、應(yīng)用筆 記相關(guān)C8051F020 C8051F021 C8051F022 引本應(yīng)用筆記包含用C語言編寫的例程代碼是使用C8051F02X系列器件應(yīng)按外設(shè)劃分的程序ADC0下面是ADC0應(yīng)用例ADC0_Buf 1 . 此程序為使用ADC0的例程 在中斷模式使用定時器3溢出作為開始啟應(yīng)用筆 記相關(guān)C8051F020 C8051F021 C8051F022 引本應(yīng)用筆記包含用C語言編寫的例程代碼是使用C8051F02X系列器件應(yīng)按外設(shè)劃分的程序ADC0下面是ADC0應(yīng)用例ADC0_Buf 1 . 此程序為使用ADC0的例程 在中斷模式使用定時器3溢出作為開始啟動信號并采樣AI 另一個將結(jié)在XDATA

2、空一旦LES次采樣值從UART0傳一旦傳輸結(jié)據(jù)采樣次數(shù)LES將并重復此處理過ADC0_1.此程序為使用ADC0的例在中斷模式使用定時器3溢出作為開始啟動信號測量片內(nèi)溫度傳感器的輸ADC0的轉(zhuǎn)化結(jié)果經(jīng)計算的溫度從UART0ADC0_2m.此程序為使用ADC0的例在中斷模式使用定時器3溢出作為開始啟動信號測量從AI N0到A I N7的電壓和溫傳感器 ADC0轉(zhuǎn)換結(jié)果經(jīng)計算從UART0傳ADC0_OSA1.此程序為使用ADC0的例ADC0 結(jié)果經(jīng)過簡單在中斷模式使用定時器3溢出作為開始啟動信號測量片內(nèi)溫度傳感器的輸egrate-and-處理方法過egrate/decima比率由_DEC出 ADC0

3、轉(zhuǎn)換的結(jié)果經(jīng)計算得溫度值從UART0ADC0_Po ll 1.此例程說明了ADC0在查詢模式的操作 ADC0設(shè)置為寫AD0BUSY作為其轉(zhuǎn)換開始信號 并測量片內(nèi)溫度傳感器的輸出 溫度傳感器的輸出轉(zhuǎn)換成攝氏度并從UART0傳輸DAC0下面是DAC0的使用例程 如果有必要很容易將其變成DAC1DAC0_DTMF1.次例程源代碼在DC0輸出雙音多頻音調(diào)4出 ADC0轉(zhuǎn)換的結(jié)果經(jīng)計算得溫度值從UART0ADC0_Po ll 1.此例程說明了ADC0在查詢模式的操作 ADC0設(shè)置為寫AD0BUSY作為其轉(zhuǎn)換開始信號 并測量片內(nèi)溫度傳感器的輸出 溫度傳感器的輸出轉(zhuǎn)換成攝氏度并從UART0傳輸DAC0下面是

4、DAC0的使用例程 如果有必要很容易將其變成DAC1DAC0_DTMF1.次例程源代碼在DC0輸出雙音多頻音調(diào)4根據(jù)常數(shù)LERATED確定的速率定時更新DAC0的輸并振蕩器OSC_Cry1.此例程說明如何配置外部振蕩器驅(qū)動22 .1184Mhz 晶及如何選擇此外部振蕩器作為系丟失時鐘檢測器復位功能 假定22 1184Mhz晶體連接在XTAL1和XTAL2OSC_1.部振蕩器到最大頻率 16Mhz 同時使能丟失時鐘檢測器復位功定時器Timer0_Po ll 1.此例程說明在查詢模式使用定時器0實現(xiàn)1ms分辨率延程序ADC0_Buf 1 . /-/ ADC0_Buf1./-/SILICONLABS

5、公司 作者: 日期/ /此程序為使用ADC0的例在中斷模式使用定時器3溢出作為開始啟動信號并采樣/ 次 將結(jié)在XDATA空一旦LES次采樣值從/ UART0傳輸 一旦傳輸結(jié)另2AN022-一個數(shù)據(jù)采樣次數(shù)/LES將并重復處/假定一個22 . 1184Mhz晶體連接在XTAL1和XTAL2/ /用全局常量系統(tǒng)時用全局常量目標UART/ /用全局常量ADC0采樣速在/ 一個數(shù)據(jù)采樣次數(shù)/LES將并重復處/假定一個22 . 1184Mhz晶體連接在XTAL1和XTAL2/ /用全局常量系統(tǒng)時用全局常量目標UART/ /用全局常量ADC0采樣速在/ /在使用C8051F02x器件的4096字節(jié)XRAM

6、/ /采樣次數(shù)/LES的最大值為假定未使用外擴RAM/ 目標器件: / /工具: KEIL C51 603 / KEIL EVAL /-/ /-#include / SFR #include /-/C8051F02X的16位SFR/-sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfDP = 0 x82 ; / = 0 x92 ; / 定時器3TMR3 = 0 x94 ; / 定時器30 xbe ; / ADC0= 0 xc4= 0 xc6= 0 xca ADC/ ADC0 于窗/ 定時器2捕捉重T2 = 0

7、 xcc ; / 定時器RCAP4 = 0 xe4 / 定時器4捕捉T4 = 0 xf4 ; / 定時器= 0 xd2 ; / DAC0 = 0 xd5 ; / DAC1 /-/ /-#defiSYSCLK 22118400 / 系統(tǒng)時鐘頻率 Hz BAUDRATE115200 / UART波特率bpsSLERATE0 50000 / ADC0采樣頻率TRUE FALSE LES 2048 / ADC0采樣次sbit LED = P16 / LED=1意為sbit SW1 = P37 / SW1=0意為按壓/-/ /- SYSCLK_Init(void); PORT_Init (void);

8、UART0_Init (void); ADC0_Ini t (void);Timer3_Init counts) 3AN022-void ADC0_ISR (void)/-/ /-xdata void ADC0_ISR (void)/-/ /-xdata unsigned lesLES ADC0結(jié)果數(shù)bit ADC0_DONE / 當LES次為/-/ /-void main (void) i ; / = 0 xde; / = 0 xadSYSCLK_Init / 初始化PORT_Init / 初始化數(shù)據(jù)交叉開關(guān)和通用IO口 UART0_In i t () ; / 初始化UART0看門Timer

9、3_Init (SYSCLKLERATE0) ; / 初始化定時器3溢出作為ADC0采樣ADC0_Init ( ) ; / 初始化ADC EA = 1 ; / 允許全部中斷while ADC0_DONE = FALSE;LED = 1 ; / 在采樣過程中點亮LED EIE2 |= 0 x02 ; / 允許ADC0中斷while (ADC0_DONE = FALSE / 等待采樣/ 上傳采樣值到for (i = 0; i LES; i+) (“%un”, lesi)(“n”)/-/ /-/-/ /-/此程序初始化系統(tǒng)時鐘使用22 .1184MHz晶體為時鐘源/void SYSCLK_Init

10、(voii ; / = 0 x67 / 開啟外部振蕩器 221184MHz晶體 for ( i0 ; i 256 ; i +) ; / /等待振蕩器啟振while (!& 0 x80) ; / 等待晶體振蕩器穩(wěn)定= 0 x88; / 選擇外部振蕩器為系統(tǒng)時鐘源并允許丟失時鐘/-/ / IO4AN022-/-/配置數(shù)據(jù)交叉開關(guān)和通用IO/id PORT_Init (voi=/-/配置數(shù)據(jù)交叉開關(guān)和通用IO/id PORT_Init (voi=0 x04 ; / 使能0 x000 x40 ; / P0MDOUT |= 0 x01 / 允許TX0為推挽輸P1MDOUT |= 0 x40 / 允許P1

11、6(LED)為推挽輸/-/ UART0/-/ 配置UART0 使用定時器1為波特/void UART0_Init (voiSCON0 = 0 x50 / SCON0模式1 8位UART 使能TMOD = 0 x20 / TMOD定時器1 模式2 8TH1= TR1= -(SYSCLK/BAUDRATE/16) ; / 根據(jù)波特率的值設(shè)定定時器1重裝1 ; / 啟動定時器|= 0 x10 ; / 定時器1|= 0 x80; / SMOD00 = TI0 = 1 ; / 表示TX0/-/ ADC0初始/-/配置使用定時器3溢出作為轉(zhuǎn)換開始信號, 轉(zhuǎn)換結(jié)束產(chǎn)生一個中斷使能ADC轉(zhuǎn)換結(jié)束中斷中斷 使能

12、ADC0轉(zhuǎn)換結(jié)束中void ADC0_Init (voi= 0 x05; / ; 正模式 定時器3溢出ADC0轉(zhuǎn)換/ADC0數(shù)據(jù)左對=0 x07 / 使能溫度傳感器, 片內(nèi) VREF和VREF 輸出緩沖0 x00/ 選擇AIN0作為ADC多路轉(zhuǎn)換輸出 (SYSCLK2500000) 3 / ADC 換時鐘25MHz &0 x07 ; / PGA= EIE2 &= 0 x02; ADC0中AD0EN = 1 ; / 使能/-/ / 定時器3/-/5AN022-/ 配置定時器3 自動重裝 決定(不產(chǎn)生中斷/voidTimer3_Init = 0 x02 / 停止定時器3 清除TF3/ TMR3RL

13、 = -counts; / 初始化重裝TMR3 = f ; / EIE2 &= 0 x01; /定時器3中|= 0 x04 ; / 啟動定時器/-/ 配置定時器3 自動重裝 決定(不產(chǎn)生中斷/voidTimer3_Init = 0 x02 / 停止定時器3 清除TF3/ TMR3RL = -counts; / 初始化重裝TMR3 = f ; / EIE2 &= 0 x01; /定時器3中|= 0 x04 ; / 啟動定時器/-/-/-/ ADC0中斷服務(wù)/-/ADC0轉(zhuǎn)換結(jié)束中斷服并更新局部采樣計數(shù)器 = LES時ADC0 轉(zhuǎn)換結(jié)束中斷并置void ADC0_ISR (void)errupt

14、15 using sic unsigned les = 0 ; / ADC0= 0 / 清除ADC0轉(zhuǎn)換結(jié)束標志slesles ADC0 / 讀ADC0if les+ ; / les = les = 0 ; / 復位采樣計EIE2 &= 0 x02 ; /ADC0ADC0_DONE = 1 設(shè)置DONE標ADC0_1./-/ /1SILICON作者: 日期此程序為ADC0的應(yīng)用例程 在中斷模式使用定時器3溢出ADC0的結(jié)果經(jīng)過計算得到溫度值從UART0假設(shè)在XTAL1和XTAL2之間連接一個22 . 1184MHz系統(tǒng)時鐘頻在全局常量SYSCLK 目標UART波特在全局常量6AN022-/AD

15、C0采樣在全局常量目標器件: KEIL C51 6.03 / KEIL EVAL /-/ /-/ADC0采樣在全局常量目標器件: KEIL C51 6.03 / KEIL EVAL /-/ /-#include / SFR #include /-/C8051F02X的16位SFR/-sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfDP = 0 x82 ; / TMR3RL = 0 x92定時器3重裝TMR3 = 0 x94 ; / 定時器3 ADC= 0 xc4= 0 xc6= 0 xca ADC/ ADC

16、0 于窗/ 定時器2捕捉重T2 = 0 xcc ; / 定時器RCAP4 = 0 xe4 / 定時器4捕捉T4 = 0 xf4 ; / 定時器= 0 xd2 ; / DAC0 = 0 xd5 ; / DAC1 /-/ /-#defiSYSCLK 22118400 / 系統(tǒng)時鐘頻率 Hz BAUDRATE9600 / UART波特率bpsSLERATE0 50000 / ADC0采樣頻率sbit LED = P16 / LED=1意為sbit SW1 = P37 / SW1=0意為按下/-/ /- SYSCLK_Init(void); PORT_Init (void); UART0_Init (

17、void); ADC0_Ini t (void);Timer3_Init counts) ADC0_ISR (void)/-/ /-long result; / ADC0十選一/-/ /-main (void) temperature; / 溫度為百分之一精度 度l7AN022-, temp_frac / 溫度的整數(shù)和小數(shù)部= 0 xde; / = 0 xadSYSCLK_Init / 初始化PORT_, temp_frac / 溫度的整數(shù)和小數(shù)部= 0 xde; / = 0 xadSYSCLK_Init / 初始化PORT_Init / 初始化數(shù)據(jù)交叉開關(guān)和通用IO口 UART0_In i

18、t () ; / 初始化UART0看門狗定時Timer3_Init (SYSCLKLERATE0) ; / 初始化定時器3溢出作為采樣速ADC0_Init ( ) ; / 初始化ADC AD0EN = 1 ; / 使能ADCEA = 1 ; / while (1) EA = 0; / temperature = result; / 從全局變量得到ADCEA = 1 ; / / / temperature = temperature - 41380temperature = (temperature * 100L) / 156= temperature / 100temp_frac = temp

19、erature - (* 100)f (“Temperature is %+02d.%02dn”, t, temp_frac)/-/ /-/-/ /-/ 此程序初始化系統(tǒng)時鐘 使用22.1184MHz晶體作/void SYSCLK_Init (voii ; / 0 x67起動外部振蕩221184MHz for ( i =0 ; i 256 ; i +) ; / /等待振蕩器啟動while ( !& 0 x80) ; / = 0 x88 ; / 選擇外部振蕩器作為系統(tǒng)時鐘源并使能丟失時/-/ / IO/-/配置數(shù)據(jù)交叉開關(guān)和通用IO/id PORT_Init (voi=0 x04 ; / 使能0

20、 x000 x40 ; / P0MDOUT |= 0 x01 / 允許TX0為推挽8AN022-P1MDOUT |= 0 x40 / 允許P16(LED)為推挽/-/ UART0/-P1MDOUT |= 0 x40 / 允許P16(LED)為推挽/-/ UART0/-/設(shè)置UART0 , 用定時器1為波特率/void UART0_Init (voiSCON0 = 0 x50 / SCON0模式1 8位UART 允許TMOD = 0 x20 / TMOD定時器1 模式2 8TH1= TR1= -(SYSCLK/BAUDRATE/16) ; / 按波特率設(shè)置定時器1重裝1 ; / 起動定時器|=

21、0 x10 ; / 定時器1|= 0 x80; / SMOD00 = TI0 = 1 ; / 表示TX0/-/ ADC0初始/-/ 配置ADC0 使用定時器3溢出作為轉(zhuǎn)換源轉(zhuǎn)換結(jié)束產(chǎn)生中/ 使用左對齊輸出模式 使能ADC/void ADC0_Init (voi= 0 x05; /ADC0 正模/ 定時器3溢出ADC0開始轉(zhuǎn)換 ADC0數(shù)據(jù)=0 x07 / 使能溫度傳感器, 片內(nèi)VREF和VREF 輸出緩0 x0f ; / 選擇溫度傳感器作為ADC(SYSCLK2500000) 3 / ADC轉(zhuǎn)換時鐘=2 |=0 x01PGA增益EIE2 |= 0 x02 ; / 允許ADC/-/ / 定時器3

22、/-/ 配置定時器3為自動重裝 時間間隔由 制定(不產(chǎn)生中斷/ 使用系統(tǒng)時鐘作為時基/voidTimer3_Init = 0 x02 / 停止定時器3 清除TF3/ TMR3RL = -counts; / 初始化重裝TMR3 = f ; / EIE2 &= 0 x01; /定時器3中|= 0 x04 ; / 起動定時器9AN022-/-/ /-/-/ ADC0中斷服務(wù)/-/-/ /-/-/ ADC0中斷服務(wù)/-/ ADC0轉(zhuǎn)換結(jié)束中斷/ / ADC0取樣結(jié)在全局變量resu l ADC0_ISR (voierrupt = 0 / ADC轉(zhuǎn)換結(jié)束清除標result = ADC0 ; / 讀ADC

23、ADC0_2m./-/ 2m/-/SILICON作者: 日期此程序為ADC0的應(yīng)用例程 在中斷模式使用定時器3溢出作為開始轉(zhuǎn)換信號測量AIN0到AIN7的電壓和溫度傳感器轉(zhuǎn)換結(jié)果經(jīng)過計算所得電壓從UART0假設(shè)在XTAL1和XTAL2之間接22 . 1184MHz晶系統(tǒng)時鐘頻ADC0采樣在全局常量SYSCLK . 目標UART波特在全局常量BAUDRATE 在在全局常量LERATE0 .電壓參考目標器件: 工具: KEIL C51 603 / KEIL EVAL /-/ /-#include / SFR #include /-/C8051F02X的16位SFR/-sfr16 sfr16 sfr

24、16 sfr16 sfr16 sfr16 sfDP = 0 x82 ; / TMR3RL = 0 x92定時器3重裝0 x94 ; / 定時器3 ADC= 0 xc4= 0 xc6= 0 xca/ ADC0 于窗/ ADC0 于窗/ 定時器2捕捉AN022-sfr16 sfr16 sfr16 sfr16 sfT2 = 0 xcc ; / 定時器RCAP4 = 0 xe4 / 定時器4捕捉T4 = 0 xf4 ; / 定時器= 0 xd2 ; / DAC0 = 0 xd5 ; / DAC1 /-sfr16 sfr16 sfr16 sfr16 sfT2 = 0 xcc ; / 定時器RCAP4 =

25、 0 xe4 / 定時器4捕捉T4 = 0 xf4 ; / 定時器= 0 xd2 ; / DAC0 = 0 xd5 ; / DAC1 /-/ /-#defiSYSCLK 22118400 / 系統(tǒng)時鐘頻率 Hz BAUDRATE9600 / UART波特率bpsSLERATE0 50000 / ADC0采樣頻率VREF0 2430 / VREF參考電平為sbit LED = P16 / LED=1意為sbit SW1 = P37 / SW1=0意為按下/-/ /- SYSCLK_Init(void); PORT_Init (void); UART0_Init (void); ADC0_Ini

26、t (void);Timer3_Init counts) ADC0_ISR (void)/-/ /-long result9 ; / AIN0-7和溫度傳感/-/ /-void main (void) long voltage / 電壓以mVi ; / = 0 xde; / = 0 xad看門SYSCLK_Init / 初始化PORT_Init / 初始化數(shù)據(jù)交叉開關(guān)和通用IO UART0_In i t () ; / 初始化UART0Timer3_Init (SYSCLKLERATE0) ; / 初始化定時器3溢出作為采ADC0_Init ( ) ; / 初始化ADC AD0EN = 1 ;

27、/ 允許ADCEA = 1 ; / while (1) for (i = 0; i 16;f (“Channel %dvoltage is %ldmVn”, i, voltage)AN022-/-/ /-/-/ /-/-/ /-/ 此程序初始化系統(tǒng)時鐘 使用22.1184MHz晶體作為系統(tǒng)/void SYSCLK_Init (voii ; / = 0 x67 / 起動外部振蕩器 221184MHz晶體 for ( i0 ; i 256 ; i +) ; / /while ( !& 0 x80) ) ; / / = 0 x88 ; / 選擇外部振蕩器作為系統(tǒng)時鐘源并允許丟失時/-/ / IO/-

28、/配置數(shù)據(jù)交叉開關(guān)和通用IO/id PORT_Init (voi=0 x04 ; / 使能0 x000 x40 ; / P0MDOUT |= 0 x01 / 允許TX0為推挽輸P1MDOUT |= 0 x40 / 允許P16(LED)為推挽輸/-/ UART0/-/ 配置UART0 使用定時1為波特率發(fā)生器/void UART0_Init (voiSCON0 = 0 x50 / SCON0模式1 8位UART 允許TMOD = 0 x20 / TMOD定時器1 模式2 8TH1= TR1= -(SYSCLK/BAUDRATE/16) ; / 按波特率設(shè)置定時器1重裝1 ; / 起動定時器|=

29、0 x10 ; / 定時器1|= 0 x80; / SMOD00 = TI0 = 1 ; / 表示TX0/-/ ADC0初始AN022-/-/ / 配置ADC0 使用定時器3 溢出作為轉(zhuǎn)換源, / 使能ADC轉(zhuǎn)換結(jié)束中/注意: 使能低功模/void ADC0_Init (voi/-/ / 配置ADC0 使用定時器3 溢出作為轉(zhuǎn)換源, / 使能ADC轉(zhuǎn)換結(jié)束中/注意: 使能低功模/void ADC0_Init (voi= 0 x45; / ; 低功模/ 當定時器3溢出時ADC0轉(zhuǎn)換開始; ADC0 數(shù)據(jù)左=0 x07 / 使能溫度傳感器 片內(nèi)VREF和VREF輸出緩沖0 x00 / 選擇AIN0

30、為ADC多路模(SYSCLK2500000) 3 / ADC化時鐘=2 &=0 x07 / PGA增益EIE2 |= 0 x02 ; / 允許ADC/-/ / 定時器3/-/ 配置定時器3 自動重裝時間間隔由制定(不產(chǎn)生中斷/ 使用系統(tǒng)時鐘作為時基/voidTimer3_Init = 0 x02 / 停止定時器3 清除TF3/ TMR3RL = -counts; / /TMR3 = f ; / EIE2 &= 0 x01; /定時器3中|= 0 x04 ; / 起動定時器/-/ /-/-/ ADC0中斷服務(wù)/-/ADC0轉(zhuǎn)換結(jié)束中斷服得當ADC0采樣值在全局數(shù)組 resulvoid ADC0_

31、ISR (voierrupt ic unsigned char channel = 0 ; / ADC路模擬通道(0-= 0 / 清除ADC轉(zhuǎn)換結(jié)束resultchannel = ADC0 讀ADCchannel + ; / if (channel = channel = 0AN022-AMX0SL = channel / 設(shè)置多路模擬轉(zhuǎn)換器到下一個ADC0_OSA1./-/ ADC0_OSA1./-/AMX0SL = channel / 設(shè)置多路模擬轉(zhuǎn)換器到下一個ADC0_OSA1./-/ ADC0_OSA1./-/SILICON作者: 日期在中斷模式使用定時器3溢出作為轉(zhuǎn)換開始egra t

32、e-and-egratedecimate 率由_DEC給ADC結(jié)果經(jīng)計算得出溫度從UART0傳假設(shè)在XTAL1和XTAL2之連接22 . 1184MHz晶在全局常量SYSCLK 目標UART波特在全局常量BAUDRATE 系統(tǒng)時鐘頻ADC0采樣在全局常量LERATE0 目標器件: 工具: KEIL C51 603 / KEIL EVAL /-/ /-#include / SFR #include /-/C8051F02X的16位SFR/-sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfDP = 0 x82

33、; / = 0 x92 ; / 定時器30 x94 ; / 定時器30 xbe ; / ADC0= 0 xc4= 0 xc6= 0 xca/ ADC0 于窗 ADC/ 定時器2捕捉重T2 = 0 xcc ; / 定時器RCAP4 = 0 xe4 / 定時器4捕捉T4 = 0 xf4 ; / 定時器= 0 xd2 ; / DAC0 = 0 xd5 ; / DAC1 /-/ /-#defiSYSCLK 22118400 / 系統(tǒng)時鐘頻率 Hz BAUDRATE9600 / UART波特率bpsSLERATE0 50000 / ADC0采樣頻率 AN022-_DEC 256 / 累計和十取一sbit

34、 LED = P16 ; / LED=1意為sbit SW1 = P37 / SW1=_DEC 256 / 累計和十取一sbit LED = P16 ; / LED=1意為sbit SW1 = P37 / SW1=0意為按下/-/ /- SYSCLK_Init(void); PORT_Init (void); UART0_Init (void); ADC0_Ini t (void);Timer3_Init counts) ADC0_ISR (void)/-/ /-long result; / ADC0十取一/-/ /-void main (void) long temperature; / 精

35、度為百分之一的溫度 , temp_frac / 溫度的整數(shù)和小數(shù)部= 0 xde; / = 0 xad看門狗定時SYSCLK_Init / 初始化PORT_Init / 初始化數(shù)據(jù)交叉開關(guān)和通用IO口 UART0_In i t () ; / 初始化UART0Timer3_Init (SYSCLKLERATE0) ; / 初始化定時器3溢出為采樣ADC0_Init ( ) ; / 初始化ADC AD0EN = 1 ; / 使能ADCEA = 1 ; / while (1) EA = 0; /temperature EA = 1 ; / / 計算溫度 百分之一精度= temperature - 4

36、1380t empera turetempera= (temperature * 100L) / 156= temperature / 100temp_frac = temperature - (* 100)f (“Temperature is %+02d.%02dn”, t, temp_frac)LED = SW1 ; / LED/-/ /-/-/ /-/AN022-/此程序初始化系統(tǒng)時鐘 使用22 .1184MHz晶體作為系統(tǒng)時鐘源/void SYSCLK_Init (voii ; / /此程序初始化系統(tǒng)時鐘 使用22 .1184MHz晶體作為系統(tǒng)時鐘源/void SYSCLK_Init

37、(voii ; / = 0 x67 / 起動外部振蕩器 221184MHz晶體 for ( i0 ; i 1ms)while (!& 0 x80) ; / 等待晶體振蕩器穩(wěn)= 0 x88 ; / 選擇外部振蕩器作為系統(tǒng)時鐘源并允許丟失時/-/ / IO/-/配置數(shù)據(jù)交叉開關(guān)和通用IO/id PORT_Init (voi=0 x04 ; / 使能0 x000 x40 ; / P0MDOUT |= 0 x01 / 使能TX0推挽輸P1MDOUT |= 0 x40 / 使能P16(LED)為推挽輸/-/ UART0/-/ 配置UART0 使用定時器1作為波特率發(fā)生器/void UART0_Init

38、(voiSCON0 = 0 x50 / SCON0模式1 8位UART 使能TMOD = 0 x20 / TMOD定時器1 模式2 8TH1= TR1= TI0 -(SYSCLK/BAUDRATE /16) ; / 按波特率設(shè)置T1重裝1 ; / 起動定時器|= 0 x10 ; / 定時器1|= 0 x80; / 1 ; / 表示TX0/-/ ADC0初始/-/ 配置ADC0 使用定時器3溢出作為轉(zhuǎn)換源, / 使用左對齊輸出模式 允許ADC轉(zhuǎn)換結(jié)束中斷 不使用/void ADC0_Init (voi=/ mode0 x05; / ; 正定時器3溢出ADC0轉(zhuǎn)換開ADC0數(shù)據(jù)是左對齊AN022-

39、=0 x07 / 允許溫度傳感器 片內(nèi)VREF和VREF輸出緩0 x0f; / 選擇溫度傳感器作為ADC多路模擬轉(zhuǎn)換輸(SYSCLK2500000) 3 / ADC換時鐘=2 |=0 x01PGA=0 x07 / 允許溫度傳感器 片內(nèi)VREF和VREF輸出緩0 x0f; / 選擇溫度傳感器作為ADC多路模擬轉(zhuǎn)換輸(SYSCLK2500000) 3 / ADC換時鐘=2 |=0 x01PGA增益EIE2 |= 0 x02 ; / 允許ADC/-/ / 定時器3/-/ 配置定時器3自動重裝間隔由(不產(chǎn)生中斷)/voidTimer3_Init = 0 x02 / 停止定時器3 TF3/ TMR3RL

40、 = -counts; / 初始化重裝TMR3 = f ; / EIE2 &= 0 x01; /定時器3中|= 0 x04 ; / 起動定時器/-/ /-/-/ ADC0中斷服務(wù)/-/ADC0轉(zhuǎn)換結(jié)束中斷服得到ADC0采樣值將它加到運行總數(shù)中局部十取一計數(shù)器 _dec減當_dec為0時在全局變量放置十取一的/ 結(jié)void ADC0_ISR (voierrupt s/ic unsi_DEC / 合計十取一_dec = 0時記入新ic l= 0accumu l ator=0L / 請除ADC轉(zhuǎn)換結(jié)束標志+= ADC0 / 讀ADC值并加到運行accumulator_dec- ; / / if _d

41、ec = 0) / / 如果為0_dec _DEC ; / result = accumulator 8accumulator = 0L / 復位accumulatorADC0_Po ll 1./-/ ADC0_Poll1/-AN022-/SILICONLABS公司 作者: 日期: 2001年8月此程序示范了ADC0的查詢操作模式 ADC0配置為寫AD0BUSY作為轉(zhuǎn)換開/SILICONLABS公司 作者: 日期: 2001年8月此程序示范了ADC0的查詢操作模式 ADC0配置為寫AD0BUSY作為轉(zhuǎn)換開始源測量片內(nèi)溫度傳感器 溫度傳感器的輸出轉(zhuǎn)換成攝氏度由UART0傳輸假設(shè)在XTAL1和XT

42、AL2之間連接22 . 1184MHz晶系統(tǒng)時鐘頻在全局常量SYSCLK 目標器件UART波特在全局常量目標器件: 工具: KEIL C51 603 / KEIL EVAL /-/ /-#include / SFR #include /-/C8051F02X的16位SFR/-sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfDP = 0 x82 ; / TMR3RL = 0 x92定時器3重裝TMR3 = 0 x94 ; / 定時器3 ADC= 0 xc4= 0 xc6= 0 xca ADC/ ADC0 于窗

43、/ 定時器2捕捉重T2 = 0 xcc ; / 定時器RCAP4 = 0 xe4 / 定時器4捕捉T4 = 0 xf4 ; / 定時器= 0 xd2 ; / DAC0 = 0 xd5 ; / DAC1 /-/-#defineSYSCLK 22118400 系統(tǒng)時鐘頻率 Hz #define BAUDRATE 9600 / UART波特率 bpssbitLED= P16; sbit SW1 = P37 LED=/ SW1=0意為按下開/-/ /- SYSCLK_Init(void); PORT_Init (void); UART0_Init (void); ADC0_Ini t (void);/

44、-/ /-AN022-/-/ /-void main (void) long temperature; / 溫度 百分之一精度 度/-/ /-void main (void) long temperature; / 溫度 百分之一精度 度, temp_frac / 溫度的整數(shù)和小數(shù)部= 0 xde; / = 0 xad看門狗定時SYSCLK_Init / 初始化PORT_Init / 初始化數(shù)據(jù)交叉開關(guān)和通用IO口 UART0_In i t () ; / 初始化UART0ADC0_Init / 初始化和使能ADC whil e ( 1) = 0 清除轉(zhuǎn)換結(jié)束AD0BUSY = 1 ; / wh

45、ile (AD0 / tempera= 0 / 等待轉(zhuǎn)換結(jié)= = temperature - 41380temperature = (temperature * 100L) / 156= temperature / 100temp_frac = temperature - (* 100)f (“Temperature is %+02d.%02dn”, t,temp_frac) /-/ /-/-/ /-/ 此程序初始化系統(tǒng)時鐘 使用22.1184MHz晶體作/void SYSCLK_Init (voii ; / = 0 x67 / 起動外部振蕩器 221184MHz晶體 for ( i0 ; i

46、 256 ; i +) ; / /while ( !& 0 x80) ) ; / / = 0 x88 ; / 選擇外部振蕩器作為系統(tǒng)時鐘源并使能丟失時/-/ / IO/-/配置數(shù)據(jù)交叉開關(guān)和通用IO/idPORT_Init (voi= 0 x04 ; / 使能AN022-XBR1 = 0 x00XBR2 = 0 x40 ; / 使能數(shù)據(jù)交叉開關(guān)和弱上拉 P0MDOUT |= 0 x01 ; / 允許TX0為推挽輸出 P1MDOUT |= 0 x40 / 允許P16(LED)為推挽輸出/-XBR1 = 0 x00XBR2 = 0 x40 ; / 使能數(shù)據(jù)交叉開關(guān)和弱上拉 P0MDOUT |= 0

47、 x01 ; / 允許TX0為推挽輸出 P1MDOUT |= 0 x40 / 允許P16(LED)為推挽輸出/-/ UART0/-/ 配置UART0 使用定時器1產(chǎn)生/void UART0_Init (voiSCON0 = 0 x50 / SCON018位UART允許TMOD0 x20 ; / TMOD1時器, 模式28TH1= TR1= TI0 -(SYSCLK/BAUDRATE/16) ; / 按波特率設(shè)置定時器1重裝1 ; / 起動定時器|= 0 x10 ; / 定時器1|= 0 x80; / 1 ; / /-/ ADC0初始/-/使用AD0BUSY作為轉(zhuǎn)換源使用左對齊輸出模式模式, A

48、DC0轉(zhuǎn)換結(jié)束中斷和ADC0窗口比較器中void ADC0_Init (voi= 0 x81 / ADC0使能正模/當寫AD0BUSY時ADC0轉(zhuǎn)換開ADC0數(shù)據(jù)左=0 x07 / 使能溫度傳感器 片內(nèi)VREF和VREF輸出緩0 x0f; / 選擇溫度傳感器作為ADC多路模擬轉(zhuǎn)換器輸(SYSCLK2500000) 3 / ADC換時鐘=2 |= 0 x01; PGA增益ADC0 EOCADC0窗口比較器中斷EIE2&=0 x02; / EIE1&= 0 x04; /-/DAC0_DTMF1./-/SILICON LABS公司 作者: 日期目標器件工具KEIL AN022-/描述次例程源代碼在A

49、DC0輸出雙音多頻音調(diào) 根據(jù)常數(shù)確定的速率定時更新DAC0的輸并使用定時器4管理和定輸出頻率與16位相位加法器在每一個DAC更新周期, 相位加法器的值加到連續(xù)相位累加/描述次例程源代碼在ADC0輸出雙音多頻音調(diào) 根據(jù)常數(shù)確定的速率定時更新DAC0的輸并使用定時器4管理和定輸出頻率與16位相位加法器在每一個DAC更新周期, 相位加法器的值加到連續(xù)相位累加器,/-/ /-#include / /-/C8051F02X的16位SFR/-sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfDP = 0 x82 ; /

50、TMR3RL = 0 x92定時器3重裝TMR3 = 0 x94 ; / 定時器3 ADC= 0 xc4 ; / ADC0 于窗 ; / ADCRCAP2 = 0 xca ; / T2 捉T2 = 0 xcc ; / 定時器RCAP4 = 0 xe4 / 定時器4捕捉T4 = 0 xf4 ; / 定時器= 0 xd2 ; / DAC0 = 0 xd5 ; / DAC1 /-/ /-#defiSYSCLK 22118400 / 系統(tǒng)時鐘頻率 SLERATED 100000L / DAC更新率 65536 / 相位累加器/ DTMF相位加法器值是基于LERATED和phase_prec #defi

51、LOW697697 phase_preci phase_prec / / HI HI HI HI * /-/ /- main (void) ; SYSCLK_Init (void); PORT_Init (void)Timer4_Init counts) Timer4_ISR (void)/-AN022-/ /-unsignedphase_add1 ; 保存低音調(diào)相位/ /-unsignedphase_add1 ; 保存低音調(diào)相位加法器 unsignedphase_add2 ; 保存低音調(diào)相位加法器 bi t tone1_en ; / 為使能音調(diào)1b i t t one2_en ; / 為使能

52、音調(diào)2 char code SINE_TABLE256 = 0 x000 x180 x300 x470 x760 x7f, 0 x760 x470 x300 x180 x000 x960 x830 x800 x830 x960 xe80 x030 x330 x490 x770 x7 f, 0 x7c, 0 x750 x680 x580 x440 x150 xfd, 0 x940 x890 x820 x810 x840 x980 xeb0 x060 x1f, 0 x360 x780 x7 f, 0 x7c, 0 x730 x660 x550 x410 x120 xfa, 0 x930 x880

53、x820 x810 x840 xbf, 0 x090 x220 x390 x600 x6f, 0 x7f, 0 x7f, 0 x720 x640 x530 x3f, 0 x0 f, 0 xc7, 0 x910 x870 x810 x810 x850 xf10 x250 x510 x620 x700 x7f, 0 x7f, 0 x700 x620 x510 x250 x0c, 0 xc4, 0 xa f, 0 x900 x860 x810 x810 x860 x900 xa f, 0 xc4, 0 xf40 x0f, 0 x3f, 0 x530 x640 x720 x7f, 0 x7f, 0 x

54、6f, 0 x600 x390 x220 x09 0 x850 x810 x810 x870 x910 xf70 x120 x410 x550 x660 x730 x7c, 0 x7 f, 0 x780 x360 x1f, 0 xbf, 0 x840 x810 x820 x880 x930 xfa,0 x150 x440 x580 x680 x750 x7c, 0 x7 f, 0 x770 x490 x330 x030 x980 x840 x810 x820 x890 x940 xfd/-/ /-void main (void) = 0 xde; / SYSCLK_Init ()PORT_In

55、it ()= 0 x03 ; / 使VREF發(fā)生= 0 x97 / 使能DAC0為左對齊模/ / 使用定時器4AN022-Timer4_Ini t (SYSCLKLERATED) / 初始化定時器T4產(chǎn)生DAC0進度tone1_en = 1 ; / Timer4_Ini t (SYSCLKLERATED) / 初始化定時器T4產(chǎn)生DAC0進度tone1_en = 1 ; / 低組音調(diào)使能 tone2_en = 1 ; / 高組音調(diào)使能 phase_add1 = LOW697 phase_add2 = HI1633EA = 1 ; / while (1); /-/ /-/-/ /-/ 此程序初始

56、化系統(tǒng)時鐘 使用22.1184MHz晶體作/void SYSCLK_Init (voii ; / = 0 x67 / 啟動外部振蕩器 221184MHz晶體 for ( i0 ; i 256 ; i +) ; / /等待振蕩器啟動while (!& 0 x80) ; / 等待振= 0 x88 ; / 選擇外部振蕩器作為系統(tǒng)時鐘源并允許丟失時/-/ / IO/-/設(shè)置數(shù)據(jù)交叉開關(guān)和通用IO/id PORT_Init (voi=0 x000 x000 x40 ; / P1MDOUT |= 0 x40 / 允許P16(LED)為推挽/-/ / 定時器T4/-/ 此程序初始化定時器T4 自動重裝模式在

57、指定的時間間隔/voidTimer4_Init = 0 ; / 停止定時器; |= 0 x40 ; / T4M =1; 定時器T4= - counts; / T4 = RCAP4EIE2 |= 0 x04 ; / 允許定時器T4T4CON |= 0 x04 / 啟動定時器AN022-/-/ /-/-/ / 定時器T4/-/-/ /-/-/ / 定時器T4/-/ 此中斷服務(wù)程序是有定時器T4/ /和用來確定DAC輸出取樣/在調(diào)用中斷服務(wù)程序其間向DAC0H寫數(shù)值實際是在下一個定時器溢出時傳送到void Timer4_I(void)errup16 using icunsigned ic unsip

58、hase_acc1= 0; phase_acc2 = 0temp1 ; / temp2code *table_ptrT4CON &= 0 x80 / 清除定時器T4溢出標table_ptr = SINE_TABLEif (tone1_en) & (tone2_en) phase_acc1 += phase_add1 ; / 更新相位累加器1低音調(diào)) temp1 = *( table_ptr + (phase_acc1 8) ; phase_acc2 += phase_add2 ; / 更新相位累加器2(高音調(diào))/ temp2= *(table_ptr + (phase_acc2 8)/ 現(xiàn)在更

59、新DAC值 注意: 與0 x80DAC0H = 0 x80 (temp1 1) + (temp2 1) else if (tone1_en) phase_acc1 += phase_add1 更新相位累加器temp1= *(table_ptr + (phase_acc1 8)/ /現(xiàn)在更新DAC注意: 與0 x80異或?qū)㈦p極查表轉(zhuǎn)換成單DAC0H=0 x80 temp1 else if (tone2_en) phase_acc2 += phase_add2 更新相位累加器temp2= *(table_ptr + (phase_acc2 8)/ /現(xiàn)在更新DAC注意: 與0 x80異或?qū)㈦p極查表

60、轉(zhuǎn)換成單DAC0H=0 x80 temp2OSC_Cry1./-/ OSC_CRY1./-/ / Cygna l集成產(chǎn)作者: 日期AN022-/此例程說明如何配置外部振蕩器驅(qū)動22.1hz晶體假定一個22 . 1184Mhz晶體連接在XTAL1和XTAL2/此例程說明如何配置外部振蕩器驅(qū)動22.1hz晶體假定一個22 . 1184Mhz晶體連接在XTAL1和XTAL2目標器件: 工具: KEIL C51 603 / KEIL EVAL /-/ /-#include / /-/C8051F02X的16位SFR/-sfr16 sfr16 sfr16 sfr16 sfr16 sfr16 sfr16

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論