快乐小小鱼的笔记 https://bbs.21ic.com/?871240 [收藏] [复制] [RSS]

日志

MPLAB下的流水灯软仿真(1)

热度 3已有 901 次阅读2013-6-19 13:27 |个人分类:PIC|系统分类:兴趣爱好

两天前,把 MPLAB好PICC都给安装上了,貌似没有什么问题,可以编译,但是不知能不能仿真,本来想下载一个PIC的代码试试,但是没有找到,索性就自己写一个PIC16F1828的流水灯的实验,来软仿真一下。任何一款单片机,它的最小系统的差别还是很大的,想要它工作,就要最小系统配置好,然后去配置自己需要的外设,来实现某些功能,单片机的软件也就是去做这些事情。不同的单片机结构不同,工作方式不同,所有要使用它,都要去阅读它的手册,一般都可以在网上下载到。刚接触一款单片机,首先要了解的是大概特性,这些都是基础,或许在写程序里涉及不到这些内容,只要有个印象,心里有数即可。在手册的前面,都有有这款单片机的大概特性介绍。

接下来,要重点关注下面的这些内容,这些是单片机运行的基础:

1.时钟:

单片机一般都有两种时钟。1,是内部RC振荡器做的时钟源,这种时钟我们不用配置它,上电就可以工作,它有默认的工作频率,一般的精度在1%以上,对于时间有要求的应用不合适的,比如串口通信。2,是外部晶体做的时钟源,时钟精度高,一般误差在20PPM,左右。PIC内部提供32M的RC振荡时钟,精度在1%,如果我们的应用对时间要求不高,就可以用这个,这样就可以节省出两个IO口。

2.内存机构:

PIC内部有3种存储器,1,RAM,是数据存储区,是用来存放程序变量的区域,有些单片机的寄存器也在这个区域内。2,ROM,目前大部分单片机都用FLASH做ROM,用来存放程序。3,EEPROM,是用来保存特殊的,重要的数据,性能比FLASH要好。其实单片机在复位后,一般都是从固定的地址开始运行,而且开始一般都是汇编,用来初始化程序能运行的基本环境,也就是有个启动的初始化过程,在这个过程中,RAM是要被清0的,我们一般都使用编译器来写我们的程序,因为这些工作都是相同的,所以编译器都帮我们完成了这些工作,在编译程序的时候,会自动把这部分链接到我们程序的前面。

我们使用任何一款单片机,都必须要先关注它的时钟,和内存,这两部分没有问题了,后面的外设才能正常的运行。我们这个流水灯,使用内部的默认振荡器,内存部分也不用我们配置,我们只要关注IO口就可以了!

IO口的配置:

pic16f1828手册的121页,就是IO口的操作,PIC单片机和51单片机的IO口功能转换一样,如果一个IO口即是串口,又是IO口,如果串口被配置了,那么这个管脚就是串口,而不是IO口了。也就是IO口功能优选权最低,只有这个管脚上其他的功能都没有配置的时候,它才是普通IO口。

PIC有3个寄存器来显示和IO有关的状态或者配置。

TRISx:数据方向寄存器。对任何一个IO来说,同一时刻IO方向只有输入和输出中的一种,当然在一个应用中,IO口可以先是输入,然后配置成输出。如果一个IO口既做输入,又做输出,那么一般配置成输入,在需要输出的时候,再配置成输出。

PORTx:管脚电平状态寄存器。这个寄存器,直接显示管脚的电平,如果管脚是高电平,相应的寄存器的位是1,和管脚方向没有关系。

LATx:输出锁存器,用来向管脚写入电平。

 

注:这里为什么有两个寄存器和管脚电平有关呢?其实是这样的,我们想给某个管脚输出高电平,我们就要操作相应的电路,让管脚输出高电平。这里的高电平只是没有接外部电路的时候,如果外部电路是低电平,我们怎样也不能输出高电平的,所有这里的高电平,只是我们的期望电平,是在输出锁存器的值。PORTx里的电平,才是真实的管脚高低电平。

我们如果直接写PORTx,其实和写LATx是一样的,因为管脚的电平是不能直接被输出的,都是控制输出 锁存器。

其实IO口的操作还有很多值得去注意的地方,1,在输入的时候,去配置管脚电平是无效的。2,不要直接对地输出高电平,可能会烧IO口的。3,IO口的能流入的电流比能输出的电流要大很多,输出一般能到20MA。

 

 

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)