久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

AVR單片機串口操作程序

作者:善良死神   來源:互聯網   點擊數:  更新時間:2014年06月05日   【字體:

 #include

#include
#include
#include
#include
 
 
#define FOSC 8000000 //mcu工作時鐘頻率
 
 
typedef unsigned int uint16;
typedef unsigned char uchar8;
 
 
uchar8 DoubleIRData[25]={0x64,0x00,0x20,0x04,0x40,0x00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //雙紅外發射數據 取PD2作為驅動遠程紅外發射
//uchar8 SingleIRData[25]={0x60,0x00,0x04,0x00,0x04,0x00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} //取PD2作為驅動遠程紅外發射 //取PD3驅動紅外發射
 
 
uchar8 BitCount=0; //載波計數
uchar8 BetyCount=0; //位計數
volatile uchar8 UsartDataBuff=0;
volatile uchar8 ChargeFlag=0,LED_Count;
volatile uchar8 SYSCount=0;
volatile uint16 ADCCurrent1=0; //AD0轉換結果  電壓檢測
volatile uint16 ADCCurrent3=0; //AD3結果轉換 電流檢測
 
 
void Port_Init(void)
{
DDRA  = 0b00000000;     //AD采樣 PA0 PA1
PORTA = 0b00000000;     //PA口:初始化0
//PB PC 沒有使用
DDRD  = 0b11111110;     //PD2 為遠程紅外發射 PD3 和 PD4 狀態指示燈,P3未充電 P4表示充電 PD5和PD6 雙紅外近區發射 PD7 開關充電使能
PORTD = 0b00000011;     //初始化輸出為0 其中USART 接收口上拉高電平 等待接收中斷
 
 
}
 
 
void ADC_Init(void)
{
ADCSRA=0x00; //ADC控制狀態寄存器
ADMUX =0x40; //ADC 多工選擇寄存器 參考電壓為AVCC,其中AREF 引腳外加濾波電容 數據右對齊結果選擇0通道
ACSR  =(1<<ACD);        //模擬比較器控制和狀態寄存器 關閉模擬比較器 這里可以節約電能
ADCSRA=(1<<ADEN)|(1<<ADSC)|_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0);  //AD使能,禁止自動觸發,中斷標志,64分頻,AD中斷不使能,ADC轉換啟動
}
 
 
 
 
 
 
uint16 ADC_Read(unsigned char Channelx)
{
 
 
uint16 ADTempValue;
ADMUX=0xc0|(Channelx&0x0f);//ADMUX = 0xe0|Channelx; //2.56V 的片內基準電壓源, AREF 引腳外加濾波電容 數據右對齊結果
ADCSRA|=(1<<ADSC);      //啟動AD轉換
loop_until_bit_is_set(ADCSRA,ADIF); //等待AD轉換結束其實也可以采用中斷方式來讀
ADCSRA|=(1<<ADIF);                                             //寫1清除標志位
ADTempValue=ADC&0x3ff;                                           //ADC=0000 00ADCH ADCL 共16
  return ADTempValue;
}
 
 
 
 
void Timer0_Init(void)
{
TCCR0 = 0x00; //定時器0的控制寄存器,初始化時停止定時器
TCNT0 = 0x00; //計數器的初始值
OCR0  = 210; //設置比較值 設置為210 8M時鐘 大概是38K 實現紅外發射
TIMSK|= 0x02; //開比較匹配中斷使能
}
 
 
void Timer2_Init(void)
{
TCCR2  = 0x00;              //停止定時器
TCNT2  = 203;               //初始值(1/8000000)*(255-203)=0.0000065
TIMSK |= 0x40; 
}
 
 
void Timer1_Init(void)
{
TCCR1A = 0x00;
TCCR1B = 0x0b;
OCR1AH = 0xf4;
OCR1AL = 0x24;
TIMSK |= 0x10;
}
 
 
 
 
 
 
void Usart1_Init(uint16 baud)
{
UCSRB=0;
//UCSRA為默認值
UBRRL=(FOSC/16/baud-1)%6;//UBRRH = ((uchar8 *)(&baud))[1];
UBRRH=(FOSC/16/baud-1)/256;//UBRRL = ((uchar8 *)(&baud))[0];
UCSRC |=(1<<URSEL)|(3<<UCSZ0); //8位數據
UCSRC &= ~((1<<UPM1)|(1<<UPM0)|(1<<USBS))|(1<<UCPOL);//異步無校驗 1個停止位
// UCSRC |=(3<<UCSZ0);
UCSRB |= (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//UCSRB = (1<<RXEN)|(1<<TXEN)
}
 
 
 
 
//uchar8 Usart_Read(void)
//{
 
 
// UCSRB |= (1<<RXEN);
// loop_until_bit_is_set(UCSRA,RXC);//等待Usart成功接收
// return UDR;
//}
ISR(SIG_USART_RECV)
{
UCSRB &= ~(1<<RXCIE); //關中斷
UsartDataBuff=UDR;
 
 
UCSRB |= (1<<RXCIE); //開中斷
 
 
}
 
 
 
 
ISR(TIMER0_COMP_vect)
{
PORTD=(PIND&0x9b)|DoubleIRData[BetyCount];
TCCR2  = 0x01;
}
 
 
 
 
 
 
ISR(TIMER2_OVF_vect)
{
PORTD=PIND&0x9F;
TCCR2  = 0;
TCNT2  = 203;
BitCount++;
if(BitCount>=66)//波特率=1/(0.00002625S*66)=577
{
BetyCount++;
if(BetyCount>=20)//25
{
//TCCR0=0;
//TCCR2=0;
BetyCount=0;
}
BitCount=0;
}
}
 
 
ISR(TIMER1_COMPA_vect)
{
SYSCount=1;
}
 
 
void Usart_send(uchar8 data)
{
while(!(UCSRA&(1<<UDRE)));
UDR=data;
}
 
 
int main(void)
{
MCUCR=0x00;
Port_Init();
Timer0_Init();
Timer1_Init();
Timer2_Init();
ADC_Init();
Usart1_Init(581);//581
sei();          //開全局中斷關全中斷cli()
TCCR0  = 0x09;
TCCR2  = 0x01;
while(1)
{
 
 
if(SYSCount==1)
{
Usart_send(UsartDataBuff);
SYSCount=0;
if(ChargeFlag==1)
{
PORTD|=(1<<PD4);
PORTD&=~(1<<PD3);
}
else
{
PORTD&=~(1<<PD4);
PORTD|=(1<<PD3);
}
if((PORTD&0x80)==0x80)//充電中
{
ADCCurrent1=ADC_Read(1); //電壓檢測 用
ADCCurrent3=ADC_Read(3); //選3通道 與電路不符 主要因為實驗板上0通道損壞 所以跳線3通道修正時間:2014.5.28 
if(ADCCurrent3==0)//電流為0停止供電//0
{
PORTD&=~(1<<PD7);
ChargeFlag=0;
}
}
else
{
ADCCurrent1=ADC_Read(1);
if(ADCCurrent1>=200)//電壓大于開始供電//200
{
PORTD|=(1<<PD7);
ChargeFlag=1;
}
else
{
ChargeFlag=0;
}
}
 
 
//UsartDataBuff=Usart_Read();
if(UsartDataBuff)
{
}
}
//i=((uchar8 *)(&k))[0];
//j=((uchar8 *)(&k))[1];
}
}
 
關閉窗口

相關文章

主站蜘蛛池模板: 先锋影音资源网站 | 国产99久久 | 成人不卡在线 | 日韩在线视频免费观看 | 免费精品在线视频 | 成人精品国产免费网站 | 美女爽到呻吟久久久久 | 国产xxx在线观看 | 亚洲欧美一区二区三区国产精品 | 久久精品a| 伊人影院99 | 精品久久久久久久久久久久久久久久久 | 在线播放国产一区二区三区 | 欧美日韩国产在线 | 久久一二 | 久久精品免费 | 午夜二区| 毛片一区 | 一区二区三区四区不卡视频 | 日韩欧美不卡 | 一本大道久久a久久精二百 欧洲一区二区三区 | 国产在线精品免费 | 亚洲欧美视频 | 国产伦精品一区二区三区四区视频 | 欧美在线视频一区二区 | 最新日韩精品 | 91精品国产综合久久久久久丝袜 | 一区二区三 | 一区二区播放 | 看av片网站 | 国产日韩久久 | 欧美在线一区二区视频 | 日日夜夜免费精品视频 | h片在线免费看 | 久久国产精品网 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 69av片| 国产精品中文字幕在线观看 | 欧美日韩高清免费 | 久久99精品国产 | 精品一区二区在线视频 |