打印
[PIC®/AVR®/dsPIC®产品]

如何反汇编PIC的二进制代码

[复制链接]
382|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
youtome|  楼主 | 2022-4-30 22:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

1 准备好需要反汇编的代码文件.hex ;

2 File --> Import-->Hex File ;

3 按下图填好;

4 点击Finish;

5 选择Production-->Set Configuration Bits后,就会弹出下图;然后在红色圈处就可以选择Program Memory

6 在下图红色圈处选择Code后即出现Disassembly Code


二 程序

1 最初的程序:

#include<pic.h>

void delay(long i);

void main(void)
{
     __CONFIG(OSC_IntRC&WDT_OFF&CP_OFF&MCLRE_ON);
  
     OPTION  = 0x40;      //关闭内部上拉
     TRIS        = 00001001;      //GPIO1、GPIO2输出;GPIO0、 GPIO3输入;高四位不可修改,默认为0
     OSCCAL  = 0x00;    // 内部时钟校正参数
     GP2 = 1;
     GP1 = 0;
     delay(25000); //延时800ms
     GP1 = 1;
     delay(2500);//延时ms
     GP2 =0;
     //while((GP1==1)&&(GP2==0)) //保持
     while(1)
   {
       GP1=1;
       GP2=0;
   }
            
}
   
   void  delay(long i)
   {
      
       while(i)
           i--;
   }
   需注意:

1 delay函数中的i不要设为int型,因为int的最大值为32767,如果你延时很长的话会超过32767的,程序就会出问题;

2 如果开了看门狗(WDT),就要记得喂狗即CLRWDT;我最开始的程序开了WDT,但是并没有CLRWDT。就导致GP2在输出时总是输出方波,跟我要的不一样。

三 问题:

1 为什么这段C代码用MPLAB转成汇编之后最后一行不是:

256  FF      C14     MOVLW 0x14

而是:

256  FF      FFF     XORLW 0xFF

用HI TECH PICC v9.82和XC8编译出来的结果都是这样的。

2 为什么单测这个芯片,在掉电时GP1 GP2 的电平会翻转?上电后在很短时间内就掉电不会翻转,但是上电后过一段时间再掉电,二者的电平就会翻转

四 程序结论:

1 时钟校正参数是必须要写的,否则GP2一直输出方波,GP1一直是高电平;

2 若用C语言来写,则OSCCAL  = 0x00;这句写在程序开头都可以。虽然译成汇编之后最后一行不是Cxx(MOVLW 0x xx),但是从示波器上观察到的结果来看,这样是可行的。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

3718

帖子

2

粉丝