历史上的今天
返回首页

历史上的今天

今天是:2025年01月22日(星期三)

正在发生

2020年01月22日 | PIC单片机入门笔记(新手学PIC必看)——基于PIC16F886

2020-01-22 来源:eefocus

学习PIC单片机的目的是打算做一款433M无线开关,之前学习过51与AVR单片机,对8位单片机有一些基础,不过PIC单片机还是第一次接触,先从入门开始吧!入门实验最经典的是点亮一只LED了,这次也它为例走一遍PIC开发的整个流程。虽然C语言已成主流,由于PIC单片机汇编指令只有35条,记忆容易,这次就从非主流开始!

一、准备工作
1. 在二手市场买来一本【PIC单片机原理与应用】第4版。
2. 在淘宝买来一个PIC的下载仿真器【PICkit3】。
3. 从废旧设备上面拆下一片PIC16F886的28脚单片机,用覆铜板制作了一个简单的PIC最小系统板,可以用来下载仿真、按键输入、LED指示灯、AD输入。
4. PIC开发环境MPLAB X IDE V3.6。
5. 连接好硬件,如下图



PIC仿真下载器的引脚说明如下图



1脚连接到单片机的1脚;4脚连接到单片机的28脚;5脚连接到单片机的27脚;6脚空。

二、新建项目












三、配置位
PIC单片机配置位很重要,相当于AVR单片机的熔丝位,以下是官方文档对于配置位的说明,如下图



因为最小系统板没有外接晶振,所以要选择使用内部晶振,看门狗也关闭,还有一个是LVP这个要设置为OFF,否则下载后不运行,下面贴设置方法






四、编写程序
这里有几点需要注意的
1. 使用的IO口是否有上拉电阻功能,因为有的IO口没有,在设计电路时需要的话就要加上拉电阻
2. 操作相应的寄存器时可能需要先选择该寄存器所在的存储体,设置由状态寄存器【STATUS】的RP0和RP1位控制,或IRP(间接寻址)来进行选择。

以下是控制LED间隔1秒闪烁的程序
---------------------------------------------------------------------------------------------------------------------------------
#include"p16f886.inc"

; CONFIG1
;__config 0x2FE4
__CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT &_WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF &_BOREN_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF
; CONFIG2
;__config 0x3FFF
__CONFIG _CONFIG2, _BOR4V_BOR40V &_WRT_OFF
; 使用配置位生成器在这里插入配置代码

RES_VECT CODE 0x0000 ; 处理器复位向量
GOTO START ; 转到程序的开始

; 在这里添加中断如果使用

MAIN_PROGCODE ; 让连接器放置主程序

START BSF STATUS,RP0 ;选择体1
BSF OSCCON,SCS
MOVLW H'EF' ;向TRISC写入0x0F
MOVWF TRISC
BCF STATUS,RP0 ;返回体0
LOOP BCF PORTC,RC4 ;将PORTC的RC4位清零
CALL DELAY_1S ;调用延时1秒子程序
BSF PORTC,RC4 ;将PORTC的RC4位置位
CALL DELAY_1S
CALL LOOP ;循环执行

;-------------------------------------------------------------------------------
;延时1S子程序
;-------------------------------------------------------------------------------
DELAY_1S MOVLW H'06' ;向20H写入0x06
MOVWF 20H
LOOP1 MOVLW H'EB' ;向21H写入0xEB
MOVWF 21H
LOOP2 MOVLW H'EC' ;向22H写入0xEC
MOVWF 22H
LOOP3 DECFSZ 22H ;22H自减一,不为0则继续循环,为0则间跳
GOTO LOOP3
DECFSZ 21H ;21H自减一,不为0则继续循环,为0则间跳
GOTO LOOP2
DECFSZ 20H ;20H自减一,不为0则继续循环,为0则间跳
GOTO LOOP1

RETURN ;子程序返回

END

下图是PIC16F886特殊功能寄存器,每个型号的特殊功能寄存器不太一样,需要查看芯片数据手册


总结:学单片机,不只需要时间,还需要资金的投入,应该控制好资金和时间的投入,信心要满满的,我入门PIC的过程中遇到很多问题,有想买个现成的开发板的冲动,后来问题解决了,也学到了不少,开发板虽然是现成的,但是对于硬件开发相当不利,技术应该更多的去尝试,别人的理论要通过实验来验证正确性,技术更是积累,时间久了,自然感到懂得多了,开发项目才能得心应手。关于单片机的选择,可以选择你手上拥有的任何一款PIC的芯片来学习,因为功能在强的芯片,和功能在差的芯片,基本的架构和程序编写逻辑是相同的,学好一款,其它大同小异。

推荐阅读

史海拾趣

Bivar公司的发展小趣事

随着环保意识的日益增强,电子行业对绿色环保的要求也越来越高。Bivar公司积极响应这一趋势,投入大量资源进行环保技术的研发和应用。公司推出了一系列绿色环保的电子产品,如低能耗、无毒害的电阻器和电容器等。这些产品不仅符合了市场需求,还为公司树立了良好的环保形象。

Curtis Instruments Inc公司的发展小趣事

1995年,Curtis在中国建立了独资企业科蒂斯仪器(中国)有限公司,其制造工厂于1997年投入生产。经过近20年的发展,Curtis在中国已经建立了完善的生产、研发和销售体系。2012年,Curtis在苏州工业园区成立了独立的科蒂斯技术(苏州)有限公司,进一步提升了在中国的研发和生产能力。如今,Curtis中国已成为Curtis在全球的第6个研发中心,也是中国最现代化的生产电动车辆驱动控制系统的厂商之一。

