微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Atmega16单片机实用程序

Atmega16单片机实用程序

时间:12-01 来源:互联网 点击:

RTD|=BIT(7);

delayms(500);

PORTD&=~BIT(7);

delayms(20);

}

}

/*********************************************************

名稱: AD單次轉換子程序;

功能: 採樣AD通路0的電壓,該函數輸出為AD 轉換後的數據,

查詢工作方式

*********************************************************/

void ad_init()

{

ADMUX=0XC0; //設置AD輸入通道為0通道,內部2.56V參考電壓;

ADCSRA=0X80; //使能ADC,清中斷標誌ADIF,查詢方式;

DDRA&=~BIT(0); //設置PA0口為輸入;

PORTA&=~BIT(0); //PA0口清零;

}

int ad_conv() //單次轉換子程序,OK;

{

int addata;

ADCSRA|=BIT(ADSC); //啟動一次轉換;

while(!(ADCSRA&(BIT(ADIF)))); //查詢等待轉換結束標誌置位;

ADCSRA&=~BIT(ADIF);

addata=ADCL;

addata=addata+ADCH*256;

return addata;

}

int ad_aver() //轉換8次,做平均值濾波

{

int adaver,count;

for(count=7;count>0;count--)

{

adaver=ad_conv();

adaver+=adaver;

delayms(1);

}

adaver=adaver/8;

delayms(1);

return adaver;

}

/*********************************************************

名稱:AD採樣

功能:採樣AD0的電壓,內部2.56V參考電壓,中斷工作方式

**********************************************************/

void ad0_init()

{

ADMUX=0xc0;

adchannel=0;

ADCSRA=0x98;

DDRA&=~BIT(0);

PORTA&=~BIT(0);

SEI();

}

#pragma interrupt_handler process:15 //interrupt process program

void process()

{

int adcode=0;

ADCSRA&=~BIT(ADIE);

adcode=ADCL;

adcode=(ADCH<8)+adcode; //get adc value

/************************

中斷處理函數

*************************/

ADCSRA|=BIT(ADIE);

}

/********************************************************

名稱:DAC0832 DA轉換

輸入:有效分度0~255

輸出:無

功能:對8為數字信號進行DA轉換,實際應用需調試

********************************************************/

#define cs_low PORTD&=~BIT(0)

#define cs_high PORTD|=BIT(0)

#define wr1_low PORTD&=~BIT(1)

#define wr1_high PORTD|=BIT(1)

#define ile_high PORTD|=BIT(2)

#define ile_low PORTD&=~BIT(2)

#define wr2_low PORTD&=~BIT(3)

#define wr2_high PORTD|=BIT(3)

#define xfer_low PORTD&=~BIT(5)

#define xfer_high PORTD|=BIT(5)

void dac(int dadata)

{

Gpioinit1();

DDRD=0xff;

DDRC=0xff;

ile_high;

//delayus(1);

cs_low;

wr1_low;

//delayus(1);

PORTC=dadata;

//delayus(1);

wr1_high;

cs_high;

// delayus(1);

wr2_low;

xfer_low;

// delayus(1);

xfer_high;

}

/*****************************************************

名稱: 數據拆分顯示函數

功能: 將四位數據分別顯示到對應的數碼管。

*****************************************************/

void addisplay(int addat) //轉換數據顯示,運算OK;

{

int a;

a=addat;

show(a/1000,3);

delayms(2);

show((a/100)%10,2);

delayms(2);

show(((a/10)%10)/10,1);

delayms(2);

show(a%10,0);

delayms(2);

}

/**********************************************************

名稱:SPI通信

功能:應用mega16自身SPI通信模塊與外設進行通信.查詢方式;

***********************************************************/

void SPI_masterinit()

{

DDRB|=BIT(5)|BIT(7); //設置MOSI與SCK為輸出

DDRB&=~(BIT(4)&BIT(6)); //設置MISO與SS為輸入

SPCR|=BIT(4)|BIT(3)|BIT(1)|BIT(0); //數據高位先發送,主機模式,空閒時鐘極性

//為高,SCK起始沿採樣數據,128分頻

SPCR|=BIT(6); //使能SPI

delayms(1);

}

void SPI_mastertransdata(uchar data)

{

SPDR=data;

while(!(SPSR&BIT(7)));

}

void SPI_slaveinit()

{

}

void SPI_slaverecive()

{

}

/*********************************************************

名稱:比較匹配模式,,中斷方式,調試OK

功能:AVR比較匹配模式應用,當AIN大於AIN1時,上升沿產生中斷

**********************************************************/

void com_inti()

{

SEI(); //開總中斷;

DDRB&=((~BIT(2))&(~BIT(3))); //設置PB2/3口為輸入;

SFIOR&=~BIT(3); //設置AIN1為模擬比較器反向輸入端;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top