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

日志

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

热度 3已有 1135 次阅读2013-6-20 15:11 |个人分类:PIC|系统分类:兴趣爱好

PIC的头文件:

各种类型的单片机的寄存器不同,对应地址不同,所以每个型号单片机都有对应的头文件,头文件里定义好了这款单片机所有的寄存器,和对应的地址位置。这样,我们就可以直接对寄存器的名字进行读写,其实我们还是在对寄存器里对应的地址在读写。这样不过是更清新,更不容易出错,让编译器去帮我们转换成地址吧。一般头文件都能在编译器安装目录下的include文件夹下,PIC的也是。我把PICC装在D盘,所以在这里找到了INCLUDE文件D:\Program Files\HI-TECH Software\PICC\9.83,里面有pic16f1828.h的文件,我们添加到Header files目录下,如下图这样

然后,我们在mian.c文件的开始把这个头文件给include<pic16f1828.h>,然后编译,没有报错。看来头文件加载是对的。

 

IO操作:

流水灯的IO一直是输出,如果我们用灌电流来驱动它,就是输出高电平LED不亮,输出低电平,电流由IO口流入,LED被点亮。如果我们有6个LED,分别连在PA的0-5的管脚上,我们依次去点亮每一个LED;程序如下;

#include <pic16f1828.h>


/***********延时函数************/
void delay()
{
 unsigned char i,j;
 for(i=0;i<250;i++)
 {
  for(j=0;j<250;j++);
 }
}

/********IO口的配置,输出高电平*********/
void Init_IO()
{
 TRISA = 0x00; //1:输入;0:输出(手册126页);PA3只能是输入
 LATA = 0x3f;    //输出高电平,熄灭LED灯 
}

/************LED流水灯函数****************/
void led_circle(void)
{
 static unsigned char led = 0x01;
 while(1)
 { 
  if(led  == 0x40) //因为只有6个IO,只能循环到0x20,超过0x20后,重新开始
  {
   led = 0x01;
  }
  LATA = ~led; //因为是灌电流驱动LED,0-6依次被写入0,来点亮
  delay();  //延时,为了让肉眼看清LED灯循环
  led <<=1; 
 }

}

/*********主函数,程序的入口*******/
void main()
{
 Init_IO();
 while(1)
 {
  led_circle();
 }
 }

 

我们在这里是软仿真,仿真功能在MPLAB的Debugger菜单下,select Tool是选择仿真的工具,软仿真是MPLAB SIM,我们选择好这个后,就会发现菜单栏里多了几个按键,就是我们仿真用到的按键:RUN-F9,仿真开始,Step in -F7,是单步调试,Step over - F8是每次仿真一行,如果是函数,则直接仿真完整个函数。

我们要在我们想要知道结果的代码的地方加断点,我发现MPLAB点击RUN以后,程序不在main函数的第一行暂停,所有我们要自己加断点。

 

这样程序就能在main函数里暂停住了,我们可以按F7或者F8来调试这个程序了。我们在viev- special Fuction Registers中可以观看所有的特殊工功能寄存器的值,我们写代码,就要去操控这些寄存器。感觉MPLAB的界面和keil的界面差距还是挺大的,keil会安照外设类型来把寄存器分类,这样更容易观察,或许只是习惯问题吧。我们可以先观察我们写入数值的两个寄存器,TRISA = 0x00,实际这里TRISA = 0x08,因PA3只能是输入,不能做输出,所以把PA3设置成输出时无效的。

然后我们走到led_circle()函数,F7进入,然后用F8来仿真具体过程,可以看到,我们依次会对LATA写入0X01,0X02,0X04,0X08,0X10,0X20的值,如果我们开发板,对应就是流水灯,当然PA3这个管脚连接的LED不会被点亮,因为这个管脚只能做输入管脚,所以像这样的特殊管脚,在设计电路的时候一定要先表明出来,避免出现一些低级的错误。

MPLAB的界面总感觉不怎么好用,或许我还没有能习惯,特别是观察寄存器的值,那么多特殊功能寄存器,都放在一起,很不好找,仿真完一步都要找半天。不过它把那些功能区分还是很明确的,debugger下是仿真器,Programmer下是编译器,view下是观察芯片内部寄存器,变量和flash,EEPROM的功能。project下是工程的打开,创建,保存等。configure是配置芯片参数相关,tools下还不知道是什么工具。多练习下,熟练就好。

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)