PIC单片机的位(逻辑)取反无效果,很是疑问~~~

2019-07-15 21:30发布

本帖最后由 robin_chen559 于 2013-11-29 16:19 编辑

用51(STC)单片机的时候端口定义LED ,!LED即可改变LED的状态,现在练习PIC12Lf1822好像不好用。
定时后中断:
  if(A==1)
         {
           LED_G = 0;
           A = 0;
         }
       else
         {
           LED_G = 1;
           A = 1;
         }

好使,但是LED_G = !LED_G;或LED_G = ~LED_G都没反应,为啥呢?
库文件没有这个运算符么?
源程序:
#include<pic.h>

#define LED_G RA0

unsigned char TMR1_NUM = 0;

bit A;


//子程序说明
void Init_Star(void);                      //开机初始化
void Init_TMR1(void);                      //定时器1初始化

//子程序

void Init_Star(void)                       //开机初始化
{
  OSCCON = 0b01101010;                     //内部4M系统时钟
  TRISA0 = 0;                              //RA0输出

  A = 1;
  LED_G = 1;
}

void Init_TMR1(void)                       //定时器1初始化
{

TMR1H  = 0x3c;                            //(65536-50000)/256
TMR1L  = 0xaf;                            //(65536-50000)%256

TMR1IE = 1;
INTCON = 0b11000000;                      //GIE、PEIE置1,中断设置
T1CON  = 0b00010101;                      //TMR1内部1:2预分频,100mS计数

}

void interrupt ISR(void)                   //中断服务子程序
{
if(TMR1IF == 1)
   {
    TMR1IF = 0;
    TMR1H  =  0x3c;                        //重装定时器1初值
    TMR1L  =  0xaf;

    TMR1_NUM++;

    if(TMR1_NUM >=5)
      {
       TMR1_NUM = 0;
    //  LED_G = !LED_G;

    /****** *****/
       if(A==1)
         {
           LED_G = 0;
           A = 0;
         }
       else
         {
           LED_G = 1;
           A = 1;
         }

      }



   }
}

void main(void)                           //主程序
{
Init_Star();                             //开机初始化
Init_TMR1();                             //定时器TMR1初始化
while(1);

}


/*****************************************************/
附件 :protues 7.10
          mplab8.70         

备注:由于MPLAB是设置配置字,仿真的时候PIC12LF1822的属性里边配置字要跟MPLAB的一样才行,不然仿真出来的周期不一样


MPLAB配置字 MPLAB配置字
PROTEUS配置字 PROTEUS配置字
TMR1_TEST.rar 下载积分: 积分 -1 分
98.15 KB, 下载次数: 5, 下载积分: 积分 -1 分 源文件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。