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

定时器1点个灯也这么难?

[复制链接]
1164|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
     最近碰到一个有趣的问题,想用PIC16F1828的定时器1来简单的记个时,到时间后让一个小灯翻转亮起来,现在问题就出现在这个小灯上~#include<pic.h>
__CONFIG(0x0182);
__CONFIG(0x38ff);
#define uint  unsigned int
#define uchar unsigned char
#define LED1 RC0
#define LED2 RC5
#define LED_TRI TRISC=0x00

void interrupt tmer1(void);

char data1,data0,data2;

void main()
{
  LED_TRI;    //设灯的管脚为输出模式
  GIE=1;    //开总中断
  PEIE=1;   //开外部中断

  TMR1IE=1;   //开定时器1中断
  TMR1GIE=0;   //关定时器1门控中断
  TMR1IF=0;     //清除定时器1标志位
  TMR1GIF=0;
  TMR1H=0x3C;
  TMR1L=0xAF;
  T1CON=0x01;   //开定时器1
  T1GCON=0x00;

  data1=0;
  LED2=1;

  while(1);
}

void interrupt tmer1(void)
{
   if(TMR1IF==1)
    {
       TMR1IF=0;
       TMR1H=0x3C;
       TMR1L=0xAF;
       data1++;

       if(data1==0x28)
       {
         data1=0;
         data2++;
         LED1=!LED1;
         LED2=!LED2;
       }
    }
}


      现在的现象是到时间后,LED2能正常的翻转闪烁,但是LED1却不能,感觉就是执行到那里后,直接跳过去了。LED1单独测试时没有问题的,如果把LED2放到while(1)里面翻转闪烁,LED1在中断里也是能正常的闪烁,真是奇了怪了,管脚的配置都没有问题,就是不能亮~
      希望大神来解释一下这种现象。
沙发
wei565831866| | 2016-6-20 15:29 | 只看该作者
看看看看看看看看看看看看看看看看看看

使用特权

评论回复
板凳
GeekyGeek| | 2016-6-21 12:35 | 只看该作者
         LED1=!LED1;  ==》 RC0 = !RC0
         LED2=!LED2;  ==》 RC5 =  ! RC5

检查下这两条语句的汇编是怎样的,可能冲突了

使用特权

评论回复
地板
LexLu| | 2016-6-22 09:24 | 只看该作者
将     LED1=!LED1;   LED2=!LED2; 改成 LATC ^= 0x21; 试试看?或者 LED1=!LED1;   NOP(); LED2=!LED2; 两句中嵌入NOP();

使用特权

评论回复
5
追梦的阿土哥|  楼主 | 2016-6-24 11:27 | 只看该作者
LexLu 发表于 2016-6-22 09:24
将     LED1=!LED1;   LED2=!LED2; 改成 LATC ^= 0x21; 试试看?或者 LED1=!LED1;   NOP(); LED2=!LED2; 两 ...

改成LATC^=0x21后确实可以正常翻转闪烁,这是什么原因呢?
还有就是将ANSELC=0x00,也是可以实现的,这两者有什么联系吗?

使用特权

评论回复
6
LexLu| | 2016-6-29 13:19 | 只看该作者
追梦的阿土哥 发表于 2016-6-24 11:27
改成LATC^=0x21后确实可以正常翻转闪烁,这是什么原因呢?
还有就是将ANSELC=0x00,也是可以实现的,这两 ...

1828的端口有数据锁存器,因此做输出端口时,建议将数据写入数据锁存器实现输出,因为端口寄存器内的值会受端口引脚电平的影响。RC0和RC5使用同一组端口寄存器,因此会存在读-修改-写的问题,连续两条指令对同一个端口寄存器进行操作,会引起这样的问题。MCHP单片机的端口存在模拟和数字功能复用的情况,缺省状态为模拟输入,在实际使用中应做好初始化设定。

使用特权

评论回复
7
michaellengleng| | 2016-6-29 15:46 | 只看该作者
路过 LATC^=0x21

使用特权

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

本版积分规则

10

主题

38

帖子

2

粉丝