?? m16adc.c
字號(hào):
/*******************************************************************
實(shí)驗(yàn)七
實(shí)驗(yàn)名稱: ADC轉(zhuǎn)換實(shí)驗(yàn)
實(shí)驗(yàn)?zāi)康? 學(xué)習(xí)AVR單片機(jī)的ADC功能
實(shí)驗(yàn)現(xiàn)象: 串口發(fā)送命令開(kāi)啟一次ADC,并將結(jié)果通過(guò)串口發(fā)送到PC,任意字符開(kāi)始
環(huán) 境: ICCAVR6.31A
設(shè) 計(jì) 者: shinea8868
說(shuō) 明: 部分程序原型源自網(wǎng)絡(luò),經(jīng)本人修改調(diào)試可用,請(qǐng)尊重知識(shí)產(chǎn)權(quán),如
作商業(yè)用途請(qǐng)保留本段文字
完成日期: 2007年4月10日
*******************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "..\ICC_H\SOFTWARE.h"
uchar UcAdcData; //ADC轉(zhuǎn)換的結(jié)果
uchar AdcConCom = 0; //ADC轉(zhuǎn)換完成標(biāo)志
uchar admuxx = 0x67; //外部參考源,數(shù)據(jù)存儲(chǔ)左對(duì)齊方式
/*--------------------------------------------------------------------
功 能: ADC轉(zhuǎn)換初始化設(shè)定
入口參數(shù):
返 回 值:
--------------------------------------------------------------------*/
void AdcInit(void)
{
ADCSR = 0x00; //ADC無(wú)效
ADMUX = admuxx; //選擇ADC通道7
/*--REFS1---REFS0---ADLAR---0--------------參考電源選擇------對(duì)齊方式--------*/
/*--0000-- 0001-- 0010-- 0011-- 0100-- 0101-- 0110-- 0111-- 1110--- --1111---*/
/*--通道0--通道1--通道2--通道3--通道4--通道5--通道6-通道7--1.23V(VBG)-0V(GND)*/
ACSR = 0x80; //模擬比較器控制和狀態(tài)寄存器 ACSR
//ACD置1,使模擬比較器禁用
/*--ACD--ACBG--ACO--ACI---ACIE---ACIC---ACIS1---ACIS0------------------------*/
/*-模擬比較起禁用--模擬比較器的能隙基準(zhǔn)源--模擬比較起輸出--模擬比較器中斷標(biāo)志*/
/*-模擬比較器中斷使能--模擬比較器輸入捕捉使能--模擬比較器中斷模式選擇--------*/
ADCSR = 0x8B;//模擬比較起控制和狀態(tài)寄存器
/*-----------ADEN---ADSC---ADFR---ADIF---ADIE---ADPS2---ADPS1---ADPS0--------*/
//使能模數(shù)轉(zhuǎn)換 ADC開(kāi)始轉(zhuǎn)換 ADC連續(xù)轉(zhuǎn)換 ADC中斷使能 128分頻
}
/*-----------------------ADC轉(zhuǎn)換中斷程序--------------------------------------*/
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
UcAdcData = ADCH; //讀ADC轉(zhuǎn)換結(jié)果
AdcConCom = 1; //置ADC轉(zhuǎn)換完成標(biāo)志
}
/*-----------------------------------------------------------------
函數(shù)名稱: void Uart0Init(void)
函數(shù)功能: 串口初始化
波特率 9600 0.2% 字符長(zhǎng)度 8bit 無(wú)奇偶校驗(yàn)
參 數(shù):
返 回 值: 無(wú)
-----------------------------------------------------------------*/
void Uart0Init(void)
{
UCSRB = 0x00; //關(guān)串口
UCSRA = 0x02; //倍速模式 M16中文P151
UCSRC = BIT(URSEL) | 0x06; //寫(xiě)UCSRC寄存器,設(shè)定8個(gè)bit
UBRR = 0x000c; //設(shè)定串口波特率為9600
UCSRB = 0x98; //開(kāi)串口
}
/*-----------------------------------------------------------------
函數(shù)名稱: void Uart0Init(void)
函數(shù)功能: 串口初始化
波特率 9600 0.2% 字符長(zhǎng)度 8bit 無(wú)奇偶校驗(yàn)
參 數(shù):
返 回 值: 無(wú)
-----------------------------------------------------------------*/
#pragma interrupt_handler UartRecvData:12
void UartRecvData(void)
{
uchar temp;
temp = UDR;
ADMUX |= 0x07;
ADCSR |= 0x40; //開(kāi)啟一次ADC轉(zhuǎn)換
}
/*-----------------------------------------------------------------
函數(shù)名稱: void UartTransmitData(void)
函數(shù)功能: 發(fā)送字符串
參 數(shù):
返 回 值: 無(wú)
-----------------------------------------------------------------*/
void UartTransmitData(void)
{
while(!(UCSRA&0x20)); //判斷數(shù)據(jù)寄存器是否為空
UDR = UcAdcData;
}
/*-----------------------------------------------------------------
函數(shù)名稱: void InitDevices(void)
函數(shù)功能: 初始化各種信息
參 數(shù):
返 回 值: 無(wú)
-----------------------------------------------------------------*/
void InitDevices(void)
{
CLI(); //關(guān)全部中斷
Uart0Init();
AdcInit();
MCUCR = 0x00;
SEI(); //開(kāi)全中斷
}
void main(void)
{
// uchar i;
InitDevices();
while(1)
{
if( AdcConCom)
{
AdcConCom = 0; //清ADC轉(zhuǎn)換完成標(biāo)志
UartTransmitData(); //發(fā)送轉(zhuǎn)換結(jié)果
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -