/*
HC-06藍牙模塊 ATmega16單片機
VCC----------------VCC
GND----------------GND
TXD----------------RXD(PD0端口,設置輸入)
RXD----------------TXD(PD1端口,設置輸出)
*/
/*ICCAVR7.2編程軟件*/
/*使用內部8M晶振*/
/*手機搜索下載<藍牙串口SPP>*/
/*頭文件*/
#include <iom16v.h>
#include <macros.h>
/*宏定義*/
#define uchar unsigned char
#define uint unsigned int
/*全局變量*/
uchar rdata;
uchar flag=0;
/*端口初始化*/
void IO_init(void)
{
DDRA = 0XFF;
DDRB = 0XF0;
DDRC = 0XFF;
//DDRD = 0XFF;
PORTA = 0X00;
PORTB = 0X00;
PORTC = 0XFF;
//PORTD = 0XFF;
}
/*延時函數*/
void delayms(uint i)
{
while(i--)
{
uint j;
for(j=1;j<=1332;j++);
}
}
/*串口初始化,波特率設置*/
void uart_init()
{
/*控制寄存器清零*/
UCSRB=0x00;
UCSRA=0x00;
/*異步模式,禁止奇偶校驗,停止位為1位,數據位為8位*/
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);
/*9600bps @8.0000MHZ 不倍數*/
UBRRH=(unsigned char)(0x33>>8);
UBRRL=(unsigned char)0x33;
/*接收、發送使能,接收中斷使能*/
UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
/*開全局中斷*/
SREG=BIT(7);
/*配置TX為輸出*/
DDRD|=0x02;
}
/*數據發送*/
void uart_senddata(uchar data)
{
/*第五位UDRE為高,數據寄存器空*/
while(!(UCSRA&(BIT(UDRE))));
/*發數據至UDR*/
UDR=data;
/*第六位TXC高, 發送結束*/
while(!(UCSRA&(BIT(TXC))));
/*置位TXC*/
UCSRA|=BIT(TXC);
}
/*數據接收中斷服務*/
#pragma interrupt_handler uart_recdata:12
void uart_recdata(void)
{
UCSRB&=~BIT(RXCIE);
rdata=UDR;
flag=1;
UCSRB|=BIT(RXCIE);
}
/*主函數*/
void main(void)
{
/*端口初始化*/
IO_init();
/*串口初始化*/
uart_init();
/*大循環*/
while(1)
{
/*接收到藍牙數據后發送*/
if(flag)
{
uart_senddata(rdata);
flag=0;
}
/*LED燈控制*/
switch(rdata)
{
case 0xFF:
PORTC=0xFE;
delayms(2000);
PORTC=0XFF;
break;
case 0xFE:
PORTC=0xFD;
delayms(2000);
PORTC=0XFF;
break;
case 0xFD:
PORTC=0Xfb;
delayms(2000);
PORTC=0XFF;
break;
case 0xFB:
PORTC=0xF7;
delayms(2000);
PORTC=0XFF;
break;
}
}
}
|