<delect id="jxvjd"></delect>

<p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p><p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>
<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>
<p id="jxvjd"><output id="jxvjd"></output></p>
<p id="jxvjd"><output id="jxvjd"></output></p>

<pre id="jxvjd"></pre><pre id="jxvjd"></pre>
<noframes id="jxvjd">

<noframes id="jxvjd">
<pre id="jxvjd"></pre>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p><pre id="jxvjd"></pre>

<pre id="jxvjd"></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p>

<pre id="jxvjd"></pre><pre id="jxvjd"></pre><p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p>

<p id="jxvjd"></p>

<p id="jxvjd"></p>

<pre id="jxvjd"><delect id="jxvjd"></delect></pre>
<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>

<p id="jxvjd"></p>
<pre id="jxvjd"><pre id="jxvjd"></pre></pre>

<output id="jxvjd"></output>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p> <pre id="jxvjd"></pre>
<output id="jxvjd"><delect id="jxvjd"><menuitem id="jxvjd"></menuitem></delect></output>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><delect id="jxvjd"></delect></pre>

<pre id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></pre>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<pre id="jxvjd"></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p><p id="jxvjd"></p>

<noframes id="jxvjd"><pre id="jxvjd"><p id="jxvjd"></p></pre><p id="jxvjd"></p>
<noframes id="jxvjd"><p id="jxvjd"><output id="jxvjd"></output></p>

<p id="jxvjd"><delect id="jxvjd"></delect></p>

<noframes id="jxvjd"><output id="jxvjd"></output>

<pre id="jxvjd"></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><output id="jxvjd"></output></pre>

<noframes id="jxvjd"><p id="jxvjd"></p>
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre><p id="jxvjd"><output id="jxvjd"><delect id="jxvjd"></delect></output></p>
<pre id="jxvjd"><p id="jxvjd"></p></pre>

<p id="jxvjd"></p>
<p id="jxvjd"></p>
<p id="jxvjd"></p>

<pre id="jxvjd"><p id="jxvjd"></p></pre><pre id="jxvjd"><p id="jxvjd"></p></pre><p id="jxvjd"><output id="jxvjd"></output></p>
<p id="jxvjd"></p>

<p id="jxvjd"><output id="jxvjd"><menuitem id="jxvjd"></menuitem></output></p>

<output id="jxvjd"><delect id="jxvjd"></delect></output>
<pre id="jxvjd"><p id="jxvjd"></p></pre>

<pre id="jxvjd"><output id="jxvjd"></output></pre>

<p id="jxvjd"></p>

<pre id="jxvjd"><p id="jxvjd"><menuitem id="jxvjd"></menuitem></p></pre>

<pre id="jxvjd"></pre>

<pre id="jxvjd"><p id="jxvjd"></p></pre>
<p id="jxvjd"><delect id="jxvjd"></delect></p>
<noframes id="jxvjd"><pre id="jxvjd"><p id="jxvjd"></p></pre>

<p id="jxvjd"></p>
<pre id="jxvjd"><p id="jxvjd"></p></pre>
<p id="jxvjd"></p>

<noframes id="jxvjd">
<pre id="jxvjd"></pre>
<pre id="jxvjd"></pre><pre id="jxvjd"><p id="jxvjd"><menuitem id="jxvjd"></menuitem></p></pre>

<noframes id="jxvjd">

<p id="jxvjd"></p>

<p id="jxvjd"><menuitem id="jxvjd"></menuitem></p>

<pre id="jxvjd"><p id="jxvjd"><delect id="jxvjd"></delect></p></pre>

打印

[8/16位单片机] 使用MPLAB X开发AVR – 从头写一个C程序框架

[复制链接]
1798|11
跳转到指定楼层
楼主
本帖最后由 oxygenzz 于 2019-5-24 18:33 编辑


从新建一个空白程序开始,从头写一个程序框架,能有助于更好的理解MPLAB X开发环境所提供的各种编程资源。

1. 新建一个空白程序。其项目属性如下:



2. 新建main.c文件
在Projects列表页面中,选中项目名称,点右键,通过弹出菜单,新建main.c文件。
Main.c中默认已经有了几行代码: 包含xc.h头文件和主函数main()。



3. 头文件结构
在main.c文件编辑区,右键,Navigate -> View Includes Hierarchy, 可以查看xc.h,以及下层包含的头文件。



当前main.c文件的头文件包含结构:


xc.h 头文件中,主要是对cci.h 和avr/io.h进行了包含,并且定义了使能/禁止中断的宏定义。



Avr/io.h文件,是通用的“索引”型头文件,对各个AVR器件的头文件进行了条件包含。



Iotn817.h 文件具体定义了ATtiny817芯片的IO口,外设寄存器等信息。



4. IO口操作

    PORTA.DIR = 0x55;
    PORTA.OUTSET = 0x55;
    uint8_t pinvalue = PORTA.IN & 0xAA;
    PORTA.OUTTGL = 0x55;

数据类型uint8_t 是标准头文件stdint.h中定义,根据上面的头文件结构,已经包含,所以不需要再进行包含。


5. 中断
-        包含中断头文件
#include <avr/interrupt.h>

-        中断处理函数:
ISR(NVMCTRL_EE_vect){
//添加中断处理函数代码
}
-        中断使能函数 ei() 或 sei().
-        中断禁止函数 di() 或 cli()


6. 延迟

-        定义 F_CPU 宏为系统频率
#define F_CPU 33333333 //3.3MHz

-        包含延迟头文件
#include <util/delay.h>

-        使用延迟函数
    _delay_ms(1000);


7. FUSE

FUSES =
{
        .APPEND = 0,
        .BODCFG = ACTIVE_DIS_gc | LVL_BODLEVEL0_gc | SAMPFREQ_1KHz_gc | SLEEP_DIS_gc,
        .BOOTEND = 0,
        .OSCCFG = FREQSEL_20MHZ_gc,
        .SYSCFG0 = CRCSRC_NOCRC_gc | RSTPINCFG_UPDI_gc,
        .SYSCFG1 = SUT_64MS_gc,
        .WDTCFG = PERIOD_OFF_gc | WINDOW_OFF_gc,
};
Fuse结构体定义在iotn817.h中






使用特权

评论回复
沙发
| 2019-5-27 14:50 | 只看该作者
这个教程不错哦!

使用特权

评论回复
板凳
| 2019-5-27 20:11 | 只看该作者
正在学习中,不错的资料。我开始建立了一个空白项目,但编译没有通过,应该是有那里没有选择好。

使用特权

评论回复
地板
 楼主 | 2019-5-28 13:40 | 只看该作者
hu9jj 发表于 2019-5-27 20:11
正在学习中,不错的资料。我开始建立了一个空白项目,但编译没有通过,应该是有那里没有选择好。 ...

用的工具版本对吗?
版本要求见下面的帖子:

http://www.kormachining.com/icview-2815420-1-1.html

使用特权

评论回复
5
| 2019-5-28 14:26 | 只看该作者
atmel studio 以后不更新了吗?

使用特权

评论回复
6
| 2019-5-28 15:15 | 只看该作者
oxygenzz 发表于 2019-5-28 13:40
用的工具版本对吗?
版本要求见下面的帖子:

对照您的帖子检查了,IDE及XC8的版本符合要求,AVR GCC是不是与XC8二选一的,MCC下载解压了,还不清楚如何使用。
我新建项目编译提示如下图,提示没有安装XC16工具,是不是我安装的是XC8,而新建项目选择的是XC16,所以出错。


使用特权

评论回复
7
| 2019-5-28 15:22 | 只看该作者
    从项目属性中看到其编译器工具链指向XC16,我不知道如何修改成XC8.



使用特权

评论回复
8
| 2019-5-29 21:13 | 只看该作者
感谢楼主分享!学习了!

使用特权

评论回复
9
| 2019-5-31 16:22 | 只看该作者
感谢楼主分享经验!学习下

使用特权

评论回复
10
| 2019-5-31 16:43 | 只看该作者
hu9jj 发表于 2019-5-28 15:22
从项目属性中看到其编译器工具链指向XC16,我不知道如何修改成XC8.

dsPIC33是16位的MCU, 当然需要XC16编译器.楼主讲的是AVR开发,AVR是8位MCU.

使用特权

评论回复
11
| 2019-6-2 11:26 | 只看该作者
实在是酷毙了

使用特权

评论回复
12
| 2019-6-5 15:12 | 只看该作者
AVR 还有活力?

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表
加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】| 加拿大28预测计划【复制fh118.com打开】|