avr蓝牙串口通信问题,已经配对上。但是无法接受不到单片机上的信号。把rxd和txd短路后可以收到 20
avr蓝牙串口通信问题,已经配对上。但是无法接受不到单片机上的信号。把rxd和txd短路后可以收到信号。如图。部分代码:#include<iom16v.h>#includ...
avr蓝牙串口通信问题,已经配对上。但是无法接受不到单片机上的信号。把rxd和txd短路后可以收到信号。如图。
部分代码:
#include <iom16v.h>
#include <macros.h>
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
#define mclk 8000000
uchar rdata,flag=0;
void uart_init(uint baud)
{
UCSRB=0x00;
UCSRA=0x00; //控制寄存器清零
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);
//选择UCSRC,异步模式,禁止
// 校验,1位停止位,8位数据位
baud=mclk/16/baud-1 ; //波特率最大为65K
UBRRL=baud;
UBRRH=baud>>8; //设置波特率
UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
//接收、发送使能,接收中断使能
SREG=BIT(7); //全局中断开放
DDRD|=0X02; //配置TX为输出(很重要)
}
void uart_send(uchar data) //发送数据
{
while(!(UCSRA&(BIT(UDRE)))) ;
UDR=data;
while(!(UCSRA&(BIT(TXC))));
UCSRA|=BIT(TXC);
}
#pragma interrupt_handler uart_recieve:12
void uart_recieve() //接受数据中断函数
{
UCSRB&=~BIT(RXCIE);
rdata=UDR;
flag=1;
UCSRB|=BIT(RXCIE);
}
void main()
{
DDRB =0XFF; //端口输出
PORTB=0XFF;
uart_init(9600);
while(1)
{
uart_send('1');delay_ms(10);
uart_send('2');delay_ms(10);
uart_send('3');delay_ms(10);
uart_send('4');delay_ms(10);
if(flag)
{
switch(rdata)
{
case '1' :PORTB=~(BIT(0)| BIT(1) | BIT(2));
uart_send('1');delay_ms(10);break ; 展开
部分代码:
#include <iom16v.h>
#include <macros.h>
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
#define mclk 8000000
uchar rdata,flag=0;
void uart_init(uint baud)
{
UCSRB=0x00;
UCSRA=0x00; //控制寄存器清零
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);
//选择UCSRC,异步模式,禁止
// 校验,1位停止位,8位数据位
baud=mclk/16/baud-1 ; //波特率最大为65K
UBRRL=baud;
UBRRH=baud>>8; //设置波特率
UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
//接收、发送使能,接收中断使能
SREG=BIT(7); //全局中断开放
DDRD|=0X02; //配置TX为输出(很重要)
}
void uart_send(uchar data) //发送数据
{
while(!(UCSRA&(BIT(UDRE)))) ;
UDR=data;
while(!(UCSRA&(BIT(TXC))));
UCSRA|=BIT(TXC);
}
#pragma interrupt_handler uart_recieve:12
void uart_recieve() //接受数据中断函数
{
UCSRB&=~BIT(RXCIE);
rdata=UDR;
flag=1;
UCSRB|=BIT(RXCIE);
}
void main()
{
DDRB =0XFF; //端口输出
PORTB=0XFF;
uart_init(9600);
while(1)
{
uart_send('1');delay_ms(10);
uart_send('2');delay_ms(10);
uart_send('3');delay_ms(10);
uart_send('4');delay_ms(10);
if(flag)
{
switch(rdata)
{
case '1' :PORTB=~(BIT(0)| BIT(1) | BIT(2));
uart_send('1');delay_ms(10);break ; 展开
展开全部
rxd和txd信号连接肯定又返回,而且是发什么返回什么,要不就是通讯协议有问题,要不就是接线问题
追问
通信协议?蓝牙的问题?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是RXD/TXD信号线接反了吧?
更多追问追答
追问
rxd。 pd0
txd。 pd1
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询