#include <iom162v.h>
#include <macros.h>
#include <string.h>
#include <stdio.h>
#include "data.h"
void Usart_Init(void)
{
/* ----------------- GPIO 初始化 ----------------- */
DDRD &= ~(3 << 0);
DDRD |= (1 << 1); /* RXD_0(PORTD_0)输入, TXD_0(PORTD_1)输出 */
PORTD = 0xFF;
/* ----------------- 串口初始化 ----------------- */
UCSR0A = 0x00; /* 正常速度发送 */
/* 使能接收/发送, 接收结束中断使能 */
UCSR0B |= (1 << RXCIE0) | (1 << RXEN0) | (1 << TXEN0);
/* 8bit, 异步, 无奇偶校验, 1 个停止位 */
UCSR0C |= (1 << URSEL0) | (1 << UCSZ01) | (1 << UCSZ00);
/* 8M 时钟对应 9600 波特率 */
UBRR0H = 0x00;
UBRR0L = 51;
/* ----------------- GPIO 初始化 ----------------- */
DDRB &= ~(3 << 2);
DDRB |= (1 << 3); /* RXD_1(PORTD_2)输入, TXD_1(PORTD_3)输出 */
PORTB = 0xFF;
/* ----------------- 串口初始化 ----------------- */
UCSR1A = 0x00; /* 正常速度发送 */
/* 使能接收/发送, 接收结束中断使能 */
UCSR1B |= (1 << RXCIE1) | (1 << RXEN1) | (1 << TXEN1);
/* 8bit, 异步, 无奇偶校验, 1 个停止位 */
UCSR1C |= (1 << URSEL1) | (1 << UCSZ11) | (1 << UCSZ10);
/* 8M 时钟对应 9600 波特率 */
UBRR1H = 0x00;
UBRR1L = 51;
}
void Usart0_SendChar(unsigned char c)
{
/* 判断 UDR 是否为空 */
while(!(UCSR0A & (1 << UDRE0)));
UDR0 = c;
}
void Usart1_SendChar(unsigned char c)
{
/* 判断 UDR 是否为空 */
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = c;
}
/* 实现该函数之后, 可以调用 printf 函数了 */
int putchar(char cByteToSend)
{
/* 判断 UDR 是否为空 */
while(!(UCSR1A & (1 << UDRE1)));
UDR1 = cByteToSend;
return cByteToSend;
}
#if 0
/* 串口接收中断 */
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
unsigned char tmpc;
static unsigned char cnt = 0;
tmpc = UDR0;
if ( RcvFlag == 0 )
{
if (tmpc == 0xAA) /* 起始标志 */
{
cnt = 0;
}
else
{
cnt++;
}
RcvFrame[cnt] = tmpc;
if ( tmpc == 0x55 ) /* 结束符 */
{
RcvFlag = 1; /* 接收到一帧数据 */
}
}
}
#endif
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
static unsigned char cur_data, last_data[2];
static unsigned char cnt = 2;
last_data[1] = last_data[0];
last_data[0] = cur_data;
cur_data = UDR0;
if ( RcvFlag == 0 )
{
if (last_data[1] == 0xAA && last_data[0] == 0xBB) /* 起始标志 */
{
StarFlag = 1; /* 检测到帧头标志 */
cnt = 2;
}
else
{
if ( ++cnt >= 20 )
{
cnt = 2; /* 2~20 之间 */
}
}
RcvFrame[cnt] = cur_data;
/* 有帧头的情况下, 检测帧尾 */
if ( (StarFlag == 1) && last_data[0] == 0xCC && cur_data == 0xDD)
{
RcvFlag = 1; /* 接收到一帧数据 */
}
}
}
/* 串口接收中断 */
#pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC
void uart1_rx_isr(void)
{
Usart1_SendChar(UDR1);
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于 Proteus 的 ATMEGA-16 的 ADC 遥控器程序与仿真
共74个文件
lis:11个
o:11个
c:10个
需积分: 16 13 下载量 199 浏览量
2016-11-08
17:44:04
上传
评论
收藏 122KB ZIP 举报
温馨提示
ATMEGA-16 平台的遥控器的接收与发送端程序,发送端通过 ADC 采集8个通道的摇杆数据,然后通过无线串口发送到接收端,接收端进行解帧,根据每个 ADC 通道的数值控制 PPM 的每个对应通道的脉宽值。包含 Proteus 仿真
资源推荐
资源详情
资源评论
收起资源包目录
5、ADC_Uart.zip (74个子文件)
5、ADC_Uart
Proteus
usart.DSN 126KB
usart.PWI 4KB
Last Loaded usart.DBK 122KB
Send
source
adc.c 1KB
uart.c 1KB
timer.c 623B
data.c 567B
main.c 295B
Project
USART.dbg 2KB
data.lis 5KB
USART.mak 2KB
USART.cof 4KB
main.o 642B
uart.o 2KB
adc.o 2KB
USART.mp 2KB
usart.prj 1KB
USART.lk 37B
uart.lis 9KB
USART.hex 2KB
BACKUP
uart.c.160625162408 799B
main._c 394B
uart._c 989B
USART.lst 15KB
delay.lis 3KB
delay.o 633B
data.o 861B
USART.SRC 179B
main.lis 2KB
adc.lis 7KB
timer.o 2KB
timer.lis 6KB
include
uart.h 137B
data.h 220B
timer.h 86B
adc.h 78B
Rcv
source
uart.c 3KB
ppm.c 2KB
delay.c 543B
data.c 947B
main.c 550B
Project
USART.dbg 3KB
data.lis 9KB
USART.mak 2KB
USART.cof 7KB
main.o 2KB
uart.o 4KB
USART.mp 4KB
ppm.lis 18KB
usart.prj 1KB
USART.lk 29B
uart.lis 18KB
USART.hex 8KB
BACKUP
main.c.160627140224 194B
uart.c.160625162408 799B
ppm.c.160627152618 4KB
main.c.160625162444 394B
main._c 237B
uart.c.160627134104 2KB
main.c.160625164004 211B
uart.c.160627142650 2KB
ppm._c 2KB
uart._c 2KB
USART.lst 47KB
delay.lis 3KB
delay.o 633B
ppm.o 5KB
data.o 1KB
USART.SRC 160B
main.lis 6KB
include
uart.h 80B
ppm.h 104B
data.h 822B
delay.h 32B
共 74 条
- 1
资源评论
沙漏里的时光-
- 粉丝: 15
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SRS-CentOS7-x86-64-5.0-r1.zip
- 全文检索使用ElasticSearch实现全文检索的详细说明和实践探索
- 基于matlab主成分分析图像压缩重建系统代码14
- C语言《基于AT89C52单片机搭建的PID直流电机控制程序,主要用于Proteus电路仿真》+源代码
- C++《基于规划和汽车动力学的自动驾驶项目仿真(基于ROS的自动驾驶项目仿真,使用DWA路径规划算法和双PID控制器)》+源代码
- vos3000客户端2.1.7.03、2.1.8.05、2.1.9.07
- c++《用于船舶控制方法研究的3D船舶运动仿真软件》+源代码
- globalmapper24
- Python 小游戏 (贪吃蛇、五子棋、扫雷、俄罗斯方块)源码.zip
- Map data that can be used for 2D raster map path planning
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功