AVR ATMEGA8(2)

串口通信,发送字符串

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

#include <stdio.h>
#include <ioavr.h>
#include <inavr.h>
#include <stdlib.h>
#include <sysmac.h>
#include <iomacro.h>
#include <intrinsics.h>
#include <stdarg.h>
#include <iom8.h>

#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");  
    }

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值