文章目录[隐藏]
串口通信,发送字符串
环境: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");
}
}
版权声明:本文为CSDN博主「qq_44588244」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44588244/article/details/122496494
暂无评论