当前位置:首页 > 单片机 > 单片机
[导读] 单片机AVR的编程工具很多,有C,ASM,PASCAL,BASIC等等。除ASM由ATMEL公司免费提供外,其它大多数的工具都是需要收费的。而C编译器更是其中收费最高的编译器。但也有例外,那就是GCC——它不但免费而且

单片机AVR的编程工具很多,有C,ASM,PASCAL,BASIC等等。除ASM由ATMEL公司免费提供外,其它大多数的工具都是需要收费的。而C编译器更是其中收费最高的编译器。但也有例外,那就是GCC——它不但免费而且功能也几乎是“最强”的。所以我作为入门者,就开始学习它了!

一、 单片机 编程

1、 单片机 与电脑的编程有些许不同,它除一些必要地算法外,更重要的是对端口的操作。如开关量

采集、开关量控制输出、模拟量的输入、通讯的操作、显示器与键的控制等等都需要操作端口。
2、 电脑存储永久数据一般都在硬盘等介质中。而 单片机 则存放在EPROM、EEPROM、FLASH等存储器中。
3、 通讯接口的编程对 单片机 来说是至关重要的,特别在工控、网络等的应用中犹为重要。
4、 单片机 的编程与电脑编程相比有诸多限制。这就要求编程者对单片机硬件有一定的了解。


二、 AVR 单片机 编程

1、 AVR单片的硬件:我们以ATMega 16为例为说明一下AVR 单片机 吧!

这是ATMEGA 16的引脚及其功能图(来自其DataSheet)

A、 从图中我们可以看出有4个8位端口共32个引脚,大多有双重功能。它们分别命名为PORTA、PORTB、PORTC、PORTD。

B、 PORTA具备普通IO口功能外还有AD转换功能,其精度可以达到10位,即采集到的ADC的值最大不超过1023(0-1023),对应外面实际电压值的精度需要一定的简单换算(主要看其参考电压)。如参考电压为2.5V,则有2.5V为1023,则其精度为2.5V/1023就是0.00244V。如参考电压为5V,则有5V/1023也就是0.0049V。

C、 PORTB口除了基本的IO功能外,特别要提的是PB4、5、6、7的功能,它是SPI(同步串行接口),更重要的是,它可以用来下载程序。


D、 其它的暂且不说,必竟不是AVR 单片机 的介绍文章嘛。

2、 AVR 单片机 的软件:

软件当然是用来控控制这些接口的运作及其代表的含义的。这也是个非常大的问题,如果你一点都不懂软件,请也找本计算机编程的书看看吧。

三、 开始AVRGCC编程吧

好了,下面我们来看一个简单的程序吧。

在WinAVR的Programmer NotePad 2中的图:

图2

执行Make All后,生成HEX文件(本例中的文件名2.HEX)。以下是它的全过程。


> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.1 //告知avr-gcc的版本号
Copyright (C)2004 FreeSOFtware Foundation,Inc. //编译器所属于公司及其版权信息
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

//这是ELF文件的一些信息,ELF文件用于调试。
Size before: //转换前的ELF文件信息
2.elf :
section size addr
.text 208 0
.data 0 8388704
.bss 0 8388704
.noinit 0 8388704
.eeprom 0 8454144
.stab 780 0
.stabstr 1469 0
Total 2457

Converting to AVR Extended COFF: 2.cof//将ELF文件转换成AVR Studio能够接受的格式
avr-objcopy --debugging --change-section-address .data-0x800000 --change-section-address .bss-0x800000 --change-section-address .noinit-0x800000 --change-section-address .eeprom-0x810000 -O coff-ext-avr 2.elf 2.cof
DiscardingLOCal symbol outside any compilation unit: .do_copy_data_start
Discarding local symbol outside any compilation unit: .do_copy_data_loop
Discarding local symbol outside any compilation unit: .do_clear_bss_start
Discarding local symbol outside any compilation unit: .do_clear_bss_loop

Size after: //转换后的文件信息。
2.elf :
section size addr
.text 208 0
.data 0 8388704
.bss 0 8388704
.noinit 0 8388704
.eeprom 0 8454144
.stab 780 0
.stabstr 1469 0
Total 2457

Errors: none //编译过程中产生的错误数
-------- end -------- //编译结束

> Process Exit Code: 0 //avr-gcc结束信息,0表示正常结束

接下来用AVRISP程序将2.hex文件下载后AVR 单片机 中,观看效果。(可以考虑买个双龙的试验器SL_AVRAD)。

下面我们来看看avr-gcc的IDE吧。

主窗口(图3)

这是非常标准的WindowsStyle窗口。当然它由于不是专为avr-gcc设计,所以对它进行设置是必不可少的!下面我就来设置它,以使它成为我们好用的工具吧。(呵呵!可千万别小看它哦)

在设置它之前让我们来看看,我们希望是一个怎样的工具吧。参照其它软件的IDE。

首先,我们得有个工程(项目)管理器,这点PN已有,不需我们去设它。

其次,得方便我们编辑源代码,最好是有关键字(代码)高度显示,以方便我们识别它们。如果能再给我们实时的一些提示就更好了!这方便PN做得非常很好(有人说SI很好,不过我觉得每个人有每个人的习惯,不必强求)。

再次,我们得在不离开IDE的情况下,编辑C语言的makefile文件。生成我“目标代码”(计算机中术语的话叫可执行文件),并且,下载到我们 单片机 中。

好了!来看看我们对它的设置吧!

1、代码高亮设置将它设置成你习惯的模式。步骤如下:打开PN菜单Tools->Options,在Options对话框中选择Style->Schemes,你说看到了如图4、5、6所示的内容了。现在开始你的设置吧。

代码高亮设置1-预编译(图4)

代码高亮设置2-操作符(如+-*/括号等)(图5)

代码高亮设置3-数字(图6)

别小看这点小功能啊,它能帮你找到不少编程错误哦(图7)

想将代码打印出来吗,有帮助的!(图8)

其它高亮设置同上请大家自已动手吧!一定要按自己的习惯哦。

3、 设置PN中的菜单“新建”和工具栏图标 ,点击它新建文件时的文件缺省类型。我们当然希望是C类型文件啦,如下图:

定义新建缺省的文件类型(图9)

4、 下面开始设置的我们的avr-gcc工具菜单吧!

C语文的Make工具设定(图10): 精心的设置可以让你的PN,不必其它工具差哦。

5、 C语言Makefile对于初学者来说太难了,根本不知道它是干嘛的,怎么工作(说的有点夸张)及怎么编写。幸好WinAVR提供给了我们一个非常好用的工具mfile。下面就将它集成到我们的PN中来吧!

Makefile工具在PN中的设定(图11)(注意本工具设置为特殊设置)

Makefile的设置是将C:WinAVRbin下的wish84.exe、tcl84.dll、tk84.dll三个文件复制到C:WinAVRmfile目录下。并用PN打开C:WinAVRmfilemfile.tcl。修改成下图所示

修改mfile.tcl为图中选中的部分并保存(图12)

6、 设置ISP Programmer工具

ISP串行下载器的设置(图13)

按下F4后运行的结果(图14)

7、 到现在,我想你对PN有了一些了解了吧。看看下面几个图吧!

几个快捷键及其对应工具的设置(图15)它们用着实在是方便啊

Makefile执行后的图(图16)

这是PN对大项目、大工程管理的超强部分了(图17)

到此,Programmer NotePad 设置完成。

四、 Avr-gcc简易入门

1、 对端口的操作:

A、 如果我想将PORTB端口设置为输出口(8位),则在gcc中用如下方式

DDRB=0xFF; 注意:0xFF=0B1111 1111表示全为1,代表了输出。如果你改上式为:
DDRB=0x01; //即0B0000 0001,则表示,你将PORTB的第0位(PB0)设置为输出,其它PB1-7为输入。
DDRB为AVR的端口设置寄存器。

B、 从端口PORTB中读入状态,用如下方式:

Unsigned Char a=PINB; //读入端口PORTB的状态。若端口PORTB的状态如下:

PB0为高电平1
PB1为低电平 0
PB2为高电平 1
PB3为高电平 1
PB4为高电平 1
PB5为低电平 0
PB6为低电平 0
PB7为高电平 1

则有a = 0b1001 1101 = 0x9D

C、 向端口PORTB写状态(设置状态):若要装PORTB第0位和第2位置1(高电平)。

DDRB=0;//PORTB全部为输出。
PORTB=0x03; //0b0000 0101

D、 而更多的情况,我们是要将端口的某一位改变状态,而不是对整个端口操作。或只想知道端口的某一位的状态如何的?那么如何来做呢?

例如:
将PB4置1,PORTB=PORTB | 0x10; //0x10=0b0001 0000
将PB4置0,PORTB=PORTB & 0xEF; //0xEF=0b1110 1111
将PB4置翻转,PORTB=PORTB^0x10; //0x10=0001 0000
检验PB4的状态,char a=PINB & 0x10; //如果PB4为1,是a>0,否则a=0
当然,上面写法对C语言来说,简直就是垃圾代码了。C语言有它自己的方式,
例如:
PORTB |= 0x10;
PORTB &= 0xEF;
PORTB ^=0x10;
If (PINB & 0x10){ 你的语句; }
是否感觉到比较简洁啊?!

E、 当然avr-gcc也提供了两个函数对操作位,如:sbi (PORTB,4); cbi (PORTB,4);分别将PB4置1和清零。

2、 变量的类型

char
unsigned char
short
unsigned short
int
unsigned int
long
unsigned long
long long
unsigned long long
float
double
void

等等等等,这就请读者自己看资料了。

3、 程序控制语句,C语言提供了非常丰富的程序流程控制语句。

i. 循环语句

A、 For(;;)语句,如:

for(i=0;i<8;i++){
循环体;
} //本例循环8次。
注意!for语句是先比较后加减的。

B、 While(exp)语句,如:

i=0; While(i<8){
循环体;
i++;
} //本例循环8次。也是先比较后执行循环体的。

C、 Do while语句,如:

i=0;
do{
i++;
循环体;
}while(x<8);
//本例循环7次,因为它是先执行后比较的语句。因为i++在第一次比较时i已经是1了。

ii. 分支语句。

A、 if语句,大名鼎鼎语句了,几乎所有编程软件都有它的身影。没什么好说的。

B、 switch语句。等

好了,这些就不说下去了,因为如果你连这些都不清楚。你该做的是找本C教程吧。

4、 中断服务控制(SIGNAL)

voidUART_Init(void){ //中断初始化函数//
UART_Ready = 1;
UART_ReceivedChar = 0;
pUART_Buffer = 0;
outp(BV(RXCIE)|BV(RXEN),UCR); // 允许串行接收中断 //
outp( (u08)UART_BAUD_SELECT, UBRR); // 设置UART波特率 //
sei(); // 打开全局中断 //
}

SIGNAL(SIG_UART_RECV){ //串口接收完

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