单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3672|回复: 18
收起左侧

使用excel制作的AVR寄存器配置助手---轻松搞定AVR

  [复制链接]
秉烛良宵 发表于 2016-3-9 16:36 | 显示全部楼层 |阅读模式
  1. /***********************************************************
  2. -功能描述:开机初始化
  3. -参数说明:无
  4. -返回说明:无
  5. ***********************************************************/
  6. void Init_Start(void)
  7. {
  8.   ADC_InitTypeDef ADC_InitStruct;
  9.   
  10.   /*ADC配置*/
  11.   ADC_InitStruct.refSource = REF_INT;   //内部基准源
  12.   ADC_InitStruct.dataAlign = AD_LEFT;   //ADC数据为左对齐
  13.   ADC_InitStruct.channel   = 7;         
  14.   ADC_InitStruct.prescaler = CK_PS32;   //32预分频
  15.   ADC_InitStruct.adcEnabled=1;          //使能ADC
  16.   ADC_Init(&ADC_InitStruct);
复制代码

#ifndef _AVR_ADC_H
#define _AVR_ADC_H

#include "my_define.h"

#define ADC_PRECL(x)  st(ADCSR &= 0xf8;ADCSR |= (x);)
#define ADC_EN()      st(ADCSR |= BV(ADEN);)
#define ADC_CLOSE()   st(ADCSR &= ~BV(ADEN);)
#define ADC_START()   st(ADCSR |= BV(ADSC);)
#define ADC_END()     (ADCSR & BV(ADSC))

enum
{
  REF_EXT = 0,
  REF_VCC = 1,
  REF_INT = 3,
  
  AD_LEFT = 1,
  AD_RIGHT = 0,
  
  CONT_MOD = 1,
  ONCE_MOD = 0,
  
  CK_PS2   = 1,
  CK_PS4,
  CK_PS8,
  CK_PS16,
  CK_PS32,
  CK_PS64,
  CK_PS128,
};

typedef struct
{
  uint8 channel   : 4;
  uint8 def       : 1;
  uint8 dataAlign : 1;
  uint8 refSource : 2;
  
  uint8 prescaler : 3;
  uint8 adcIE     : 1;
  uint8 def1      : 1;
  uint8 convertMod: 1;
  uint8 start     : 1;
  uint8 adcEnabled: 1;
}ADC_InitTypeDef;


void ADC_Init(ADC_InitTypeDef *parameter);

#endif




这事情得从去年说起,去年学了AVR单片机后来又学了CC2530。当想用AVR做个项目时要使用定时器,突然感觉到头脑一片空白,完全忘记如何配置定时器,看来只能查看手册了。不知道是不是网速有像51助手一样的软件可以方便寄存器的配置,百度了下确实有。下载后才发现没有定时器的初始化配置,最后还是把定时器功能和寄存器花时间看了一遍。这让我很郁闷,萌发了自己写一个配置软件。我只学过VB,就打算用VB编写一个。但是装个VB又跟CAD冲突,真是烦人。之后想到了STM32库函数的做法,就用ADC的初始化试下好不好用。做法如下:




使用过程中还是感觉到不明了。需要打开头文件查看,而且配置的东西多。得再找办法,突然想到excel可以用VBA,可以还是犹豫,现在很多人用的是wps,都没有安装VBA开发插件,如果分享给他人用就麻烦了。试着能不能只用公式就可以实现。折腾了一个晚上写了一个USART的寄存器配置
USART配置.JPG

使用效果和网站下载的单片机助手差不多,心血来潮就想把所有的外设模块配置都写出来。在这个过程中并不容易,特别是定时器的设置,T1的设置项比较麻烦,但我以根据自己的理解已经把T1和T2的设置选项做了分类。每个模块写出来后还要反复试验测试看下每个设置项会不会有错误。对于一些配置非常简单且不需要修改的模块就没必要做了,例如看门狗,EEPROM等。TWI也不打算做了,因为初始化不能主要是使用麻烦,很多状态要处理。整个excel的设计花了将近二十天的时间,有很大部分时间是用来看手册的和测试的。
        有了外设的初始化配置又开始在想能不能写一个比较通用的模块操作文件,可以重复使用就节省了很多时间。又忙碌了一个星期(特别是TWI花了我很大的精力,所以我并不喜欢AVR的TWI)。

文件1.JPG
文件2.JPG


这些模块的操作代码有些是在学习的时候写的,只需做了整理,但是肯定是存在不足之处的,所以只作为入门学习的参考使用。下面还是具体介绍下是怎么使用的:


捕获.JPG


定时器.jpg

          假设使用的是我写的模块操作文件,这写文件都是没有初始化函数的。首先就需要用AVR配置工具生成初始化函数(建议新建一个C文件专门用于存放初始化函数)。打开“Atmega8a寄存器配置文件”,这个文件是参考m8a写的所以就叫这个名字了。在文件的下方有八个工作表,第一个是帮助,里面是关于使用的说明。后面是外设的寄存器配置表格。单击相应进行配置设置。



定时器设置.JPG
设置区中灰色打底的是可以选择设置的,橙色打底的是一些重要的说明。小黑点打底的设置项是要求必须按顺序依次设置。设置完后就可以选中代码生成区中的代码进行复制,执行复制后选择区会出现蚂蚁线。再粘贴到自己的C文件中即可。


注明:模块的操作文件是在IAR的开发环境写的,不是使用IAR的朋友需要自己更改下才能使用。Excel的寄存器配置文件可能有些开发平台对于个别寄存器的命名会有所差异,可以通知我修改。


Atmega8a寄存器配置.zip (64.4 KB, 下载次数: 64)

评分

参与人数 2黑币 +130 收起 理由
HI-XM + 30 很给力!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

 楼主| 秉烛良宵 发表于 2016-3-9 16:37 | 显示全部楼层
排序全部乱了,不知道是怎么回事
回复

使用道具 举报

 楼主| 秉烛良宵 发表于 2016-3-10 08:33 | 显示全部楼层
http://www.51hei.com/bbs/dpj-45487-1.html

昨晚录制了一个配置外部中断、UASRT、ADC、定时器输出PWM的视频,感兴趣的可以看下。
写代码的速度很慢,大家可以快进着看
回复

使用道具 举报

5002281 发表于 2016-3-10 13:43 | 显示全部楼层
下来学习下,谢谢!
回复

使用道具 举报

admin 发表于 2016-3-10 16:48 | 显示全部楼层
秉烛良宵 发表于 2016-3-9 16:37
排序全部乱了,不知道是怎么回事

谢谢分享黑币已经奉上,附件里面有完整的程序吧
回复

使用道具 举报

 楼主| 秉烛良宵 发表于 2016-3-11 10:30 | 显示全部楼层
admin 发表于 2016-3-10 16:48
谢谢分享黑币已经奉上,附件里面有完整的程序吧

附件里的外设操作函数都是完整的,而且TWI还是用中断实现,发送和接收数据非常简单,把TWI的二十几个状态全部化简了,但是函数是有做处理的。
回复

使用道具 举报

 楼主| 秉烛良宵 发表于 2016-3-11 10:30 | 显示全部楼层
这几天在考虑写一个STM32的库函数配置助手,也打算尝试用excel实现,如果实在不行再换VB。有没有感兴趣的,可以一起来讨论。AVR的配置文件好像没有什么人下载,估计是玩AVR的人不多,发现很多初学者都是喜欢玩STC的偏多
回复

使用道具 举报

hjh7912 发表于 2016-4-1 17:57 | 显示全部楼层
学习学习,谢谢版主分享
回复

使用道具 举报

yahan 发表于 2017-3-17 22:31 | 显示全部楼层
这个非常好,有创意。
回复

使用道具 举报

qq732357710 发表于 2017-6-4 00:15 | 显示全部楼层
能放出单元格保护密码吗
回复

使用道具 举报

heavens78 发表于 2017-6-12 21:00 来自手机 | 显示全部楼层
想学习,好东西
回复

使用道具 举报

davidchao 发表于 2017-11-20 12:25 | 显示全部楼层
本帖最后由 davidchao 于 2017-11-21 13:01 编辑

楼主, 这个寄存器配置在Atmega16上是不是也是一样的啊?
回复

使用道具 举报

xyeuuu 发表于 2018-1-8 00:22 | 显示全部楼层
下来学习下,谢谢!
回复

使用道具 举报

wanffee 发表于 2018-4-21 05:58 来自手机 | 显示全部楼层
秉烛良宵 发表于 2016-3-10 08:33
http://www.51hei.com/bbs/dpj-45487-1.html

昨晚录制了一个配置外部中断、UASRT、ADC、定时器输出PWM的 ...

辛苦了,感谢楼主的无私奉献
回复

使用道具 举报

lucheng77 发表于 2018-4-26 23:18 | 显示全部楼层
挺好,下来研究一下这个,excel的这些VBA功能还真不会用。
回复

使用道具 举报

ttkkxx 发表于 2018-12-26 14:43 | 显示全部楼层
感谢楼主无私分享
回复

使用道具 举报

lanyue51hei 发表于 2019-1-6 21:44 | 显示全部楼层
非常好的资料,
回复

使用道具 举报

HI-XM 发表于 2019-1-30 11:40 | 显示全部楼层
秉烛良宵 发表于 2016-3-11 10:30
这几天在考虑写一个STM32的库函数配置助手,也打算尝试用excel实现,如果实在不行再换VB。有没有感兴趣的, ...

正在学习AVR
回复

使用道具 举报

huaishang 发表于 2019-2-12 23:22 | 显示全部楼层

下来学习下,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机. 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

快速回复 返回顶部 返回列表