UCSRB=0x00;
UCSRA=0x00; //控制寄存器清零
UCSRC=(1<
UBRRL=baud;
UBRRH=baud>>8; //设置波特率
UCSRB=(1<
DDRD|=0X02; //配置TX为输出(很重要)
就是编程三个寄存器与设置波特率。调通简单,调精不容易。
#include "uart.h"
void main(void)
{
uchar *str = "Hello World!";
SystemInit();
UartInit(19200);
while(1)
{
if(flag)
{
flag = 0;
//Show(rdata,1);
UartSendB(rdata);
PutString(str);
CR();
SPACE();
}
}
}
//////////////////////////////////////////////////////////////////////
#include
#include
#include "uart.h"
#define mclk 8000000
#pragma interrupt_handler UartRx:12
volatile uchar rdata;
uchar flag=0;
/*void delay(uint ms)
{
uchar i;
while(--ms)
{
for(i=1141;i>0;--i);
}
}*/
//*********************************************************
//函 数 名: void PutString(unsigned char *puts)
//功 能: 发送字符串到串口
//说 明:
//参 数: 发送的字符串
//返 回 值:
//示 范: putstring(" ")
//*********************************************************
void PutString(uchar *puts)
{
//for(;*puts!=0;puts++) //遇到停止符0结束
while(*puts!=0)
{
UartSendB(*puts++);
}
}
void UartInit(uint baud)
{
UCSRA &= 0x00;
UCSRB &= 0x00;
UCSRC |= 0x86;//寄存器选择、字符长度为8,
baud = mclk/16/baud-1;
UBRRL = baud;
UBRRH = baud>>8;
UCSRB = 0x98;//接收中断使能、接收使能、发送使能
SREG |= 0x80;
DDRD |= 0x02;//TX为输出(重要)
}
void UartSendB(uchar data)
{
while(!(UCSRA & 0x20));//UDRE为空时置位
UDR = data;
while(!(UCSRA & 0x40));//TXC为空时置位
UCSRA |= 0x40;
}
void UartRx(void)
{
UCSRB &= 0x7F;//接收结束中断禁止
rdata = UDR; //存储缓冲区的数据
flag = 1; //接收标志置位
UCSRB |= 0X80;//接收结束中断使能
}
void SystemInit(void)
{
DDRA |= (1<<2)|(1<<3)|(1<<4)|(1<<6);
DDRB |= 0xFF;
PORTA |= (1<<2)|(1<<6);
PORTB = 0xFF;
PORTA &= (~(1<<2))&(~(1<<6));
}
//////////////////////////////////////////////////////////////////////////
#ifndef __UART_H__
#define __UART_H__
#include
#include
#define CR() PutString(" ") //CR=回车换行
#define SPACE() UartSendB(0x20) //发送一个空格。
#define uchar unsigned char
#define uint unsigned int
extern volatile uchar rdata;
extern uchar flag;
//void delay(uint ms);
void UartInit(uint baud);
void UartSendB(uchar data);
void UartRx(void);
void SystemInit(void);
void PutString(uchar *puts);
#endif
上一篇:AVR定时器1的CTC模式设置
下一篇:关于ICCAVR库的生成与调用
推荐阅读最新更新时间:2024-03-16 13:49
设计资源 培训 开发板 精华推荐
- 如何利用WEBENCH快速设计?
- 有奖直播:迈来芯消费级超低功耗位置传感器,简化设计降低成本
- 安全在任何时候都是第一要素,你的嵌入式设计也是!诚邀参加英飞凌 OPTIGA™ Trust M 安全防御大揭秘!
- 劳动节归来,EEWORLD社区4月明星人物出台喽!
- 非凡富士通FRAM,仅需微小电源即可高速写入数据!看视频答题有礼!
- 下载喽:PCIe要了解的10件事和识别协议的BSX系列BERTScope误码率测试仪技术资料
- 分享、评论《Vishay光电子博文》尽享精彩好礼!
- 有奖直播 | 是德科技信号完整性测试的演变和更新
- 智慧六月 潜伏在EEWORLD里的一休哥
- 【EEWORLD第四十二届】2012年09月社区明星人物揭晓!