您的位置:首页 > 产品设计 > UI/UE

智能小车41:用Atmel Studio7开发Arduino uno程序

2017-10-24 17:35 555 查看
以前有一篇是用Atmel Studio做arduino汇编程序的,相当于hello world。最近学习avr单片机,发现这个Atmel studio实在比Arduino IDE强大太多了。做为一名专业的程序员,用arduion ide也显得比较业余,毕竟arduino ide的代码不是纯粹的C语言,是经过包装后的高级语言。

新建项目,选择atmel studio菜单File->New->Project,选择如下GCC C Executable Project。



再选择设备类型为ATmega328p。完成后可以在菜单Tools->Device Programming看设备详细信息,选择设备为ATmega328p,再点Apply按钮,再点Read按钮,就会出现以下信息,。



新建项目后会生成main.c,以下C语言代码可以让arduino 板上的led(13引脚)的灯闪烁,粘到main.c里。

#include

#define F_CPU 16000000UL

#include

int main(void){

DDRB=DDRB|0x20; //设置PORTB 13号引脚输出

while(1) {

PORTB=PORTB|0x20; //设置13号引脚为高

_delay_ms(500);

PORTB=PORTB&0xDf;

_delay_ms(500);

}

return 1;

}

为什么要这么写?DDRB,PORTB都是什么?从那里来的?

打开atmega328p的数据手册,第18章有这么一段描述:





从这上面可以看出PORTB就是编号为B的端口,而代码里的0x20转为10进制就是5,就是第5位。PORTB=PORTB|0x20 的意思就是把第5位置1,其它位保留原来的值。

DDR就是Data Direction Regist的缩写,根据名称也就知道它是设置引脚的方向(输出还是输入)的了,引脚位也与上面一样。

我怎么知道13号引脚对应5呢?打开原理图,找到下图所示的地方,这里是5呢。



中间还用了一个函数_delay_ms,这个是在delay.h定义的,意思是延时毫秒数。

最后点击编译按钮,在解决方案视图里的Output Files里就能出现xx.hex文件。



得到hex文件之后,把它放到一个路径,再cmd执行以下命令把他传到arduino上去。这个是arduino ide的命令,这些参数都是从arduino ide的日志中拷出来的,端口COM3可能不一样。

avrdude -CE:/arduino/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:E:/arduino/LED2.hex:i

不出意外就能看到arduion uno闪烁led的效果了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: