<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM8單片機ADC應用(IAR)

STM8單片機ADC應用(IAR)

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò ) 收藏
STM8片上集成了10位逐次比較型模數轉換器,在開(kāi)發(fā)板上有個(gè)電位器接到了AIN3,但沒(méi)有可以顯示數據的LED數碼管或LCD液晶顯示屏,怎么辦呢?可以把AD采集數據通過(guò)UART發(fā)送到電腦上顯示。

#i nclude

void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M內部RC經(jīng)2分頻后系統時(shí)鐘為8M
}

void GPIO_init(void)
{
PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3輸出
PD_CR1 = 0x08; // 設置PD3為推挽輸出
PD_CR2 = 0x80; // 使能PD7外部中斷
}

void EXTI_init(void)
{
EXTI_CR1 = 0x80; // PD口下降沿觸發(fā)中斷
}

本文引用地址:http://dyxdggzs.com/article/201611/320479.htm

#pragma vector=0x02
__interrupt void EXTI_PD7_TLI(void)
{
unsigned int value;
ADC_CSR &= ~0x80;//清除EOC轉換結束標志
ADC_CR1 |= 0x01; //開(kāi)始單次轉換
while(!(ADC_CSR&0x80)); //等待單次轉換完成
value = ((int)ADC_DRH<<2); // 先讀高8位,默認設置數據左對齊
value |= ADC_DRL; // 再讀低8位
while(!UART3_SR_TXE);
UART3_DR = value;// 通過(guò)UART3發(fā)送AD采樣結果
while(!UART3_SR_TXE);
UART3_DR = value>>8;
}

void ADC_init(void)
{
ADC_CSR = 0x03; // ADC輸入引腳AIN3
ADC_CR1 = 0x01; // ADC開(kāi)啟
}

void UART3_init(void)
{
UART3_BRR2 = 0x01;
UART3_BRR1 = 0x34; // 8M/9600 = 0x341
UART3_CR2 = 0x0C; // 允許接收,允許發(fā)送
}

void init_devices(void)
{
asm("sim");//禁止中斷
CLK_init();
GPIO_init();
EXTI_init();
ADC_init();
UART3_init();
asm("rim"); //使能中斷
}

void main( void )
{
init_devices();

//主循環(huán)里沒(méi)有程序需要執行
while(1);
}

在本例中僅使用了ADC的單次轉換模式,每按一次按鍵進(jìn)行一次AD轉換,并把轉換結果通過(guò)UART發(fā)送,這樣可以在電腦上通過(guò)超級終端或串口調試軟件查看數據。

通過(guò)這次測試,還發(fā)現一個(gè)現象,如果把清除EOC轉換結束標志放在讀取數據之后,那么在下次啟動(dòng)單次轉換后,EOC標志位會(huì )自動(dòng)置位,此時(shí)必須人為的等待7us后才能讀到正確的數據,否則只能讀到上一次的轉換數據,可能這是STM8的ADC與其他MCU不同之處。



關(guān)鍵詞: STM8單片機ADCIA

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>