ATmega16单片机蓝牙串口控制程序

发布者:那是一条路都最新更新时间:2019-10-19 来源: 51hei关键字:ATmega16  单片机  蓝牙  串口控制 手机看文章 扫描二维码
随时随地手机看文章

/*

          HC-06蓝牙模块      ATmega16单片机

        

        VCC----------------VCC

        GND----------------GND

        TXD----------------RXD(PD0端口,设置输入)

        RXD----------------TXD(PD1端口,设置输出)

        

*/


/*ICCAVR7.2编程软件*/

/*使用内部8M晶振*/

/*手机搜索下载<蓝牙串口SPP>*/


/*头文件*/

#include

#include

/*宏定义*/

#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<        /*9600bps @8.0000MHZ 不倍数*/

        UBRRH=(unsigned char)(0x33>>8);

        UBRRL=(unsigned char)0x33;

        /*接收、发送使能,接收中断使能*/

        UCSRB=(1<        /*开全局中断*/

        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;

                }

        }

}


关键字:ATmega16  单片机  蓝牙  串口控制 引用地址:ATmega16单片机蓝牙串口控制程序

上一篇:使用excel制作的AVR寄存器配置助手---轻松搞定AVR
下一篇:Atmega16l单相逆变器SPWM原理图PCB及源程序

推荐阅读最新更新时间:2024-11-07 11:29

51单片机位传送指令MOV
MOV C,BIT MOV BIT,C 这组 指令 的功能是实现位累加器(CY)和其它位地址之间的数据传递。 例:MOV P1.0,CY ;将CY中的状态送到P1.0管脚上去(如果是做算术运算,我们就能通过观察知道现在CY是多少啦)。 MOV P1.0,CY ;将P1.0的状态送给CY。
[单片机]
Atmega16的定时器1使用
//经验正以下程序是正确的,可以实现LED 1s亮 1s灭 #include avr/io.h #include avr/interrupt.h #define uchar unsigned char #define uint unsigned int uint count; void init() { DDRB|=_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7); PORTB&=~(_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7)); //TCNT0=155;//初值为55,即记数到255-155=100次溢出并进入定时器0中断函数 TCNT1H=(65536-10000)/
[单片机]
ATmega 16 单片机的中断系统的相关寄存器(八)
复位和中断向量 向量号 程序地址 中断源 中断定义 1 0x000 RESET 外部引脚电平引发的,上电的,掉电检测的,看门狗,及JTAG AVR复位 2 0x002 INT0 外部中断请求0中断 3 0x004 INT1 外部中断请求1中断 4 0x006 TIMER2 COMP定时器/计数器2比较匹配中断 5 0x008 TIMER2 OVF定时器/计数器2溢出中断 6 0x00A TIMER1
[单片机]
从零开始51单片机学习教程——连载2 单片机简叙
1、 什么是单片机 一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。 天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!
[单片机]
stc51单片机硬件SPI驱动nrf24l01程序
stc51系类单片机大多数带SPI模块,例如STC12C5608AD,就带有SPI口,可以直接用此SPI口驱动nrf24l01,省去模拟SPI的麻烦。 spi初始化代码如下: void SPI_Init(void) { SPSTAT |= 0XC0; // 清高两位, SPCTL = 0XD0; // 设置为主模式,开SPI } spi收发数据代码如下: uchar SPI_RW(uchar tr_data) { uchar i=0; SPSTAT |= 0Xc0; // 清高两位, SPDAT=tr_data; while(((SPSTAT&0X80)!=0X80)&&(i 20)) { i++; delay_ms(1)
[单片机]
51单片机计时器实现1000以内的计数功能
#include reg51.h #include intrins.h unsigned char code LED7Code = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0-9字模 0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极7段数码管A-F字模,原来的是错误的. unsigned char num,temp; unsigned int a, b,c; void system_init() { EA=1; //开中断总开关 ET0=1;//加一行,开定时器T0中断 TMOD=0x01; //定时
[单片机]
TI全球首款多标准MCU无线平台是什么样子的
从电视机遥控到无线耳机,从智能家居到上网冲浪,无线应用无处不在,我们的生活因此方便了许多。不过有些工程师不这么想,由于应用场合的不同,无线特点与标准各有差异,给开发者带来诸多困扰,尽管可以提前根据应用场景选择合适的技术,但复杂的网络标准及无线设计仍是阻碍创新的一大因素。 为了解决工程师们的普遍困扰,德州仪器推出全球第一款同时支持2.4GHz与Sub-1GHz双频段的无线MCU CC1350,集成包括蓝牙,ZigBee,RF4CE,Sub-1GHZ等多种物联网无线协议与射频,一颗芯片就解决了开发者的选型困扰。 比如在网络摄像头的应用中,一方面我们可能需要用手机通过蓝牙控制云台,另外也需要摄像头之间进行Sub-1GHz协议的
[物联网]
TI全球首款多标准<font color='red'>MCU</font>无线平台是什么样子的
GD32 MCU启动后如何运行到main函数
GD32 MCU启动后如何运行到main函数入口?你是否也有这样的疑虑。在执行到main函数之前MCU干了哪些事情呢?下面为大家解答。 MCMCU上电后,首先会根据BOOT0和BOOT1的状态判断从主Flash/SRAM/ISP中启动,如果BOOT0为低电平,MCU将会从主Flash中启动,即主Flash中的数据会被映射到0x0000 0000地址,ARM处理器将会从0x0000 0000地址获取栈顶指针,再从0x0000 0004获取复位中断入口地址(引导代码基地址),如下图所示,我们随便打开一个bin文件,前4个字节为MSP堆栈指针,之后四个字节为复位中断入口地址,之后为中断向量表。 MCU找到堆栈指针和复位中断入口
[单片机]
GD32 <font color='red'>MCU</font>启动后如何运行到main函数
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved