由测试程序
/* ************************************************
* File name: main.c
* Function: AVR的UART数据收发测试程序
* Description: 实现将RXD端口收到的数据转发至TXD端口
* 收发工作由UART中断自动完成
* Author & Date: Joshua Chan, 2012/03/28
* ************************************************/
#include
#include
#include
#include
#include
#include "uart_test.h"
/* 测试程序: 将串口接收的数据原样送出 */
void main(void)
{
unsigned char data;
fifo_pos_init(); /* 重置位置记录 */
uart_init(B9600); /* 初始化UART */
_SEI();
while (1) {
if ((data = rx_byte()) != NONE_DATA)
tx_byte(data);
_WDR(); /* 喂狗 */
}
}
/* ************************************************
* File name: uart_test.h
* Function: AVR的UART数据收发测试程序
* Description: 实现将RXD端口收到的数据转发至TXD端口
* 收发工作由UART中断自动完成
* Author & Date: Joshua Chan, 2012/03/28
* ************************************************/
#ifndef _UART_TEST_H
#define _UART_TEST_H
/* 定义FOSC=16.0MHz时的UBRR值 */
__flash enum baudrate {
B2400 = 416,
B4800 = 207,
B9600 = 103,
B14400 = 68,
B19200 = 51,
B28800 = 34,
B38400 = 25,
B57600 = 16,
B76800 = 12,
B115200 = 8,
B230400 = 3,
};
#define NONE_DATA '\4' /* 无新数据标志 */
#define RX_BUF_SIZE 32 /* 接收缓冲区大小 */
#define TX_BUF_SIZE 32 /* 发送缓冲区大小 */
/* 重置位置记录 */
extern void fifo_pos_init(void);
/* UART初始化 */
extern void uart_init(unsigned int baud);
/* 从接收缓冲区中读1字节 */
extern unsigned char rx_byte(void);
/* 将1字节数据送入发送缓冲区, 同时使能数据寄存器空中断 */
extern void tx_byte(unsigned char data);
#endif
/* ************************************************ * File name: uart_test.c * Function: AVR的UART数据收发测试程序 * Description: 实现将RXD端口收到的数据转发至TXD端口 * 收发工作由UART中断自动完成 * Author & Date: Joshua Chan, 2012/03/28 * ************************************************/ #include#include #include #include #include #include "uart_test.h" unsigned char rx_fifo[RX_BUF_SIZE]; /* 接收缓冲区 */ unsigned char tx_fifo[TX_BUF_SIZE]; /* 发送缓冲区 */ unsigned char rx_pos; /* 缓冲区中最后接收数据的位置 */ unsigned char read_pos; /* 缓冲区中最后读出数据的位置 */ unsigned char tx_pos; /* 缓冲区中最后发送数据的位置 */ unsigned char write_pos; /* 缓冲区中最后写入数据的位置 */ /* UART初始化 */ void uart_init(unsigned int baud) { /* 先禁用USART功能 */ UCSR0B = 0x00; /* 设置baudrate */ UBRR0H = (unsigned char)(baud>>8); UBRR0L = (unsigned char)baud; /* 设置帧格式: 8个数据位, 1个停止位 */ UCSR0C = 3 << UCSZ00; /* 使能: 接收结束中断, 接收, 发送 */ UCSR0B = (1<
上一篇:编程点滴:16位AVR定时器比较匹配中断测试程序
下一篇:编程点滴:8位AVR定时器比较匹配中断测试程序
推荐阅读最新更新时间:2024-03-16 15:16
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- [直播预报名] TI 最新蓝牙技术培训,2017 震撼首发!
- 直播已结束【最新 TI C2000实时控制芯片 — F28003X】
- 英特尔FPGA可编程加速平台介绍,走近AI、数据中心、基因工程等大咖工程
- 下载安森美半导体工业物联网工业解决方案,百份好礼送!
- 秋风送爽,你来答题我送礼!看Maxim 深入浅出低功耗处理器视频精彩为您呈现!
- 恩智浦LPC2000系列全套资料!
- TI 嵌入式主题直播月——为高效、智能、低功耗系统设计助力
- 答题赢好礼| ADI 智能楼宇烟雾探测方案
- 参赛冲击【万元大奖】啦|2023 DigiKey“智造万物,快乐不停”创意大赛
- 下载有礼|是德科技:测试设备如何影响产品质量调研报告