修改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移动的速度放慢,好让我们的肉眼能看到。
本文关键字:暂无联系方式AVR单片机,单片机-工控设备 - AVR单片机