AT mega16单片机串口通信控制LED灯

ATmega16是一种8位的高性能单片机,由Atmel公司生产。它具有高速、低功耗和强大的处理能力,广泛应用于嵌入式系统、自动化、智能控制、工业控制等领域。

异步通信以字符为单位进行传输,字符之间没有固定的时间间隔要求,而每个字符中的各位则固定的时间传送。异步通信中,收发双方去的同步是通过在字符格式中设置起始位和停止位的方式来实现的。具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位和停止位构成一帧。停止位和下一个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停止位和空闲位都是高电平(逻辑值为1),这样就保证了起始位开始处一定会有一个下跳沿,由此就可以标志一个字符传输的起始;根据起始位和停止位就很容易的实现了字符的界定和同步。

对于波特率的计算公式:

                                        BAUD=Fosc/(16*BAUD)-1

公式中:BAUD为通信速率(b/s),Fosc为系统时钟频率,UBRR为波特率寄存器UBRRH、UBRRL中的值(0~4095)。

硬件设计原理图:

 对于如何使用串口通信控制LED灯呢?

我们将使用Cx控制LEDx的亮,使用Fx控制LEDx的灭。

/*
 * 串口点灯.c
 *
 * Created: 2023/4/26 19:50:06
 * Author: chen
 */

#include <mega16.h>
#include <delay.h>
#define FOSC    4000000
#define BAUD    9600
#define MYUBRR  (unsigned int)((unsigned long)FOSC/(16*(unsigned long)BAUD)-1)
unsigned char led=0xff;
unsigned char ledbuf[2]={0};
unsigned char ledflag=0;
void USART_Init(unsigned int ubrr){
    PORTD = 0x03;
    DDRD =0X02;
    UCSRA=0x00;
    UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);   
    UBRRH = (unsigned char)(ubrr>>8);
    UBRRL = (unsigned char)ubrr; 
}

void USART_Transmit(unsigned char data){
    while(!(UCSRA & (1<<UDRE)));
    UDR=data;
}

interrupt [USART_RXC] void usart_rx_isr (void)
{
    unsigned char status,data;
    status = UCSRA;
    data=UDR;
    if(data=='C'){
        ledbuf[0]='C';
    }else if(data=='F'){
        ledbuf[0]='F';
    }
    if(ledbuf[0]=='C'&& (0<(data-'0')&&(data-'0')<9)){
        led=led &(~(1<<((data-'0')-1)));
        ledbuf[0]=0;
        ledflag=1;            
    }else if(ledbuf[0]=='F'&& (0<(data-'0')&&(data-'0')<9)){
        led=led |((1<<((data-'0')-1)));
        ledbuf[0]=0;
        ledflag=1;    
    }
    USART_Transmit(data);
}

void main(void)
{
    unsigned char i=1;
    USART_Init(MYUBRR);
    PORTA = led;
    DDRA = 0xff;
    #asm("sei")
    while (1)
    {
    // Please write your application code here
       if(ledflag=1){
        PORTA=led;
        ledflag=0;
       }   

    }
}

这样我们就能使用串口通信控制LED的状态了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Mega16单片机中文资料 产品特性 • 高性能、低功耗的 8 位 AVR® 微处理器 • 先进的RISC结构 – 131 条指令 – 大多数指令执行时间为单个时钟周期 –32 个8 位通用工作寄存器 – 全静态工作 – 工作于16 MHz 时性能高达16 MIPS – 只需两个时钟周期的硬件乘法器 • 非易失性程序和数据存储器 – 16K 字节的系统内可编程 Flash 擦写寿命: 10,000 次 – 具有独立锁定位的可选Boot 代码区 通过片上Boot 程序实现系统内编程 真正的同时读写操作 – 512 字节的EEPROM 擦写寿命: 100,000 次 –1K 字节的片内SRAM – 可以对锁定位进行编程以实现用户程序的加密 • JTAG 接口( 与IEEE 1149.1标准兼容 ) – 符合JTAG标准的边界扫描功能 – 支持扩展的片内调试功能 – 通过JTAG接口实现对 Flash、EEPROM、熔丝位和锁定位的编程 • 外设特点 – 两个具有独立预分频器和比较器功能的8 位定时器/ 计数器 – 一个具有预分频器、比较功能和捕捉功能的16 位定时器 /计数器 – 具有独立振荡器的实时计数器RTC – 四通道PWM –8路 10 位ADC 8个单端通道 TQFP 封装的7 个差分通道 2个具有可编程增益 (1x, 10x, 或200x)的差分通道 – 面向字节的两线接口 – 两个可编程的串行USART – 可工作于主机/从机模式的 SPI串行接口 – 具有独立片内振荡器的可编程看门狗定时器 – 片内模拟比较器 • 特殊的处理器特点 – 上电复位以及可编程的掉电检测 – 片内经过标定的RC 振荡器 – 片内/片外中断源 –6种睡眠模式 : 空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby 模式以及 扩展的Standby 模式 • I/O和封装 – 32 个可编程的I/O口 –40 引脚PDIP封装 , 44 引脚 TQFP 封装,与 44 引脚MLF封装 • 工作电压: – ATmega16L:2.7 - 5.5V –ATmega16:4.5 - 5.5V • 速度等级 – 0 - 8 MHz ATmega16L – 0 - 16 MHz ATmega16 • ATmega16L在 1 MHz, 3V, 25°C时的功耗 – 正常模式: 1.1 mA – 空闲模式: 0.35 mA – 掉电模式: < 1 µA

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GD32开发者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值