娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月27日(星期五)

正在發(fā)生

2021年12月27日 | STM8單片機ADC采樣功能通過定時器觸發(fā)

發(fā)布者:丹青妙手 來源: eefocus關(guān)鍵字:STM8  單片機  定時器觸發(fā) 手機看文章 掃描二維碼
隨時隨地手機看文章

??在使用STM8單片機的ADC功能時,讀取ADC數(shù)據(jù)時一般有兩種方式,一種是通常不斷地讀取采樣標(biāo)志位,來判斷ADC采樣是否結(jié)束,一種是通過中斷的方式來通知系統(tǒng)采樣是否結(jié)束。


??有時候采樣ADC數(shù)據(jù)的時候,需要按照一定的時間間隔,定點的去采樣數(shù)據(jù)。一般使用的方式就是通過定時器定時,然后在定時中斷函數(shù)中再去讀取ADC采樣的數(shù)據(jù)。但是這種方式采樣的時間是不固定的,比如進(jìn)入定時器中斷后,ADC采樣剛結(jié)束,就可以直接使用當(dāng)前采樣到的數(shù)據(jù)。但是如果運氣不好的話,進(jìn)入定時中斷后,ADC采樣剛開始,那么此時就需要等到ADC采樣結(jié)束后,才能使用數(shù)據(jù)。這樣就好導(dǎo)致每次讀取ADC數(shù)據(jù)時還會有隨機的一段等到ADC數(shù)據(jù)的延時。


??通常查閱STM8單片機的手冊發(fā)現(xiàn),ADC采樣可以通過定時器來觸發(fā)。

在這里插入圖片描述

??通過定時器來觸發(fā)ADC采樣時,定時器的定時時間是固定的,采樣時間也是固定的,這樣采樣數(shù)據(jù)的間隔也就是固定的。這樣通過定時器來觸發(fā)ADC的采樣時間,就能完全保證每次讀取ADC采樣數(shù)據(jù)的時間間隔都是一樣的,從而避免了數(shù)據(jù)的誤差。


??數(shù)據(jù)手冊中對于開啟ADC觸發(fā)功能描述如下:

在這里插入圖片描述

??對于如何通過代碼來設(shè)置ADC觸發(fā),官方也沒有詳細(xì)的說明,在網(wǎng)上也沒有找到相關(guān)例程。所以只能自己摸索,還好通過自己的一番摸索,成功的通過定時器的TRGO事件觸發(fā)了ADC的啟動。


??關(guān)于ADC相關(guān)寄存器的設(shè)置,基本就是上面說的6條。接下來需要設(shè)置的就是定時器的相關(guān)寄存器。

在這里插入圖片描述

??關(guān)于定時器只需要設(shè)置CR2寄存器中的 MMS位就可以了。


??接下來就通過代碼來實現(xiàn)。


#include "adc.h"

#include "main.h"

#include "led.h"


u16  DATAH = 0;                          //ADC轉(zhuǎn)換值高8位

u16  DATAL = 0;                          //ADC轉(zhuǎn)換值低8位

_Bool ADC_flag = 0;                      //ADC轉(zhuǎn)換成功標(biāo)志


u16 adc_cnt = 0;

//AD通道引腳初始化

void ADC_GPIO_Init( void )

{

    PD_DDR &= ~( 1 << 2 );              //PD2 設(shè)置為輸入     

    PD_CR1 &= ~( 1 << 2 );              //PD2 設(shè)置為懸空輸入

    PD_DDR &= ~( 1 << 3 );              //PD3 設(shè)置為輸入     

    PD_CR1 &= ~( 1 << 3 );              //PD3 設(shè)置為懸空輸入

}

//ch 為單片機的ADC 通道

//ADC輸入通道初始化入口參數(shù)表示通道選擇

void ADC_CH_Init( u8 ch )

