历史上的今天
返回首页

历史上的今天

今天是:2024年12月16日(星期一)

正在发生

2019年12月16日 | 看完这篇文章,PIC单片机就能入门了

2019-12-16 来源:elecfans

  可能很多网友奇怪,在数字芯片高速发展的今天,32位单片机价格低廉,功能强大,芯片成本已经不是产品开发的主要问题,那为什么还要普及PIC单片机,这样一款中低端的单片机呢?原因很简单,既然现在还没有被淘汰的,总有它存在的理由,PIC单片机号称稳定性极好,可以在十分恶劣的环境下稳定工作,因此在工业领域受到工程师们的偏爱,而且目前来看,任何一个系列的单片机都在不断的推陈出新,产品性能也在不断的提升,PIC单片机也一样,高端的PIC单片机也有32位的,主频高达上百兆,详细介绍大家可以去官网查看。


  促使我写这样一片文章的另外一个原因是,网上关于PIC单片机的入门或者学习资料相对较少,不像STM32或者51单片机那样丰富,如果是有一定单片机基础的,想学习PIC单片机,看完这篇文章,应该就可以入门了。


  来介绍一下我所使用的平台信息、调试工具。

  PIC单片机型号:dsPIC30F6014A

  开发环境:MPLAB X IDE v3.05

  下载工具:PIC Kit 3.5

  

  PIC Kit 3.5下载器

  一、 安装开发环境

  我是直接在官网(www.microchip.com)上下载的MPLAB X IDE v3.05版本,400多兆,应该是最新版本了,安装过程中使用推荐选项就可以,还安装了一个C30编译器(MPLAB_C30_V3.0)。


  二、 新建项目

  我安装开发环境的时候,选择了中文版本,进入开发环境后,点击:文件à新建项目,弹出如下界面:选择独立项目,然后点下一步。

  

  步骤一

  点击下一步后弹出如下界面:选择你使用的单片机型号,这里我使用的是dsPIC30F6014A 16位单片机。

  

  步骤二

  继续点下一步,这里选择调试/下载工具,我使用的是PICkit3。

  

  步骤三

  下一步,这一步选择的是编译器,选择C30编译器。

  

  步骤四

  最后一步,选择项目的保存目录,编码这里选择的是GB2312,这样做的目的是使项目中的中文字符能够被识别,否则,添加中文注释时会出现乱码。

  

  步骤五

  至此,项目新建完毕,界面如下,项目目录里面,我们目前只需要关注头文件和源文件即可,在头文件上右键可以选择添加现有的头文件,源文件同理。

  

  文件添加完成后,点击编译按钮进行编译,编译通过后会在环境下方提示编译信息,

  

  编译成功后,可以进行下载和在线调试,下载按钮用于将程序下载到单片机内部,调试按钮用于在线调试程序,注意,点击调试按钮程序不会下载到单片机内。

  接下来以闪灯测试程序来讲解这款单片机的使用,在此之前先来了解一下《配置位》,在开发环境中,点击运行àSet ConfiguraTIon Bits,即可在环境下方调出配置窗口,OpTIon下面的定义可以修改,

  

  这里说一下时钟配置和看门狗配置,FOSC用于配置系统时钟,FWDT用于看门狗的配置,如果你想使用外部晶振、内部进行16倍频,就选择 XT_PLL16即可,如果是内部时钟、4倍频,就在选项中选择FRC_PLL4,同理,看门狗的开启和关闭,以及开启后的设置也可以通过FWDT来配置,这里我们选择关闭看门狗,只需将WDT选项选择为WDT_OFF即可,注意,这里选择好之后,必须点击输出生成源代码,会自动生成源码,生成的源码拷贝到你的项目文件中才有效。


  至于一些详细的配置请自行参见手册。

  

  生成代码

  下面贴出LED闪灯的源码,并逐语句进行讲解。

  本文引用地址:http://www.eepw.com.cn/arTIcle/279441.htm

  

  #include “p30f6014A.h” //包含头文件

  _FOSC(CSW_FSCM_OFF & XT_PLL16); //配置时钟

  _FWDT(WDT_OFF); //关闭看门狗

  假设使用的外部晶振为5Mhz,系统指令周期的计算方法为:

  5M*16/4=20MIPS

  16为16倍频,每执行一条指令要4个时钟周期,因此要除四,就得到了实际的系统时钟。


  IO端口的配置

  IO端口使用很简单,和51相比只是多了一个方向控制,在使用端口之前 ,先设置好方向。假设我们使用的端口A的第十位作为LED的控制位,首先设置该管脚的方向,

  TRISAbits.TRISA10 = 0;//该位置零为输出,置1位输入

  控制端口实际输出高低电平的寄存器位LATAbits,将该寄存器的LATA10位进行置1置0操作,即可输出高、低电平。


  #define LED LATAbits.LATA10

  值得注意的是,当进行读引脚操作时,要读PORTAbits寄存器,而不是LATAbits寄存器。


  我们是采用定时500ms中断的方式来进行LED的亮灭控制,因此需要进行定时器的配置,这里使用的是16位定时器TImer1。涉及到两个函数。


  ConfigIntTimer1(5);//初始化定时器1,中断优先级为5

  OpenTimer1(39062);//进行相关配置并打开定时器1

  void ConfigIntTimer1(unsigned char priority)

  {

  IFS0bits.T1IF = 0 //清除中断标志

  IPC0bits.T1IP = priority; //设置中断优先级

  IEC0bits.T1IE = 1; //使能中断

  }

  void OpenTimer1(unsigned int period)

  {

  TMR1 = 0; /* Reset Timer1 to 0x0000 */

  PR1 = period; //中断周期

  T1CONbits.TCS = 0; //选择时钟源

  T1CONbits.TSYNC =1;

  T1CONbits.TCKPS =3; //256分频

  T1CONbits.TGATE =0;

  T1CONbits.TSIDL =0;

  T1CONbits.TON = 1; //启动定时器

  }

  选择系统时钟(20MIPS),并进行256分频,20M/256=78125,说明定时器计时到78125要用1秒钟,定时到500ms需要 39062个周期,因此需要设置计时周期为39062,而且由于定时器1为16位定时器,无法计时到一秒,如果需要计时1s可以使用32位定时器 timer23和timer45。


  定时器1中断函数

  void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)

  {

  IFS0bits.T1IF = 0;//清零中断标志

  LED = !LED;//对LED循环取反,进行亮灭控制

  }

  如此便可实现LED闪烁功能。

  附上完整的工程源码,请下载查看:

  http://forum.eepw.com.cn/thread/276018/1


  在使用该款单片机的时候还需要注意几个问题:

  1、 由于单片机的管脚有复用功能,在使用端口B的时候,如果想将端口B的第7位用作数字IO,需要这样来设置,(其它端口无需这样操作)

  ADCON1bits.ADON = 0;//关闭AD转换器

  ADPCFGbits.PCFG7 = 1;//该位必须置位,否则PORTB_7无法用作数字IO管脚

  2、 在系统的安装目录下,自带了单片机各个资源的使用例程,使用者可以参考。我的目录是:C:Program Files (x86)MicrochipMPLAB C30srcperipheral_30F_24H_33Fsrc pmc (供参考)

  3、 在使用串口资源时,需要准确设定串口波特率,以设置UART1, 9600波特率为例,波特率计算方法为:20MIPS/((9600+1)*16)=130。将130赋给U1BRG寄存器即可。

  4、 该单片机具有内部EEPROM,如果需要存储的数据量不大的话,一些需要掉电存储的参数可以存储在单片机内部,可简化外部电路设计。


  有了以上的基础,相信学习这款单片机就轻松多了,可以使初学者少走弯路,集中精力解决实质性问题

