定时器1点个灯也这么难?
时间:10-02
整理:3721RD
点击:
最近碰到一个有趣的问题,想用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在中断里也是能正常的闪烁,真是奇了怪了,管脚的配置都没有问题,就是不能亮~
希望大神来解释一下这种现象。
__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在中断里也是能正常的闪烁,真是奇了怪了,管脚的配置都没有问题,就是不能亮~
希望大神来解释一下这种现象。
不太懂,学习下,等楼下答案!
除了LED2赋值了,LED1没有赋值,其他也看不出什么问题来,等楼下
默认赋值0,翻转还是可以
可以试下加点延迟以后再赋值
几个月过去了,不知道小编 解决了,找到问题了吗
并没有,后来就没继续追下去了,可能跟使用的板子有关,毕竟用的是自己焊的电路板~
除了LED2赋值了,LED1没有赋值,其他也看不出什么问题来,
谢谢,小编提供的场地。
MICROCHIP 原装正品,另有可替换单片机(无需修改PCB资料,程序可共用PIC的) 有用到的兄弟多多支持! 电话13430885511(微信同号),QQ2355910801