编程点滴:AVR UART I/O 功能模块

发布者:未来架构师最新更新时间:2016-10-21 来源: eefocus关键字:AVR  UART  I  功能模块 手机看文章 扫描二维码
随时随地手机看文章
本程序实现AVR设备UART端口<输入/回显/格式化输出>功能,由此可以通过PC机终端软件与设备直接交互。

程序有参考Samsung S3C2440库文件。

程序组成:测试程序,功能模块及其头文件



/* ******************************************************
* File Name: main.c
* Function: AVR UART I/O 功能模块
* Description: 实现UART输入/回显/格式化输出功能, 方便程序调试
* Authon & Date: Joshua Chan, 2012/04/01, 2012/04/14更新
* ******************************************************/
#include
#include
#include
#include
#include
#include "uart.h"
#include "step_motor.h"
#include "hardware.h"

/* 测试程序 */
void main(void)
{
u16 n;
u8 s[20];

uart_init(9600);
_SEI();
while (1) {
uart_putstring("Please input a number: ");
n = uart_getnum();
uart_putstring("Please input a string: ");
uart_getstring(s);
uart_printf("number: %d, string: \"%s\"\n", n, s);
_WDR();
}
}




/* ******************************************************
* File Name: uart.h
* Function: AVR UART I/O 功能模块
* Description: 实现UART输入/回显/格式化输出功能, 方便程序调试
* Authon & Date: Joshua Chan, 2012/04/01, 2012/04/14更新
* ******************************************************/
#ifndef _UART_H
#define _UART_H

#include "hardware.h"

/* UART初始化 */
void uart_init(u32 baud);

/* 读1字节, 无数据则忙等 */
u8 uart_getchar(void);

/* 尝试读1字节, 无数据返回0, 可用于检测按键 */
u8 uart_getkey(void);

/* 接收字符串, 并回显, 需在参数中给定字符串存放位置 */
void uart_getstring(u8 *str);

/* 接收整型数, 支持8进制/10进制/16进制输入 */
u16 uart_getnum(void);

/* 写1字节, 发送缓冲器满则忙等 */
void uart_putchar(u8 data);

/* 字符串输出 */
void uart_putstring(u8 *str);

/* 格式化输出, 不支持浮点数 */
void uart_printf(const u8 *fmt, ...);

#endif



/* ******************************************************
 * File Name: uart.c
 * Function:  AVR UART I/O 功能模块
 * Description: 实现UART输入/回显/格式化输出功能, 方便程序调试
 * Authon & Date: Joshua Chan, 2012/04/01, 2012/04/14更新
 * ******************************************************/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "uart.h"

/* UART初始化 */
void uart_init(u32 baud)
{
    u16 ubrr;

    /* 设置baudrate */
    ubrr = (u16)((FOSC / (8 * baud)) - 1);
    UBRR0H = (u8)(ubrr >> 8);
    UBRR0L = (u8)ubrr;
    /* 倍速发送 */
    UCSR0A |= 1 << U2X0;
    /* 设置帧格式: 8个数据位, 1个停止位 */
    UCSR0C = 3 << UCSZ00;
    /* 使能: 接收结束中断, 接收, 发送 */
    UCSR0B = (1< 0) {
                uart_putstring("\b \b");
                str--;
            }
        } else {
            *str = c;
            str++;
            uart_putchar(c);
        }
    }
    *str = '\0';
    uart_putchar('\n');
}

/* 接收整型数, 支持8进制/10进制/16进制输入 */
u16 uart_getnum(void)
{
    u8 str[10];

    uart_getstring(str);
    return (u16)strtol((char *)str, NULL, 0);
}

/* 写1字节, 发送缓冲器满则忙等 */
void uart_putchar(u8 data)
{
      while (!(UCSR0A & (1 << UDRE0)))
        ;
    UDR0 = data;
    if (data == '\n')
        uart_putchar('\r');
}

/* 字符串输出 */
void uart_putstring(u8 *str)
{
#ifdef DEBUG
    while (*str)
        uart_putchar(*str++);
#endif
}

/* 格式化输出, 不支持浮点数 */
void uart_printf(const u8 *fmt, ...)
{
#ifdef DEBUG
    u8 str[128]; /* 数组空间尽可能大一些, 以免越界 */
    va_list args;

    va_start(args, fmt);
    vsprintf((char *)str, (char *)fmt, args);
    uart_putstring(str);
    va_end(args);
#endif
}
 
关键字:AVR  UART  I  功能模块 引用地址:编程点滴:AVR UART I/O 功能模块

上一篇:编程点滴:AVR timer0 配置模块
下一篇:编程点滴:16位AVR定时器比较匹配中断测试程序

推荐阅读最新更新时间:2024-03-16 15:16

