英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: PIC16F877A的问题 [打印本页]

作者: winnie    时间: 2009-4-25 16:14
标题: PIC16F877A的问题
PIC16F877A的PIR1为什么C编译了在第一页面?
c语言中是这样定义的:
#include   <pic.h>
#include <pic168xa.h>
#include <stdio.h>


void  inter_init()
{  PIE1|=0X01 ;
  PEIE=0X01 ;  
  PIR1=0X00 ;
  TMR1L=0Xd0 ;
  TMR1H=0Xff ;
  TMR1ON=0X01 ;  //工作在定时器方式//
  GIE=0X01 ;    //打开总中断//

}

产生的代码是这样的:
inter_int   BSF           STATUS,0X5
               BCF            STATUS,0X6
              BSF             PIR1,0
              BSF           INTCON,0X6
             BCF            STATUS,0X5
             CLRF           PIR1
             MOVLW         0XD0
           MOVWF         TMR1L
             MOVLW             OXFF
           MOVWF          TMR1H
                BSF           T1CON,0
               BSF          INTCON,0X7
                RETURN
作者: winnie    时间: 2009-4-25 16:14
产生应该代码是这样的:

inter_int   BSF           STATUS,0X5

               BCF            STATUS,0X6

              BSF             0X0C,0      这一条指令的0x0c 并不是PIR1 而PIE1的地址(0x8c),是执行PIE1|=0X01 ;
                                                     因为它现在在BANK1

              BSF           INTCON,0X6

             BCF            STATUS,0X5

             CLRF           0X0C   这一条指令才是执行PIR1=0

             MOVLW         0XD0

           MOVWF         TMR1L

             MOVLW             OXFF

           MOVWF          TMR1H

                BSF           T1CON,0

               BSF          INTCON,0X7

                RETURN




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://www.enroobbs.com/) Powered by Discuz! X3.2