Gespac Inc公司的发展小趣事

随着全球市场的不断变化和竞争的加剧,Curtis不断加强全球布局和战略合作。公司与多家国际知名企业建立了长期合作关系,共同开发新产品、拓展新市场。此外,Curtis还积极参与国际展览和交流活动,展示公司的最新技术和产品成果,提高品牌知名度和影响力。这些全球布局和战略合作有助于Curtis更好地应对市场挑战、把握发展机遇。

Fukushima Futaba Electric Co Ltd公司的发展小趣事

进入21世纪后,中国市场的快速发展吸引了Futaba Electric的注意。为了更好地服务于中国市场,公司于2002年在北京成立了双叶电子科技开发(北京)有限公司。这家子公司专营Futaba Electric的全线产品,包括VFD真空荧光显示管、RC无线遥控设备等。通过深耕中国市场,Futaba Electric不仅扩大了产品销量,还进一步提升了品牌知名度和影响力。

雅特力(Artery)公司的发展小趣事

随着公司实力的不断增强,雅特力开始将目光投向全球市场。公司积极参与国际电子展会和论坛,与全球各地的客户和合作伙伴建立了广泛的联系。同时,雅特力还通过设立海外分支机构、开展跨国合作等方式,进一步拓展其全球市场。这些举措不仅提升了雅特力的品牌知名度和影响力,也为公司的长远发展奠定了坚实的基础。

硕颉(BITEK)公司的发展小趣事

尽管硕颉科技在知识产权方面做出了积极努力,但仍难免面临专利诉讼的挑战。在某次与凹凸科技的专利侵权诉讼中,公司虽然一度面临败诉和永久禁制令的风险,但硕颉科技迅速应诉,积极应对。最终,美国联邦巡回上诉法院废除了原判决,公司得以自由销售被诉产品,不受任何限制。这次诉讼的胜利,不仅展示了硕颉科技在应对法律挑战方面的决心和能力,也为公司的长远发展奠定了坚实基础。

问答坊 | AI 解惑

32个最热CPLD-FPGA论坛

1. OPENCORES.ORG 这里提供非常多,非常好的PLD了内核,8051内核就可以在里面找到。 进入后,选择project或者由http//www.opencores.org/browse.cgi/by_category进入。 对于想了解这个行业动态人可以看看它的投票调查。 http://www.opencore ...…

查看全部问答>

74ac164使用中遇到的问题

各位大虾,我做了一块电路,使用6片74HC164串联,相互之间的距离大约是40厘米,第一块1,2脚并联连接CPU作为数据输入,后面的片子顺序接在前面的Q8上。CLK信号直接连接到CPU。164的MR引脚直接接VCC。164的每个输出脚驱动一个晶体管(9014)。现在出 ...…

查看全部问答>

【EEWORLD中秋国庆专辑】你身边的电子牛人秀

又是一年秋来到,收获的季节总是带来意外的惊喜!       马上就是中秋国庆双节的到来,EEWORLD也不落后,与坛子里网友们也来个大收获,秀出我们坛子里的的电子牛人。这些达人都是常年活跃于坛子,他们的身影无处不在,他们的I ...…

查看全部问答>

【FPGA设计小技巧】关于FPGA时钟方面的几个概念:时延,中间态和速度

w当寄存器间数据传递的时延超过一个时钟周期,下游寄存器不能在下一个时钟周期采样到本时钟周期给出的上游数据,出现错误。 w当时钟来临时,寄存器输入发生变化,会采样到中间态。 - 建立时间不能被满足,就会采样到中间态,最后的采样结果不 ...…

查看全部问答>

ndis驱动的迷惑

高手们,WIFI的驱动在调用NdisReadConfiguration这个函时失败,请问NdisReadConfiguration这个函数是从哪里读取数据呀?怎么会失败呀?…

查看全部问答>

wince模拟器如何调整内存的大小()

有2个不明白的地方, 1.默认的内存大小是128m,但是我打开模拟器的内存管理器的时候,能看的到的内存加起来大概是60-70m,难道系统自己要占用其他的内存大小? 2.由于我的程序比较消耗内存,所以想把默认的内存大小改成256m,在网上搜了几个办 ...…

查看全部问答>

请问有没有人往WINCE下移植FLASH播放器?

如题,有这方面的人请联系QQ:414858335…

查看全部问答>

吐血啊!这个测试结果!

耗了整天。测试 64点点的FFT程序性能。两个纯汇编的程序:1. ARM7 64点FFT RADIX-2    VFFT_ARM72. CORTEX-M3 64点FFT RADIX-4  ST公司的cr4_fft_64_stm32我把VFFT_ARM7在A ...…

查看全部问答>

STM8问题2222???

1、如何设置让编译输出窗口看到代码占用的存贮大小及剩余空间?   2、程序在运行中,如何查看寄存器的动态变化,如IO高低变化等??    变量如何动态变化。3、代码中的变量右键中的(go to definition of  ...…

查看全部问答>

【晒经典】电视机电源电路

本帖最后由 dontium 于 2015-1-23 13:27 编辑 这个电路是电视机的经典电路,好几个公司都采用它   这个电路主要是厚膜6656容易坏,其工作电压是18V左右, …

查看全部问答>