打印

串口相关问题

[复制链接]
1152|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsgy123|  楼主 | 2012-5-22 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <avr/io.h>#include <avr/interrupt.h>
//晶振频率   
#define fosc 8000000UL   
//波特率   
#define baud 9600   
void Init_Usart(void)  
{  
    UCSRB
=(1<<RXEN)|(1<<TXEN);//允许收发,打开接收中断
    UBRRL=(fosc/16/(baud+1))%256;//设置波特率寄存器
    UBRRH=(fosc/16/(baud+1))/256;
    UCSRC
=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP
   
//UCSRB = 0x98;  //允许接收和发送,使能接收中断
}  
  
void Send_Char(char data)  
{  
   
//查询方式发送   

while(!(UCSRA & (1
<< UDRE)));  
    UDR
= data;  
}  

void delay(unsigned int uiD)
{
   
for (; uiD; uiD--);
}

void poweroff()
{
   
if(!(PINC&0x10))
    {
        delay(
30);
        
if(!(PINC&0x10))
            {
while(!(PINC&0x10));PORTC|=(1<<PC3);}
    }
}  
//主函数   

int main(void)  
{     
    DDRD
|=
0x02;
    PORTD
|=
0x00;
    DDRC
|=(1<<DDC3);
    PORTC
&=~(1<<PC3);
    PORTC
|=(1<<PC4);
    DDRC
&=~(1<<DDC4);//开关机电平检测
    DDRD|= (1<<DDD5);
    PORTD
&=
~(1<<PD5);
    Init_Usart();  
   
char i=0,j=0;
   
//总中断使能   
    sei();  
    delay(
400);
   
//发送一个字符a   
    Send_Char('a');  
   
while(!(PINC&0x10));//等待开机键松开  

for (j=0;j<10;j++)
    {
        Send_Char(
'f');  
    }
   
while(1)
    {
        
if (i++==1)
        {
            poweroff();
        }   
    }  
  
   
return
0;  
}


在烧录程序的时候是可以正常发送的,但用电池供电的时候就只发送一个16进制的00
我的板子是3v供电的,请问是电源的问题吗?

相关帖子

沙发
无冕之王| | 2012-5-22 15:06 | 只看该作者
感觉应该是电源的问题

使用特权

评论回复
板凳
pkat| | 2012-5-22 15:12 | 只看该作者
还是得自己测试一下

使用特权

评论回复
地板
txcy| | 2012-5-22 15:24 | 只看该作者
的确是很奇怪,检查下电源

使用特权

评论回复
5
秋天落叶| | 2012-5-22 15:26 | 只看该作者
应该是电源部分设计有问题

使用特权

评论回复
6
shenmu2012| | 2012-5-24 09:46 | 只看该作者
晶振的正常工作被影响了啊?顺便问下你的晶振是有源的还是无源的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

229

主题

2603

帖子

1

粉丝