| 
 
| 本帖最后由 解博 于 2014-12-13 11:10 编辑 
 我的单片机型号是PIC12F629,我写的LED1 LED2闪烁程序,怎么好像定时器没有工作呀。
 
 #include "pic.h"
 
 
 __CONFIG(0x3194);//INTOSC震荡4MHZ, GP4,GP5 IO输入/出
 
 //符号变量替换
 #define  u8           unsigned char
 #define  u16          unsigned int
 #define  u32    unsigned long int
 
 #define  LED1          GP1//指示灯1  红灯
 #define  LED2          GP2//指示灯2  黄灯
 #define  RST         GP0//复位按键
 #define  KEY1        GP4//按键1
 #define  KEY2   GP5//按键2
 
 #define  WEEPROMT 200//30000  //记录时间间隔 默认5 = 30000/6000 分钟,减小一下这个值就可以加快速度
 
 #define  Month6          6//51840         // 6个月=51840*5分钟;
 #define  Month8          8//69120         // 8个月=619200*5分钟;
 #define  Month10  10//86400  // 10个月=86400*5分钟;
 #define  Month12  12//103680 // 12个月=103680*5分钟;
 
 u16 Timer1IntCount = 0;        //定时器1中断计数
 u8  SetTime = 0;                //设定指示时间
 u32 RunTime = 0;                //运行时间
 u8  RunTimeL8 = 0;                //运行时间低8位
 u8  RunTimeM8 = 0;                //运行时间中8位
 u8  RunTimeH8 = 0;                //运行时间高8位
 
 void InitIO(void)
 {
 CMCON        = 0X07;//比较器关闭
 TRISIO        = 0x39;//GP0,GP3,GP4,GP5口设为输入;GP1,GP2设为输出
 GPIO        = 0x3f;//初始化所有IO为1
 }
 
 void InitTimer1(void)//10ms定时,定时时间S=(65536-(TMR1H:TMR1L))*4/FOSC(4MHZ);
 {
 TMR1H = 0xd8;//
 TMR1L = 0xf0;
 
 TMR1IF        = 0;     //清中断标志位
 TMR1IE         = 1;     //中断允许位
 PEIE         = 1;     //开启外设中断
 GIE                = 1;         //开全局中断
 
 T1CON = 0x01;//16位计数器,不分频FOSC(4MHZ)/4,启动定时器1
 }
 
 
 
 
 void Delay(void)
 {
 u8 i;
 for(i = 0;i < 200;i ++);
 }
 
 
 void interrupt ISR(void) //中断服务程序
 {
 if(TMR1IF)//10ms
 {
 TMR1IF = 0;
 TMR1H = 0xd8;//重装初始值
 TMR1L = 0xf0;
 Timer1IntCount ++;
 }
 }
 
 void ReadSet(void)//读设置
 {                                                                                                                //NO1  NO2
 if(KEY1 == 1 && KEY2 == 1)                        SetTime = 6;        //OFF  OFF
 else if(KEY1 == 0 && KEY2 == 1)                SetTime = 8;        //ON   OFF
 else if(KEY1 == 1 && KEY2 == 0)                SetTime = 10;        //OFF  ON
 else if(KEY1 == 0 && KEY2 == 0)                SetTime = 12;        //ON   ON
 if(RST == 0)//按下复位键清零计数
 {
 
 
 }
 
 }
 
 
 void main(void)
 {
 InitIO();//初始化IO
 InitTimer1();//初始化定时器1
 
 
 
 while(1)
 {
 if(Timer1IntCount<300)//300*10ms=3S
 {
 LED1=1;
 LED2=1;
 }
 
 if((Timer1IntCount>300)&&(Timer1IntCount<600))
 {
 LED1=0;
 LED2=0;
 }
 
 if(Timer1IntCount>600)
 {
 Timer1IntCount=0;
 }
 
 }
 
 }
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |