您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机Programmer Notepad的配置与AVRGCC入门 正文
Programmer Notepad的配置与AVRGCC入门

Programmer Notepad的配置与AVRGCC入门

点击数:7443 次   录入时间:03-04 11:41:11   整理:http://www.55dianzi.com   AVR单片机

修改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)

void UART_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){ //串口接收完成中断服务进程(子程序)//
UART_ReceivedChar = 1; // 指示已经接收到一个字符 //
UART_RxChar = inp(UDR); // 将收到的字符存储起来 //
}
其中SIGNAL标示了下面的语句由中断来调用。

五、 实例设计与编程


试验电路图(图18)

好了,写了这么多,让我们也看个实例先吧,硬件电路图如图18。

软件编程如下:

软件在PN中编写的结果如上图。

其中第1、2行为预编译语句,它们告诉编译器一些重要的信息。如 单片机 内的寄存器名称对应的向量等.DDRB、PORTB就在io.h内定义的(其实它在本例中是在iom16.h中定义的,io.h是所有AVR单片机公共定义,它从makefile中提取单片机类型,来从include\avr下取出对应的实际io*.h文件)。

第4行为C语言的主函数,特别要注意的是,avr-gcc的主函数类型必须为int类型。否则出现警告错误warning: return type of 'main' is not `int'。

第5行定义了三个无符号字符型变量:i,j,k。

第6行定义了端口PORTB全部为输出。

第7行在端口PORTB中输出高电平。

第8行到第18行为一个无限循环语句。

第9行开始到第17行也是一个循环。用它的目的是将端口PORTB的某一位置低,让LED点亮。

第10行是向端口的某一位(由变量k指定),其中十分重要的是 ~(1<

第11行到第15行由两个for循环构成的延时部分,它可以使LED移动的速度放慢,好让我们的肉眼能看到。



上一页  [1] [2] 


本文关键字:暂无联系方式AVR单片机单片机-工控设备 - AVR单片机