{

    char l = 0;

    ADC_CR1  = 0x00;                    //fADC = fMASTER/2, 8Mhz  單次轉(zhuǎn)換,禁止轉(zhuǎn)換

    ADC_CR2  = 0x00;                    //默認(rèn)左對齊 讀數(shù)據(jù)時先讀高在讀低

    

    ADC_CR2 |= ( 1 << 6 );              //外部觸發(fā)使能


    ADC_CSR  |= ch;                     //控制狀態(tài)寄存器 選擇要 AD輸入通道  如:PD2(AIN3)

    ADC_TDRL = ( 1 << ch  );            //禁止相應(yīng)通道 施密特觸發(fā)功能 1左移ch位

    ADC_CR1 |= 0x01;                    //使能ADC并開始轉(zhuǎn)換

    ADC_CSR |= ( 1 << 5 );              //EOCIE 使能轉(zhuǎn)換結(jié)束中斷  EOC中斷使能

    for( l = 0; l < 100; l++ );         //延時,保證ADC模塊的上電完成 至少7us

    ADC_CR1 = ADC_CR1 | 0x01;           //再次將CR1寄存器的最低位置1 使能ADC 并開始轉(zhuǎn)換

}


u16 value = 0;

//AD中斷服務(wù)函數(shù) 中斷號22

#pragma vector = 24                              // IAR中的中斷號,要在STVD中的中斷號上加2

__interrupt void ADC_Handle( void )

{

    ADC_CSR &= ~0x80;                            // 轉(zhuǎn)換結(jié)束標(biāo)志位清零  EOC

    //默認(rèn)左對齊 讀數(shù)據(jù)時先讀高高8位 再讀低8位

    DATAH = ADC_DRH;                             // 讀出ADC結(jié)果的高8位

    DATAL = ADC_DRL;                             // 讀出ADC結(jié)果的低8位

    ADC_flag = 1;                                // ADC中斷標(biāo)志 置1

    value = ( DATAH << 2 ) + DATAL ; //得到十位精度的數(shù)據(jù)  0--1024

    adc_cnt++;

    LED = !LED;

}


??在ADC代碼中,相比普通的ADC初始化方式,這里只需要增加一句對ADC_CR2寄存器的設(shè)置。


ADC_CR2 |= ( 1 << 6 ); //外部觸發(fā)使能

在這里插入圖片描述

??在ADC_CR2寄存器中 使能外部觸發(fā)轉(zhuǎn)換功能,設(shè)置外部觸發(fā)事件為 內(nèi)部定時器1 TRG事件。


??這里ADC使用的是單次觸發(fā)模式,開啟外部觸發(fā)功能,開啟ADC轉(zhuǎn)換中斷,當(dāng)ADC轉(zhuǎn)換完成之后,就會進(jìn)入到ADC中斷中,在中斷中讀取采樣的數(shù)據(jù),然后翻轉(zhuǎn)LED的狀態(tài),通過示波器觀察LED引腳電平的變化,就可以知道ADC中斷進(jìn)入的頻率了。


??接下來編寫定時器初始化代碼。


unsigned long time_cnt = 0;

// 使用 定時器觸發(fā) ADC采樣

void tim1_init( void )

{

    TIM1_ARRH = ( unsigned char )( 1000 >> 8 );         //定時1ms

    TIM1_ARRL = ( unsigned char )( 1000 );

    TIM1_PSCRH = ( unsigned char )( 0x0F >> 8 );        // 16M / (1+15) =1M

    TIM1_PSCRL = ( unsigned char )( 0x0F );

    TIM1_RCR = 0x00;                                    //重復(fù)計數(shù)器

    TIM1_SR1 = ( ~0x01 );                        //清除更新中斷標(biāo)志


    TIM1_CR2 |= ( 2 << 4 );                             //使能信號,用于觸發(fā)輸出(TRGO)

    

    TIM1_CR1 |= 0x01;                                   //使能計數(shù)器

    TIM1_IER |= 0x01;                            //更新中斷使能

}


#pragma vector  =  13                            //IAR中的中斷號,要在STVD中的中斷號上加2

__interrupt void Timer1_Handle( void )          //1ms 定時中斷

{

    TIM1_SR1 = ( ~0x01 );                        //清除更新中斷標(biāo)志

    time_cnt++;

}


??定時器的初始化代碼,也比正常情況下初始化代碼多了一行。


TIM1_CR2 |= ( 2 << 4 ); //使能信號,用于觸發(fā)輸出(TRGO)


??用來開啟定時的的TRG功能。

在這里插入圖片描述

??經(jīng)過測試,這里定時器CR2寄存器中的值 只能設(shè)置為 010 或者 011,設(shè)置為其他值時,不能觸發(fā)ADC采樣。最開始測試的時候按照芯片資料上這個說明,MMS的值設(shè)置的是 001,ADC總是觸發(fā)不了,還以為是方法的問題,最后才發(fā)現(xiàn)是MMS值設(shè)置的問題。


??ADC和定時器初始化代碼設(shè)置完成之后,接下來在主函數(shù)中初始化這兩個函數(shù)就行了,按照資料上說的,首先初始化完ADC之后,再初始化定時器。


void main( void )

{


    __asm( "sim" );                             //禁止中斷

    SysClkInit();

    delay_init( 16 );

    LED_GPIO_Init();

     ADC_GPIO_Init();

    ADC_CH_Init(3);

    tim1_init();

    __asm( "rim" );                             //開啟中斷

    while( 1 )

    {

       

    }

}

??接下來運行程序。

在這里插入圖片描述

??分別在ADC中斷中和定時器中斷中用一個變量來統(tǒng)計中斷執(zhí)行的次數(shù),通過變量變量觀察窗口可以看到,ADC中斷的次數(shù)比定時器中斷的次數(shù)多了1次。這是因為ADC在初始化的時候,已經(jīng)運行了一次。


??然后通過示波器觀察LED口的電平。

在這里插入圖片描述

??定時器的定時時間是1ms,LED的高低電平時間也是1ms,說明通過定時器觸發(fā)ADC采樣功能是正常運行的。


??為了減小系統(tǒng)進(jìn)入中斷的次數(shù),可以將定時器的中斷功能關(guān)閉掉。定時器中斷功能關(guān)閉后,ADC的觸發(fā)功能依然可以正常使用。

在這里插入圖片描述

??這樣只需要開啟一個ADC中斷,再加上定時器的TRG觸發(fā)功能后,就可以實現(xiàn)ADC定時采樣的功能了。

關(guān)鍵字:STM8  單片機  定時器觸發(fā) 引用地址:STM8單片機ADC采樣功能通過定時器觸發(fā)

上一篇:STM8單片機通過PWM觸發(fā)ADC同步采樣
下一篇:單片機快速將庫函數(shù)版代碼移植為寄存器代碼方法

推薦閱讀

  近日,蘭州新區(qū)最大規(guī)模的新能源車輛充電站正式上線運營。充電站由蘭州新區(qū)城市公共交通有限公司和蘭州特來電新能源有限公司攜手建設(shè),位于職教園區(qū)甘肅省體育館北側(cè)。可滿足公交車、旅游大巴、出租車等各類型新能源汽車的充電需求,同時容納15輛公交車在線充電,提供近50個停車位用于充電車輛停靠。   充電站實行自助車輛充電,可執(zhí)行刷卡、APP...
近年來,工廠用人成本不斷增高,工作效率難以保證,生產(chǎn)產(chǎn)能陷入瓶頸,給全球制造業(yè)增長帶來了巨大的挑戰(zhàn)。一直以來,制造業(yè)都是受人力因素影響最深的產(chǎn)業(yè)。以搬運操作工人為例,由于該工種人員流動性大,工廠經(jīng)常需要投入大量時間成本培養(yǎng)新員工。其次,由于物料和模具一般都很重,搬運工人在運輸和配送過程非常容易出現(xiàn)安全風(fēng)險。再者,由于受到體力和精...
所謂失之東隅,收之桑榆。盡管在芯片、智能手機等業(yè)務(wù)遭受禁令打擊,但華為旗下哈勃投資的業(yè)務(wù)回報卻著實豐厚。12月22日,燦勤科技通過科創(chuàng)板上市委審核,即將登陸A股。如無意外,它將是華為投出的第二家科創(chuàng)板上市公司。此前,華為投資的思瑞浦已經(jīng)成功上市,目前市值高達(dá)320億元。據(jù)投中網(wǎng)報道,在燦勤科技之后還有多家華為的被投企業(yè)正在上市進(jìn)程中,東...
1 燒寫:燒寫和4412默認(rèn)鏡像的燒寫類似,使用fastboot。先更新uboot,用4412默認(rèn)uboot更新支持設(shè)備樹的uboot 用支持設(shè)備樹的uboot燒寫。進(jìn)入支持設(shè)備樹的uboot控制臺支持設(shè)備樹的uboot控制臺,使用命令:fastboot 0 這里可能需要更新一下驅(qū)動,使用驅(qū)動精靈自動安裝即可。在cmd命令行,用fastboot燒寫: fastboot.exe flash bootloader u-boo...

史海拾趣

問答坊 | AI 解惑

純C語言的程序,為什么使用 SHLoadImageFile 函數(shù)編譯后執(zhí)行就提示“不是有效的 Windows CE 應(yīng)用程序”?

我的WinCE程序是純 C 語言的Win32的程序(源文件的擴展名都是.c的),不使用 SHLoadImageFile 函數(shù),程序能執(zhí)行。為什么使用 SHLoadImageFile 函數(shù)編譯后執(zhí)行就提示“不是有效的 Windows CE 應(yīng)用程序”?…

查看全部問答∨

串口助手發(fā)送數(shù)據(jù)通過單片機控制l ed屏顯示?

目的是 用vb通過單片機控制led屏。現(xiàn)在先用串口助手試下。我想用串口助手先發(fā)一個數(shù)過去,點亮led屏的一個小燈,在依次累加。led屏是用74hc595串起來的。其間也想把單片機接收的數(shù)據(jù)回顯到串口助手來證明接受無誤。以前直接燒程序控制屏?xí)r點亮第一 ...…

查看全部問答∨

給8051供電的+5V電源如何實現(xiàn)?

譬如220的市電,如何給8051供電呢?…

查看全部問答∨

stm32L152開發(fā)工具

申請了幾片stm32L152RB樣片開發(fā)產(chǎn)品,請問在哪里可以下到支持此款型號的keil版本或者升級包?…

查看全部問答∨

關(guān)于用LM3S811做一個接觸式IC讀卡器的問題

是這樣的本人剛剛接觸這個新型的單片機有很多不理解的地方,就是我想問一下我要用這個新型的單片機要如何做出一個接觸式IC卡讀卡器來。汗顏一個,我對于這個單片機的引腳不怎么清楚?麻煩各位有時間的可以給說一下嗎?…

查看全部問答∨

一個進(jìn)程監(jiān)控腳本程序

############################## #功能:監(jiān)控指定的進(jìn)程是否正常運行,如果運行則休眠,過一段時間再檢測一下, #          如果監(jiān)控的進(jìn)程沒有運行,則啟動該程序 ########################### ...…

查看全部問答∨

OPT-538U傳感器基礎(chǔ)問題

誰能告訴我OPT-538U傳感器能用51單片機嗎?能的話具體怎么連接,時序圖是什么樣的,英文的資料看著確實很費勁,謝謝各位了。…

查看全部問答∨

請問各位大蝦,我需要用到SDram和SSI1,可以復(fù)用嗎?

如題,因為SDRAM的信號線和SSI1的被復(fù)用了,不知道能不能在啟用SDRAM的時候啟用SSI1,如下圖所示: 比如,把CLK啟用在PF2,把TX啟用在PH7這種。謝謝!而不是把所有信號線啟用在同一個端口,比如PortE…

查看全部問答∨

用XST綜合工具check syntax工程時,提示如下錯誤

ERROR:HDLParsers:3375 - "D:/FPGA_code/p240_fir2/p240_fir2.vhd" Line 66. Choices for an array aggregate (Attribute name) must be locally static unless there is only one choice. (LRM 7.3.2.2)代碼如下:library IEEE;use IEEE.STD_LOGIC ...…

查看全部問答∨

EEWORLD下載中心鼎力奉獻(xiàn)“寫給大家看的C語言書”,讓你輕松玩轉(zhuǎn)C語言

EEWORLD下載中心鼎力奉獻(xiàn)“寫給大家看的C語言書”,讓你輕松玩轉(zhuǎn)C語言 EEWORLD下載中心正式上線一年多了,現(xiàn)在資源數(shù)量已經(jīng)超過50萬,這與廣大網(wǎng)友的關(guān)注和努力是分不開的。 對于一個資源中心來書,10萬的資源數(shù)量已經(jīng)囊括了日常所用資源的絕大部 ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 隆昌县| 永顺县| 陆河县| 彝良县| 临澧县| 阳泉市| 巴里| 绥宁县| 皮山县| 营山县| 且末县| 三亚市| 左权县| 石城县| 南和县| 如皋市| 宁南县| 临桂县| 鄂温| 阜宁县| 德昌县| 九龙城区| 焦作市| 安岳县| 台南县| 锡林浩特市| 德庆县| 曲靖市| 凤山市| 科尔| 彰化县| 斗六市| 米泉市| 宣威市| 凤冈县| 五峰| 寿阳县| 金平| 安宁市| 南木林县| 洛浦县|