微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > PIC单片机——点亮一个流水灯(含程序)

PIC单片机——点亮一个流水灯(含程序)

时间:10-02 整理:3721RD 点击:

MPLAB简介及PIC点亮的第一个流水灯

1.PIC16F87X系列单片机引脚简介

PIC16F87X系列单片机的引脚分为两种:一种为40脚(包括871,874,877这三种),如图所示;另一种为28脚(包括870,872,873,876这四种)。


PIC16F877除了基本电路所占用的7根引脚外,其余的33支引脚都可当成输出、输入引脚,输入输出端口是单片机基本元素,可以与周边电路进行电路控制和信号传输与检测。PIC是8位的单片机,以引脚特性分组,每组尽量凑满8支引脚,并将I/O命名为PORTA(RA0~RA5)、PORTB(RB0~RB7)、PORTC(RC0~RC7)、PORTD(RD0~RD7)和PORTE(RE0~RE2)等,

各分组特性说明如下:

PORTA

PIC16F877的PORTA总共有6位(RA0~RA5),PORTA的引脚可作为数据输出输入端口,而系统重置后,PORTA自动成为模拟输入状态,可读取模拟输入信号。

PORTB

PORTB总共有8位(RB0~RB7),可以编写程序规划输入输出方向、状态,其中,要进行烧录时,使用到三个引脚,分别是引脚36(RB3/PGM)、引脚39(RB6/PGC)与引脚40(RB7/PGD)。

PORTC

PORTC总共有8位(RC0~RC7),除了可作为数据I/O外,还和一些特殊功能的外围电路共享引脚,例如CCP(直流马达控制)、I2C、SPI(同步串行通信电路)、UART(异步串行传输电路)等。PORTD

PORTD总共有8位(RD0~RD7),可作一般数据I/O外,并与PSP(ParallelSlavePort)并行传输区共享。当整体系统需要多机时,彼此可以经由并行传输区来快速传输资料。

PORTE

PORTE总共有3位(RE0~RE2),PORTE的引脚8、9、10有三种功能,除了基本I/O功能,还有模拟输入功能,而上述PORTD的并行传输区设定所需的控制引脚,如/RD、/WR、/CS等,也是属于PORTE引脚。

2.PIC开发工具的简介

首先需要用到的编辑工具是MPLAB,安装好MPLAB后,由于MPLAB只能编译汇编语言,不能编译C语言,所以需要安装PICC编译器,但是PICC是收费软件,网上有破解版的,可以拿来作为学习使用。对PIC进行烧写程序需要用到PC端软件,其装好后打开状态如下图所示:


出现错误的原因是串口没有连接好。注意,使用些下载工具时,必需先将目标板连接好,并加上电源,然后再打开这个软件,另外下载完毕后必需先关闭软件,再关闭实验板,否则会出现问题。

首次使用MPLAB需要进行设置,具体方法:Project——SelectLanguageToolsuite...——HI-TECH的路径选择。

3.新建工程

Project——ProjectWizard——Next——选择芯片型号——Next——ActiveToolsuit——HI-TECH——选择该工具正确完整路径——Next——工程名字与存放路径——Next——添加或者Next——Finish。

新建一个文本文件,并保存为.c文件,即可在此进行程序编辑了。

(好像工程应该建立在\MPLAB\MPLABIDE\Core\目录下才管用,建立在其它地方会出错。)


4.点亮第一个发光管

4.1设置端口I/O状态

※I/O端口的寄存器,复位后,默认为输入(输出高阻态)

※方向控制寄存器:TRISA~E

※数据寄存器:PORTA~E

为了实现I/O端口的功能必需先对端口进行初始化设置。方向控制寄存器与数据寄存器都是8位的;方向控制寄存器中的每一位与数据寄存器中的每一位相对应;对应关系如下图所示:

TRISn复位值为0xff


方向控制寄存器的相应位设置为1表示输入,设置为0表示输出;

端口控制寄存器的相应位设置为1表示输出高电平,设置为0表示输出低电平。

※I/O口编程要点:

端口驱动能力

每个I/O口允许最大25mA的灌电流和20mA的拉电流,可以直接驱动LED和继电器。因各端口结构不同,RB口提供的总灌电流和总拉电流可达150mA和100mA;其他端口为80mA和50mA;

五个端口驱动电流之和不大于200mA。TRISn始终控制着PORTn的输入输出方向。


4.2流水灯程序例子

#include<pic.h>

#defineucharunsignedchar

#defineuintunsignedint

__CONFIG(0x3B31);

voiddelay(uintx)

{

uinta,b;

for(a=x;a>0;a--)

for(b=110;b>0;b--);

}

voidmain()

{

uchari;

TRISD=0x00;

while(1)

{

PORTD=0x01;

for(i=8;i>0;i--)

{

delay(200);

PORTD=PORTD<<1;

}

}

}

关于程序中的红色标记部分的数值,参考PIC资料的Configurationbit的各位含义。

编译通过生成.hex文件后,打开板子电源,然后再打开MicroPro软件,设置好串口号后,点击Program选择下载程序.hex文件。


4.3软件仿真

首先进行设置:Debugger——MPLABSIM


View下面包含很多调试选项,选择相应选项,

即可对各个寄存器的运行状况进行查看。选择watch可以跟踪变量的变化。

Debugger——stopwatch:可以对运行时间进行调试。


转自网络。



谢谢分享

谢谢分享  的确非常简单   

使用51的更简单,PIC因为MAPLAB是微芯专用的开发环境,
没有Keil普及度高

顶一下,,,,,,,,,,,,,,

虽然不懂 但是现在有很多设备上面还用51系列的单片就能说明情况

是的,51普及度依然遥遥领先

这个我有一个51单片机的程序下载板 可是由于有时间没有用了 将其程序忘了 而且也联系不到卖家了  不知该如何处理 望赐教

单片机下载器很便宜,淘宝几块钱就能买到。
安装个KEIL,你就能自己写程序烧进板子玩起来了。

程序不会写   只会仿制      

都是从模仿开始的,
写的多了就会了。
把单片机外设写一遍,就掌握个差不多了。

不会搞呀   只能借鉴别人的程序搞些小的DIy

你要是C不太会的话,就翻下谭浩强的书,
程序模仿多了,你自然就有出路。
咱上学学东西,也是学习前人成熟的知识体系,
学会了就是自己的了。

谭工的C语言有的   可是看不懂    哎  别提软件好吗

哈哈,
没事,软件也是我的短板

我中专毕业  在上学时只上过2个月的单片机基础课 学过不到2章的汇编语言  连我们老师都是似懂非懂的  你想我能学到什么  硬件我可以搞甚至是自学 但是软件牵扯太多 故始终学不会  现在一看到单片机我头都大  

嗯,看到你的心酸史,
我也是深有体会,学校教的少,完全自学还是很吃力的。
不过如有需要,可以互相交流哈。

谢谢分享!

谢谢分享

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top