当前位置: 代码迷 >> 单片机 >> mega8串口有关问题
  详细解决方案

mega8串口有关问题

热度:103   发布时间:2016-04-28 15:56:01.0
mega8串口问题
C/C++ code
#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供电的,请问是电源的问题吗?

------解决方案--------------------
程序看起来似乎没啥问题,用电表测下供电电压先。
------解决方案--------------------
不太懂,帮顶,也跟着学习下电源方面的东东..
------解决方案--------------------
内部的RC不准确,不建议用于串口
  相关解决方案