打印
[学习资料]

PIC16F887 实战编程 单片机编程 基础实验教程

[复制链接]
5191|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwsan|  楼主 | 2021-7-6 08:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1 PIC工程建立与仿真

这一步主要教大家怎么做一个完整的工程,整个过程熟悉后,就可以做自己的实际项目了。
注意:下面你将阅读到的内容并不涉及到MPLAB和PROTEUS联合调试,先忘记你之前所学的然后跟着下面博客的去理解这个思路。
1、
首先去桌面创建2个文件夹,如下面这图。一个必须是英文的,一个可以中文;一个用于存放PIC工程的,一个存放proteus仿真文件。题外话:电脑用户名是中文的建议重装电脑系统。


使用特权

评论回复
沙发
gwsan|  楼主 | 2021-7-6 08:03 | 只看该作者
2、
打开IDE


使用特权

评论回复
板凳
gwsan|  楼主 | 2021-7-6 08:05 | 只看该作者
打开后:

使用特权

评论回复
地板
gwsan|  楼主 | 2021-7-6 08:06 | 只看该作者
3、
新建一个工程:
file->new project


使用特权

评论回复
5
gwsan|  楼主 | 2021-7-6 08:08 | 只看该作者
嵌入式标准工程:


使用特权

评论回复
6
gwsan|  楼主 | 2021-7-6 08:08 | 只看该作者
芯片型号


使用特权

评论回复
7
gwsan|  楼主 | 2021-7-6 08:09 | 只看该作者
仿真器


使用特权

评论回复
8
gwsan|  楼主 | 2021-7-6 08:09 | 只看该作者
npasm其实就是MPLAB自带的编译器,需要写汇编语言的。
下面的XC8是我们自己装的编译器产品,我们选XC8。注意!V1.41可以更好的编译,新的V2版本有的地方有bug,我不清楚指令的详细区别,所以直接建议就安装MPLAB V4.05 +XC8 V1.41 。


使用特权

评论回复
9
gwsan|  楼主 | 2021-7-6 08:10 | 只看该作者
工程名字也必须英文,不然有bug:


使用特权

评论回复
10
gwsan|  楼主 | 2021-7-6 08:12 | 只看该作者
选工程路径,去选择桌面上新建的那个文件夹,这样整个程序工程都会存在那个文件夹里。


使用特权

评论回复
11
gwsan|  楼主 | 2021-7-6 08:21 | 只看该作者
编码选择UTF-8。 UTF-8才是最常用的编码,GB2312只是汉字编码太局限了。

使用特权

评论回复
12
gwsan|  楼主 | 2021-7-6 08:23 | 只看该作者
完成后:


使用特权

评论回复
13
gwsan|  楼主 | 2021-7-6 08:24 | 只看该作者
4、
为新建的工程添加一个main.c:右键点source files --> 左键点new --> 左键点main.c…


使用特权

评论回复
14
gwsan|  楼主 | 2021-7-6 08:50 | 只看该作者
不要中文


使用特权

评论回复
15
gwsan|  楼主 | 2021-7-6 08:51 | 只看该作者
这样就完成了!


使用特权

评论回复
16
gwsan|  楼主 | 2021-7-6 08:53 | 只看该作者
5、
这个时候就可以编写单片机C程序了,写个简单的(下面这程序就是控制端口B的低四位输出0101电平):


#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG1
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE =ON      // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown Out Reset Selection bits (BOR disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
#pragma config LVP = OFF        // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming)

// CONFIG2
#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)

void main(void)
{

    TRISB=0b11110000;//高四位输入 低四位输出
    PORTB=0b00000101;//高四位的设置无效 低四位输出0101
    while(1){
    }
}


使用特权

评论回复
17
gwsan|  楼主 | 2021-7-6 08:59 | 只看该作者

在所有的预处理指令中,#pragma
指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。

不用管前面那些#pragma,那些全是对xc8编译器进行一些设置的,告诉编译器怎么处理怎么处理。


使用特权

评论回复
18
gwsan|  楼主 | 2021-7-6 09:06 | 只看该作者
6、
写好程序后,怎么把程序弄到单片机里?单片机需要的是hex文件。
我们是C语言是人看的,我们需要需要借助MPLAB和XC8将C语言编译成hex文件。
点击下图里的图标就可以将C语言编译好。

注意:这里是编译,英文单词是build,编译的目的是将c语言转换成hex机器文件,单片机只需要这个文件就能够正确执行我们的程序。
你如果需要联调、调试、运行这几个关键词,英文单词是debug或者run等字眼,这类操作只在看程序运行到哪里,运行成了什么情况,是嵌入式程序员在开发过程中所需要的一种模式(要是经验足够也不需要这种模式)。这种事情要么需要proteus联调设置,要么需要实物单片机连接仿真器后插入了你的电脑,不要去点这些,除非你在自己进行联调操作或者调试实物操作。


使用特权

评论回复
19
gwsan|  楼主 | 2021-7-6 09:07 | 只看该作者
会在底下看到编译提示:

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'
make  -f nbproject/Makefile-default.mk dist/default/production/helloworld.X.production.hex
make[2]: Entering directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'
"D:\Program Files (x86)\Microchip\xc8\v1.41\bin\xc8.exe" --pass1  --chip=16F887 -Q -G  --double=24 --float=24 --opt=+asm,+asmfile,-speed,+space,-debug,-local --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist -DXPRJ_default=default  --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib   --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/main.p1  main.c
"D:\Program Files (x86)\Microchip\xc8\v1.41\bin\xc8.exe"  --chip=16F887 -G -mdist/default/production/helloworld.X.production.map  --double=24 --float=24 --opt=+asm,+asmfile,-speed,+space,-debug,-local --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist -DXPRJ_default=default  --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"      --memorysummary dist/default/production/memoryfile.xml -odist/default/production/helloworld.X.production.elf  build/default/production/main.p1     
Microchip MPLAB XC8 C Compiler (Free Mode) V1.41
Build date: Jan 24 2017
Part Support Version: 1.41
Copyright (C) 2017 Microchip Technology Inc.
License type: Node Configuration

:: warning: (1273) Omniscient Code Generation not available in Free mode

Memory Summary:
    Program space        used     Dh (    13) of  2000h words   (  0.2%)
    Data space           used     2h (     2) of   170h bytes   (  0.5%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Data stack space     used     0h (     0) of    60h bytes   (  0.0%)
    Configuration bits   used     2h (     2) of     2h words   (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)


You have compiled in FREE mode.
Using Omniscient Code Generation that is available in PRO mode,
you could have produced up to 60% smaller and 400% faster code.
See http://www.microchip.com/MPLABXCcompilers for more information.

make[2]: Leaving directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'
make[1]: Leaving directory 'C:/Users/xd_du/Desktop/PICproject/helloworld.X'

BUILD SUCCESSFUL (total time: 1s)
Loading code from C:/Users/xd_du/Desktop/PICproject/helloworld.X/dist/default/production/helloworld.X.production.hex...
Loading completed




使用特权

评论回复
20
gwsan|  楼主 | 2021-7-6 09:09 | 只看该作者
我们的hex文件在哪里?编译完成后,我们就可以在桌面那个工程文件夹里去找下图里这个hex文件,这个文件就是机器文件。proteus加载这个文件就可以执行我们写的程序。!!!!找到这个文件我们就已经成功了!


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

3426

帖子

1

粉丝