进入正题吧!PIC单片机是一种高级的单片机,内部资源比较丰富,而且产品系列还说比较多的,有10-18系列的,在网上寻找了些资源后比较多的都是PIC16f887a的资料,包括网上的开发板,想必都是资料复制一片,索性没买板子,节约钱。
学习PIC单片机,你必须先选好一款单片机型号,然后针对数据手册进行学习。我这次应用到的是PIC18F45K22系列,在网上找不到相关资料,唯一有效的是官方的数据手册,还有官方中文版的哦!
看了数据手册后基本了解它的pin信息,然后学习编译软件的使用。官方的MPLAB编译软件加上MPLAB c18编译器,我选择的是MPLAB 8.7版本的(**软件需要的请邮件联系),话说装这个要有耐心,基本操作见博文MPLAB初步认识,我装好后设置编译器好几次才能正确编译c。
如果有个51单片机学习经验的新手来说,暂且把PIC单片机当51处理,按照51的流程学会基本的I/O操作,没学过也不要紧,重要是你感兴趣,才能学好,用好。
下面我们用我们的知识点亮PIC的第一个发光二极管吧!发光管二极管的发光原理:当发光二极管中流过的电流达到一定值时,二极管便会发光,一般情况下,这个电流值是3~10mA(稍微大于10mA也可以,不过最好不要大于20mA,否则二极管会被烧坏),所以我们要点亮发光二极管就是让他流过的电流在这个范围内。
在此,我用RA0-RA5这6个I/O控制led的亮灭,当RA端口为高电平(1)的时候,LED灯有电流流过,当RA端口为低电平(0)的时候,LED灯不发光。程序中只需要控制RA端口的电平即可控制LED灯的亮灭。
通过查询数据手册,可以知道PORTA口是一个8位的双向端口,有控制数据方向的方向数据寄存器TRIS,读取器件引脚电平的PORT寄存器,输出锁存功能的LATA寄存器,控制模拟还说数字口的ANSELA寄存器。控制一个I/O需要控制这么多寄存器,因为它引脚功能比较多,所以麻烦。具体使用的时候一定要看手册,对着手册应用才不会出错,或者出错的可能性比较小。
点亮LED灯程序:
#include <p18f45k22.h>//头文件,对单片机引脚的功能定义,必须加入正确才有效工作。
//#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF // CONFIG1H #pragma config FOSC = XT, FCMEN = OFF, IESO = OFF
#pragma config FOSC = HSMP, FCMEN = OFF, IESO = OFF
#pragma config PWRTEN = OFF, BOREN = SBORDIS, BORV = 285 //CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768 // CONFIG2H
#pragma config MCLRE = INTMCLR, LVP = OFF // CONFIG3H
//#pragma config STVREN = ON, LVP = OFF, XINST = OFF // CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF , CP2 = OFF,CP3 = OFF // CONFIG5L
#pragma config CPB = OFF, CPD = OFF // CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF,WRT2 = OFF, WRT3 = OFF // CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF // CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF,EBTR3 = OFF // CONFIG7L
#pragma config EBTRB = OFF
//以上信息为配置位信息,根据你的需求配置正确才可以工作。
void main()
{
ANSELA=0×00;//控制I/O口是模拟端口还还是数字端口,ANSELAx=0,为数字端口,为1是模拟端口。 TRISA=0×00;//数据方向寄存器,为0是输出,为1是输入
LATA=0xFF;//输出控制,将输出值控制锁存器输出设定的值。还有一个PORT它是读取引脚电平的,但是在pic16系列却可以输出引脚电平,在此,希望大家可以看清手册操作。
while(1);//
}
以上就是针对led的操作,下次我将详细介绍下PIC单片机的配置位信息,并补充PORTA端口的知识。
用户412065 2012-12-15 00:15
用户1676786 2012-12-14 11:56