查看: 1222|回复: 0

ATmega328p Xplained Mini 串口发送数据

[复制链接]
  • TA的每日心情
    奋斗
    2023-12-3 18:51
  • 签到天数: 772 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-12 09:57:40 | 显示全部楼层 |阅读模式
    分享到:
    这个小板首先得搞清楚工作的晶振,我始终糊涂,我一直以为8MRC内部振荡,今天打开图纸一看才恍然大悟。

    原来是16M外部晶振,同时给两个芯片。我晕!!!
    解决完晶振问题自然是寄存器,同发射有关的寄存器如下:
    UCSRnA
    BIT7 - RXCn:usart Receive Complete
    BIT6 - TXCn:USART Transmit Complete
    Bit5 - UDREn:USART Data Register Empty
    Bit4 - FEn:Frame Error
    Bit3 - DORnata OverRun
    Bit2 - UPEn:USART Parity Error
    Bit1 - U2Xnouble the USART Transmission Speed
    Bit0 - MPCMn:Mutlti-processor Communication Mode
    UCSRnB
    Bit7 - RXCIEn:RX Complete Interrupt Enable n
    Bit6 - TXCIEn:TX Complete Interrupt Enable n
    Bit5 - UDRIEn:USART Data Register Empty Interrupt Enable n
    Bit4 - RXENn:Receiver Enable n
    Bit3 - TXENn:Transmitter Enable n
    Bit2 - UCSZn2:Character Size n
    Bit1 - RXB8n:Receive Data Bit 8n
    Bit0 - TXB8n:Transmit Data Bit8n
    UCSRnC
    Bits 7:6 - UMSELn1:0 USART Mode Select
               00异步
               01同步
               10空
               11SPI
    Bits 5:4 - UPMn1:0arity Mode
    Bit3     - USBSn:Stop Bit Select
    Bit2:1   - UCSZn1:0:Character Size
    Bit 0    - UCPOLn:Clock Polarity
    这里边只有掌握几个位就行:
    以下是程序:
    /*
    * GccApplication2.c
    *
    * Created: 2015/1/8 星期四 21:20:24
    *  Author: Administrator
    */
    #define F_CPU 16000000UL
    #define BAUD 9600
    #define PUTBAUD F_CPU/16/BAUD-1
    #include <avr/io.h>
    #include <stdio.h>
    #include <stdint.h>
    #include <util/delay.h>
    char dd[]="Hello eeboard!!!";
    void Init_USART(uint16_t ubrr)
    {
    /*Set baud rate */
    UBRR0H = (unsigned char)(ubrr>>8);
    UBRR0L = (unsigned char)ubrr;
    /*Enable receiver and transmitter */
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);
    /* Set frame format: 8data, 2stop bit */
    UCSR0C = (1<<USBS0)|(3<<UCSZ00);
    }
    void PutChar(char c)
    {
    /* Wait for empty transmit buffer */
    while ( !( UCSR0A & (1<<UDRE0)) )
    ;
    /* Put data into buffer, sends the data */
    UDR0 = c;
    }
    void PutStr(char *s)
    {
    while(*s)PutChar(*s++);
    }
    int main(void)
    {
    Init_USART( PUTBAUD);
    while(1)
    {
    PutStr(dd);
    _delay_ms(1000);
    //TODO:: Please write your application code
    }
    }
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-16 14:53 , Processed in 0.113420 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.