Atmega16单片机实用程序
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為模擬比較器反向輸入端;
Atmega16单片机实用程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)