历史上的今天
今天是:2025年01月11日(星期六)
2021年01月11日 | PIC16F887 实战编程 单片机编程 基础实验教程
2021-01-11 来源:eefocus
基础操作需要看一下以下的博客,跟着走一遍。
安装MPLAB V4.05+XC8 V1.41,老师不会管你用什么版本,别的版本bug多,老版本反而好用:
https://blog.csdn.net/x1131230123/article/details/100907773
安装proteus 8.9:
https://blog.csdn.net/x1131230123/article/details/106951776
做一个基础实验(想改写到MPLAB V5+XC8 V2也看这里的博客6.3 移植操作指南):
https://blog.csdn.net/x1131230123/article/details/108757436
实物连接指南(持续更新):
https://blog.csdn.net/x1131230123/article/details/108780168
什么是编码?
汉字编码有哪些? UTF-8才是最常用的编码,GB2312只是汉字编码太局限了。

完成后:
4、
为新建的工程添加一个main.c:右键点source files --> 左键点new --> 左键点main.c…
不要中文
这样就完成了!
5、
这个时候就可以编写单片机C程序了,写个简单的(下面这程序就是控制端口B的低四位输出0101电平):
#include // #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){ } } 在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的 不用管前面那些#pragma,那些全是对xc8编译器进行一些设置的,告诉编译器怎么处理怎么处理。 6、 注意:这里是编译,英文单词是build,编译的目的是将c语言转换成hex机器文件,单片机只需要这个文件就能够正确执行我们的程序。 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)Microchipxc8v1.41binxc8.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)Microchipxc8v1.41binxc8.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 我们的hex文件在哪里?编译完成后,我们就可以在桌面那个工程文件夹里去找下图里这个hex文件,这个文件就是机器文件。proteus加载这个文件就可以执行我们写的程序。!!!!找到这个文件我们就已经成功了! You have compiled in FREE mode. 题外话:所以如何才能不处于免费模式?右键工程–>properties–>按图里的点击。 7、 现在可以谈谈另一件事情,如何proteus仿真? 8、 设置一个端口为输出 TRISA0=0 设置某个引脚为输入–>打开模拟输入 详细看书。 详细看书。 详细看书。 详细看书。 PIC16F887 单片机 PROTEUS 仿真 C程序 测温系统 TC74 DS18B20 整个程序结构一般如下: #include //part 0// 可能会放置一些子函数的声明 C语言嘛,子函数无非就是先声明,后定义。 //part 1// 各种杂七杂八的子函数放在这个地方 显示屏子函数 温度传感器子函数 报警判断子函数 按键检测子函数 void main( void ) { //part 2// 调用一些初始化程序 比如单片机引脚要读取按键高低电平,就得把这个引脚设置为输入方向 比如定时器中断初始化,设置每隔2ms执行一次中断函数 while(1) { //part 3// 这里是一个死循环体 这个位置要写单片机不断重复在做的事情,永不停息 比如检测按键输入,有输入了根据输入处理一下 比如不断调用温度读取函数,然后把结果显示出来 } } //part 3// 这里这个带了interrupt 这个函数就是中断函数 这个函数独立于所有函数之外,单独看这个函数 这个函数是需要被触发的 都是要靠设置单片机寄存器来做到的 比如在main里初始化的时候设置了定时器1的2ms中断,那么每过2ms就会执行一次high_isr()函数,在函数里面判断寄存器TMR1IF 就可以知道是定时器的2ms事件。 void interrupt high_isr( void ) { if ( TMR1IF ) { TMR1IF = 0;//清除标志位 //part 4// 这里需要写定时执行的东西, 比如我设置了一个变量是秒针倒计时,每一秒就减少1 那么我得这么写: 变量1 ++; if(变量1加到了500) { 变量1 = 0; 秒针 --; (变量1每2ms执行一次减少1,500次花费时间1s) } } } 看懂上面的框架后,我们就可以阅读更多的代码,我们可以依照以下几个注意点去看程序: (4)注重函数或者变量名称+注重分类。比如LCD1602驱动函数就是挨着的一堆,函数名都差不多有个LCD字样。有意识地去多输入一个回车,使得与其他代码间隔远一下,自己更好分清。 
写好程序后,怎么把程序弄到单片机里?单片机需要的是hex文件。
我们是C语言是人看的,我们需要需要借助MPLAB和XC8将C语言编译成hex文件。
点击下图里的图标就可以将C语言编译好。
你如果需要联调、调试、运行这几个关键词,英文单词是debug或者run等字眼,这类操作只在看程序运行到哪里,运行成了什么情况,是嵌入式程序员在开发过程中所需要的一种模式(要是经验足够也不需要这种模式)。这种事情要么需要proteus联调设置,要么需要实物单片机连接仿真器后插入了你的电脑,不要去点这些,除非你在自己进行联调操作或者调试实物操作。
会在底下看到编译提示:
题外话:编译的时候提示了一句话:
题外话:作用:此选项选择编译器的基本操作模式。可用类型有pro、std和free。在PRO模式下运行的编译器使用完全优化并生成最小的代码大小。标准模式使用有限的优化,而自由模式只使用最小的优化级别,将生成相对较大的代码。
提示:选择PRO在很多时候都不是一个明智的选择,PRO模式在编译器会“智能地”改变一些C语言的汇编实现方法,这有时候会有益于代码的最优化,但有时候会显得有些“智障”,会让能你认为能好好工作的C代码工作起来不正常。这个PRO主要是提供给有经验的嵌入式开发工程师用于优化代码的。
MPLAB中的事情已经进行完了,现在你已经知道怎么使用MPLAB建立工程,如何编写程序和编译程序,编译后的hex文件目录在哪里。
其实写好程序后,就可以链接仿真器进行下载(烧写)程序了。链接仿真器后,下面的run图标或者debug图标点一下,MPLAB都会自动讲hex文件烧写到实物单片机中,单片机就能够运行起来。这一步的操作是在调试实物的时候所用到的,字眼是debug。这里只是顺便提及一下,跟我们想要进行的仿真没有丝毫联系。
Proteus软件里面含有很多单片机和外部器件,能够模拟实物电路的运行。如果我们在Proteus软件里连接好需要的实物器件,然后将写好的程序(hex文件)加载到Proteus软件里的单片机器件里,那在Proteus软件中我们就可以看到整个电路的工作情况。我们的关注点就放到了Proteus软件中的器件连接中了。
Proteus软件的安装和基础使用参见这个链接:
https://blog.csdn.net/x1131230123/article/details/106951776
新建仿真图–>添加器件PIC16F887
将hex文件加载到Proteus软件里的单片机器件里:双击单片机器件进入下图这个设置界面—>点击打开文件符号—>选择桌面上工程里的hex文件—>打开—>点击OK—>成功。这里没有详细截图,看下图里的左边箭头去找hex文件即可!
此时可以看到Proteus软件左下角,分别是开始仿真和停止仿真按钮。我们点击开始仿真。
仿真运行后,可以看到单片机的端口B四位电平,蓝色就是低电平的意思,红色就是高电平的意思,这里就是0101的电平。如果这引脚连接了LED灯,LED灯就可以点亮。由此可见,程序生效了,单片机正常工作中。
3 单片机基础寄存器操作:
3.1 IO
设置一个端口为输入 TRISA0=1
设置一个端口输出高电平 RA0=1
设置一个端口输出低电平 RA0=0
同时设置8个端口响应使用TRISA PORTA
设置B C D端口类似。3.2 模拟输入电压读取
3.3 外部中断
3.4 定时器中断
3.5 串口UART
3.6 IIC通信
4 实际项目
PIC16F887 单片机 PROTEUS 仿真 C程序 信号发生器
PIC16F887 单片机 PROTEUS 仿真 C程序 温控电机
PIC16F887 单片机 PROTEUS 仿真 C程序 数字时钟 万年历 DS1302 阴历显示
PIC16F887 单片机 PROTEUS 仿真 C程序 抢答器
PIC16F887 单片机 PROTEUS 仿真 C程序 可存储电子琴 PIC
PIC16F887 单片机 PROTEUS 仿真 C程序 模拟电话拨号计算器 密码锁
PIC16F887 单片机 PROTEUS 仿真 C程序 电子密码锁
PIC16F887 单片机 PROTEUS 仿真 C程序 智慧门铃呼叫系统 门铃一拖 3
PIC16F887 单片机 PROTEUS 仿真 C程序 病床呼叫系统
PIC16F887 单片机 PROTEUS 仿真 C程序 测温系统 DS18B20 TC74
PIC16F887 单片机 PROTEUS 仿真 C程序 数字点餐系统5 如何阅读代码
(1)在MPLAB中建立好工程,利用好MPLAB去阅读程序;
(2)MPLAB有个窍门,在工程已经被编译后,我们可以 按住ctrl 然后鼠标左键点函数名字或变量名字去跳转,直接跳转到函数定义的地方。更需要提出的是,在子函数定义处再次ctrl+左键点函数名字,会跳转到子函数声明处。
(3)ctrl+F进入查找,可以通过Next去查看main.c整个文件中的这个查找字符串出现的每一个地方。方便看函数都在哪里用了。
史海拾趣
|
压电式爆震传感器广泛应用于发动机机体或气缸的爆震检测中。汽车防爆震系统通过检测出压电传感器的电压值来判断爆震强度。 因此,功能完善、性能稳定、操作简单、测试精度高,可满足大批量生产测试需要的爆震传感 ...… 查看全部问答> |
|
纵观世界太阳能设备产业鼻祖也就三家:美国应用材料(AMAT)、爱发科(ULVAC,原日本真空)和瑞士Oerlikon。爱发科在FPD行业拥有丰富的经验,是日本能够设计和生产薄膜太阳能电池成套设备的最大的公司之一。爱发科在薄膜太阳能设备的发展领域早,是日本 ...… 查看全部问答> |
|
今天写了一个小程序,其中包括了按键和数码管,刚开始时一切正常,但是第二次用AS 下载时却发现数码管灭了,当时也没在意,然后再下一遍程序,数码管啥也不显示。最后我用最基本的 非门来验证,却发现所有没用的管脚都是3.2v。是不是我的芯片坏了 ...… 查看全部问答> |
|
现在最著名的智能家居要数比尔·盖茨的豪宅了。他在《未来之路》一书中以很大篇幅来描绘他正在华盛顿湖建造的私人豪宅。在他的描绘中,这个住宅是“由硅片和软件建成的”并且要“采纳不断变化的尖端技术”。经过7年的建设,1997年,比尔·盖茨的豪 ...… 查看全部问答> |
|
windows ce 安装盘需要哪些组件啊? 请求各位大侠帮帮忙了! windows ce 安装盘需要哪些组件啊 我想要购买一款windows ce 的安装盘,但是我是新手,不知道应该在这个安装盘中需要哪些组件。 比如需要BSP么 还有Platform Builder 这个是盘里面自带的么 请求各位大侠帮帮忙了… 查看全部问答> |




