首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

mega8串口有关问题

2012-05-30 
mega8串口问题C/C++ code#include avr/io.h#include avr/interrupt.h //晶振频率#define fosc 8000000

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不准确,不建议用于串口

热点排行