AVR ATMEGA8(2)

串口通信,发送字符串

环境:IAR
板子:AVR ATMEGA8
代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

void USART_Init(void)
{
    UCSRB = 0x00; //disable while setting baud rate
    //设置波特率
    //UBRRH = 0;//高四位
    UBRRL = 0x47;//低八位 buad = 9600
    //接收机与发送器使能
    UCSRA = 0X20;//0010 0000
    UCSRB = 0X08;//发送使能(3) 0000 1000
    //设置帧格式:8个数据位,1个停止位
    UCSRC = 0X86;//0000 0110 异步,禁止奇偶校验,1位停止位,8位数据位
     //0010 1101   URSEL为0对UBRRH 更新;若URSEL为1对UCSRC设置更新。
    
}
//TXC 标志位可以用来检验一个数据帧的发送是否已经完成
//在每次发送数据之前 ( 在写发送数据寄存器 UDR 前 )TXC 标志位必须清零。
//程序只是在载入新的要发送的数据前,通过检测 UDRE 标志等待发送缓冲器为空
void USART_Transmit( unsigned char data )
{
    /* 等待发送缓冲器为空 */
    while ( !( UCSRA & (1<<UDRE)) );
    /* 将数据放入缓冲器,发送数据 */
    UDR = data;
}

void str_send(char *s)  //发送字符串
{
    while(*s)
    {
      USART_Transmit(*s);
      s++;
    }
    //USART_Transmit(0x0A);//换行
    USART_Transmit(0x0D);//回车
}

int main( void )
{
    DDRB = 0X01;
    PORTB = 0X00;
    USART_Init();
    while(1)
    {
        str_send("start");
        delay_ms(500);
        //str_send("welcome");  
    }

}

你可能感兴趣的:(ATMEGA8,单片机,stm32,物联网)