推荐阅读

史海拾趣

ABL Aluminum Components公司的发展小趣事

随着全球环保意识的提高,ABL公司开始注重绿色环保和可持续发展。公司研发出了一种环保型铝合金材料,这种材料在生产和使用过程中对环境的影响较小。同时,ABL公司还加大了对生产废料的回收利用力度,降低了生产过程中的资源浪费。通过践行绿色环保理念,ABL公司赢得了社会的广泛认可和支持,为公司的长远发展奠定了坚实基础。

这些故事虽然是以虚构的形式呈现的,但它们基于电子行业中的常见发展路径和趋势,因此具有一定的参考价值。希望这些故事能够满足您的需求。

DMEL Inc公司的发展小趣事

在技术创新的基础上,DMEL Inc开始积极拓展市场。公司首先瞄准了欧美等发达国家市场,通过参加国际展会、建立海外销售网络等方式,成功打开了国际市场的大门。同时,DMEL Inc也关注国内市场的变化,不断调整产品策略,满足国内消费者的需求。随着市场份额的逐步扩大,DMEL Inc的知名度也不断提升。

Enable Semiconductor Corp公司的发展小趣事

品质是Enable Semiconductor Corp公司的生命线。公司从原材料采购到产品生产、从质量检测到售后服务,都严格执行质量管理体系的要求。这种对品质的执着追求使得公司的产品在市场上享有良好的口碑。同时,公司还积极参与国际标准的制定和认证工作,不断提升产品的国际竞争力。

Dicon Fiberoptics Inc公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,DiCon积极开展国际合作与全球布局。公司与多家国际知名企业建立了战略合作关系,共同研发和推广光纤通信技术。同时,DiCon还在全球范围内设立了多个研发中心和销售分支机构,以便更好地服务当地客户和市场。

AUSTIN公司的发展小趣事

随着汽车市场的不断变化和消费者需求的多样化,奥斯汀汽车也在不断调整市场策略和产品布局。公司根据市场需求推出了一系列新的车型,并积极拓展海外市场。虽然奥斯汀汽车在历史长河中经历了许多波折和挑战,但其品牌精神和传统始终得以传承和发扬。如今,奥斯汀汽车已经成为了英国汽车文化的重要组成部分,其经典车型和品牌形象仍然深受消费者喜爱。

这些故事展示了AUSTIN汽车公司在汽车行业中的发展历程,从创始与早期成功,到危机与重生,再到技术合作与国际化发展,以及产品创新与多样化,最终实现了市场调整与品牌传承。这些事实性的描述,旨在呈现AUSTIN汽车公司在历史长河中的真实面貌,而不涉及任何褒贬评价。

3M公司的发展小趣事

随着汽车行业的竞争日益激烈,奥斯汀汽车开始寻求与其他公司的技术合作。1952年,奥斯汀与诺菲尔德车厂合并,组成了英国汽车公司(BMC),旗下包括莫里斯、沃尔斯利、莱利及MG等多个品牌。此外,奥斯汀汽车还积极与国际汽车公司展开合作,如与日产汽车在1952年签署了技术合作协议,共同开发新的车型。这些合作使得奥斯汀汽车的技术水平得到了显著提升,同时也推动了公司的国际化发展。

问答坊 | AI 解惑

电磁兼容的概念与设计

电磁兼容的概念与设计…

查看全部问答>

CC2430 等TI系列芯片SPI通信程序编写

介绍了cc2430等TI芯片如何配置SPI,内容比较详细~~…

查看全部问答>

FSEZ1317 调试新状况3*1w--解析

隔离 3*1w 85--265输入   原边反馈;   空载10。4V输出;带载后9.9V,350MA(85-265)   一切正常;   现在状况:客户说是一般外购LED灯有几个档次(如3-3.2v,3.2-3.4,3.4-3.6V LED压降),一般采购是   其中 ...…

查看全部问答>

关于CS8900A网络芯片的应用问题

我目前在做ARM9+CS8900A+LWIP的移植工作,基于10BASE-T模式和IO访问模式,接上网线并系统上电后CS8900A的LANLED有闪烁同时LINKLED常亮,说明芯片已经找到了网络,然后运行程序,CS8900A的内部寄存器的读写都没问题,在Receiver Event中使能RxOK/单播/广播 ...…

查看全部问答>

如何把WICE5.0裁剪得很小?-为了启动速度

我用优龙的2410,发现启动最慢的地方是在把NAND下的WINCE考到SDRAM的过程,大概需要15秒 WINCE的NK.NB0文件大概有30M,我尝试去掉那些WORD VIEW,PDF VIEW等,编译出来的WINCE并没有变小多少 或者有没有更快的 读取NAND的方法,目的只为了提高启 ...…

查看全部问答>

winCE下载过程中不启动的 问题

我在编好wince内核烧写板子的时候,下载成功,但是总是卡在: Download successfully! jumping to image at 0x8**** 不动了 ,我用开发商给的内核就能启动。这是为什么呢?我怀疑是下载内核后eboot的跳转地址不匹配。可是怎么改呢?…

查看全部问答>

有没有谁对 MMS 彩信协议、PPP 协议熟悉的同学?

如题,有项目,寻求合作,最好在北京。 fengming@263.net QQ:235382…

查看全部问答>

LED背光源基础知识

replyreload += \',\' + 688620;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

Cadence SPB 16.2 Crack下载

Cadence SPB 16.2 Crack破解下载,提供给有需要的朋友!!!…

查看全部问答>

模电学习

Uc为控制电压,当Uc为高电平时,闭合即MOS管导通;当Uc为低电平时,断开即MOS管截止。 问题:请问输入端的二极管,电容,电阻各起什么作用,为什么他们要这样联?谢谢给个大侠。 …

查看全部问答>