/*
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;
}
}
}
|