winnie 发表于 2009-4-25 16:14:18

PIC16F877A的问题

PIC16F877A的PIR1为什么C编译了在第一页面?
c语言中是这样定义的:
#include   <pic.h>
#include <pic168xa.h>
#include <stdio.h>

voidinter_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:26

产生应该代码是这样的:

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
页: [1]
查看完整版本: PIC16F877A的问题