本帖最后由 tzsteel 于 2014-10-30 10:24 编辑
#include"pic12f509.h"
#include<htc.h>
//__CONFIG (0x02);//(WDT_OFF & MCLRE_OFF & OSC_IntRC );
__CONFIG (0x0a);//(WDT_OFF & MCLRE_OFF & OSC_IntRC );
/******************引脚***************/
#define LED1 GP4
#define LED2 GP2
void Delay1000Ms()
{
unsigned int i,j;
for(i=0;i<150;i++)
{
//btn_press(); //按键检测
for(j=0;j<550;j++);
}
}
main()
{
//GPWUF = 0; //清除唤醒标志
OPTION=0x07;
TRIS=0x08;
GPIO=0x08;
//Delay10Ms();
while(1)
{
//LED1 = 0;
//LED2 = 0;
Delay1000Ms();
//LED1=1;
//LED2=1;
LED1=~LED1;
LED2=~LED2;
}
} 以上程序是能实现LED1,LED2大约1秒,输出高电平,再过一秒输出低电平,但如果把LED1=~LED1; LED2=~LED2;换成 LED1 = 0;LED2 = 0;Delay1000Ms();LED1=1;LED2=1;那就会出现LED1,LED2一直为低的情况,不知是啥原因,照理软件里有LED1=1;LED2=1;的,所以LED1,LED2应该会变高电的,但一直是低电,请大虾帮忙看看,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
输出1后又马上输出0 了,当然你看不到了,除非你眼睛能看到几个uS的显示。。
加上延时就可以了。
while(1)
{
LED1 = 0;
LED2 = 0;
Delay1000Ms();
LED1=1;
LED2=1;
Delay1000Ms();
}
谢谢,楼上的,问题已搞定。另外请问一下PIC12F509的定时器,
main()
{
OPTION=0x00;
TRIS=0x08;
TMR0=0x00;
while(1)
{
if(TMR0==0xFF)
{
LED1=~LED1;
LED2=~LED2;
}
}
}
请问一下,TMR0=0X00;是不是定时器的初值等于0?那如果预分频是PS<000>(1:2),内部RC4MHZ,那if(TMR0==0xFF)的运行时间,应该就是1US*2*256US+2US= 514US,但用示波器实测,LED1的波型是2.2ms,总的脉宽3.6ms,相差很大,请问一下,TMR0的初值是咋样计算的?谢谢.比如要生成一个125US的,TMR0要是多少?
0xc8
给你一个工具:http://blog.sina.com.cn/s/blog_64ddebbc0101gq2v.html
谢谢,很不错的软件,但发现 if(TMR0==0xFF)
{
LED1=!LED1;
}
上面的if语句,会增加延时,而且是相差很大.看来PIC12F509的定时器只能用在精度没要求的地方.
一周热门 更多>