AVR单片机判断脉冲宽度的方法
定时/计数器(Timer/counter)是单片机芯片中最基本的外围接口,它的用途非常广泛,常用于测量时间、速度、频率、脉宽、提供定时脉冲信号等。相对于一般8位单片机而言,AVR不仅配备了更多的定时/计数器接口,而且还是增强型的,功能非常强大。ATmega128一共配置了2个8位和2个16位,共4个定时/计数器,本小节重点对它的一些增强功能的应用做基本的介绍。 5.9.1 预分频器 定时/计数器最基本的功能就是对脉冲信号计数,当计数器计满后(8位为255,16位为65535),再来一个脉冲它就翻转到0,并产生中断信号。同其他单片机类似,AVR的定时/计数器的计数脉冲可以来自外部的引脚,也可以由从内部系统时钟获得;但AVR的定时/
[单片机]
恩智浦推出跨界MCU i.MX RT1170系列,开启GHz微控制器时代
新闻亮点: ● i.MX RT1170 MCU系列采用先进的28nm FD-SOI技术,可满足更低的动态功耗和静态功耗要求。RT 1170集成了高达GHz 的 Arm Cortex-M7和高能效的Cortex-M4、先进的2D矢量图形加速器以及恩智浦署名的EdgeLock安全解决方案 ● i.MX RT1170提供6468 CoreMark评分和2974 DMIPS性能,基准评分达到同类竞争MCU的两倍 ● 扩展广受欢迎的i.MX RT系列,满足工业、物联网 (IoT)及汽车应用不断提升的边缘计算性能需求 恩智浦半导体(纳斯达克代码:NXPI)日前在2019年ARM科技大会上宣布推出跨界MCU i.MX RT1170系列,具
[单片机]
恩智浦推出跨界MCU <font color='red'>i</font>.MX RT1170系列,开启GHz微控制器时代
AVR JTAG MKii 引脚布局 ( JTAG 和 ISP )
1,JTAG和ISP引脚复用,JTAG的TCK,TDO,TDI分别与ISP的SCK,MISO,MOSI复用; 2,VT引脚必须接目标板电源,不然仿真器接口电路不工作; JTAG接口引脚定义如下 标配的JTAG转ISP的小板引脚定义如下 标准10针ISP接口定义: 标准10针JTAG接口定义 (适合普通ATmega芯片): (适合ATmega1280,2560等系列增强型芯片及Xmega芯片)
[单片机]
<font color='red'>AVR</font> JTAG MKii 引脚布局 ( JTAG 和 ISP )
DSP帮助NXP i.MX RT500跨界处理器实现更多音频功能
了解多线程程序、使用 XOS 实时操作系统开发应用程序、与信号量共享资源,以及 NXP 的 i.MX RT500 系列微控制器如何帮助工程师设计支持 DSP 的智能设备。 当今的智能消费设备需要能够处理大量数据的组件,以满足各种安全和信号处理应用的需求。这些组件(包括微控制器)必须能够快速有效地处理这些数据,这就需要高度优化的数字信号处理器。 本文介绍了 Cadence Tensilica Fusion F1 音频处理器的一些特性,这是一种指定的协处理器,可帮助 i.MX RT500 MCU 的主 CPU 执行信号处理计算。 多线程的核心概念 乍一看,现代处理硬件给人一种同时执行多个线程的错觉。实际上,单个CPU内
[嵌入式]
DSP帮助NXP <font color='red'>i</font>.MX RT500跨界处理器实现更多音频功能
I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之网卡驱动移植
由于对网卡这块不是很熟悉,误以为网卡驱动也可以简单的配置下DTS就可以正常工作了,实际移植中遇到了些问题。闲话少说,下面开始tqimx6q的网卡驱动移植。 DTS编写 首先在我们的DTS中添加网卡配置,参考sabrelite的DTS,我们可以如下编写: &fec { pinctrl-names = default ; pinctrl-0 = &pinctrl_enet_1 ; phy-mode = rgmii ; status = okay ; }; 开始以为添加以上内容后编译并烧写DTB就可以正常工作了,实则不然,还需要添加PHY相关的配置代码。 PHY配置 打开arch/arm/mach-imx
[单片机]
用VB 编程语言实现PC机与AVR 单片机的通信
0  引 言 在当今,网络技术越来越多地应用在各个领域,微机技术及单片机也不断发展,因此,目前大多数小型计算机监控系统都采用以PC 机和单片机构成的串行通信网络来完成监控任务。其中,单片机主要进行对数据的实时采集、处理,再通过串口将数据送入PC 机的缓冲区,然后由PC 机对数据进行进一步处理,以便得到所需的图形、图像及实验结果。采用VB 语言中的通信控件能够很好地完成二者之间的通信功能。 1  系统简介 本系统是一个小型的人体心电监测系统,将心电信号采出后经过A/ D 转换,由PC 机绘制出心电图形,进行实时显示,便于医护人员观察和诊断,系统原理如图1 所示。系统的下位机即单片机系统,将现场采集的信号经A/ D 转换送入系统上位机。
[单片机]
用VB 编程语言实现PC机与<font color='red'>AVR</font> 单片机的通信
AVR单片机定时器计数
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int uchar num1; #pragma interrupt_handler miao:9//它所对应的位置 #pragma data:code//定义程序存在ROM里面 const uchar table ={ 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86, 0x8e }; /***********************************
[单片机]
基于AVR微控制器的电力机车智能辅保系统的实现
    摘要: 给出了以AVR微控制器为核心的电力机车智能辅保系统的设计方案,并介绍了系统硬件及软件的具体实现方法。     关键词: 智能辅保系统 AVR微控制器 硬件 软件 电气机车辅助系统中有劈相机、空气压缩机、通风机及制动风机等各种类型的电机。运行中为了防止出现短路、过流等异常情况而烧毁电机,通常配置辅助保护系统,起到及时监测电机故障并加以处理的作用。目前电力机车上安装的辅保系统都是模拟电路装置,系统硬件复杂,又不方便司机使用和维修。因此,设计一种实时性高、性能可靠的智能辅保系统替代原有的模拟电路装置势在必行。本文将介绍笔者开发的用于韶山型电力机车的智能辅助保护系统的设计及实现。 1 系统的主要功能
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved