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

以前有一篇是用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的效果了。



文/中中 浏览次数:0次   2017-10-24 17:02:06

相关阅读


评论: