本帖最后由 强仔00001 于 2015-1-29 14:39 编辑
今天花了几十分钟看看mega328p的IO部分的内容,书册的GPIO部分看完了,这部分比较简单,在mega328p芯片中,每个IO口由3个寄存器控制,分别是PORTX,DDRX,PINX,X是B,C或者D。 DDRX就是设置管脚的方向的,对它写1就是设置为输出,对它写0就是设置为输入。 PORTX就是具体设置管脚的输出值,对它写1就是输出高电平(DDRX=1时),对它写0就是输出为低电平。 PINX就是读引脚的状态。 例如下面的例子: PORTB |= 0x20; DDRB = 0x20; 就是把PORTB5设为输出,输出初始电平是高电平。 现在我来分享下ASF Wizard见模板的功能吧。首先我先要新建一个新的工程。
上面画着红框的是工程的名字和存放的路径,大家工程存放的路径最好是全英文的路径,否则会出现意想不到的状况。
器件要选择ATmega328P。
新建好的工程如上图: 现在工程里还没有相关的驱动库,现在就用ASF Wizard来添加。 首先打开ASFWizard,在ASF->ASF Wizard打开,如下图:
然后就会弹出一个页面,左边是没有添加进去相关的驱动库或者相关的 API函数,我们可以点击 ADD来添加到右边,如下图:
点击 ADD后就会添加到右边,注意现在显示绿色高亮,代表还没加入,我们可以点击 Apply最后确定添加到你工程目录中,如下图:
等进度条走完就可以了。 现在高亮的绿色字没有了,代表已经添加到我们的工程中。 现在贴出我按键控制LED亮灭的源代码吧:
#include <asf.h>
int main (void)
{
// Insert system clock initialization codehere (sysclk_init()).
board_init();
PORTB |= 0x20;
DDRB = 0x20;
// Insert application code here, after theboard has been initialized.
while(1)
{
if(PINB & (0x80))
{
PORTB |= 0x20;
}
else
{
PORTB &=~(0x20);
}
} 视频稍后奉上
|