搜索
bottom↓
回复: 12

学习码630解码1527,1527遥控两个键,请问程序有什么问题, 编译成功,但 写不进芯片去,偶尔

[复制链接]

出0入0汤圆

发表于 2010-3-5 11:46:08 | 显示全部楼层 |阅读模式
请高手指点: 学习码630解码1527,1527遥控两个键,请问程序有什么问题, 编译成功,但 写不进芯片去  
#include <pic.h>
#include <pic16630.h>   
__CONFIG( WDTDIS  & PWRTEN &INTOSCIO & MCLRDIS);
         
#define uchar unsigned char   
#define uint  unsigned int
   
#define rfin         RA2   //11脚
#define fmq          RC0    //10脚蜂鸣器
#define        laba                RC2  //8脚报警
#define   chufa                RC3  //7 脚传感踩下为低
#define unlock        RC5         //5脚 解锁
#define  ceshi    RC4   //6脚  
#define led                        RC2  //8脚
#define study                   RC1                //9脚学习按钮

uint  l1, m1,n1;
uchar tlow;                                     
uchar thigh;                                  
uchar recnt;  //接收位数24位                          
uchar keygeshu;//键数                                  
uchar tmp1;  //键按下时间变量
uchar tmp2;   //学习按下时间变量
uchar tmp3;  //临时
uchar ks11;  //开锁码1
uchar ks12;
uchar ks13;   
uchar js11;  //加锁码1
uchar js12;
uchar js13;
uchar ma01;  //学习码变量
uchar ma02;
uchar ma03;
uchar ma11;  //上次学习码变量
uchar ma12;
uchar ma13;  
uchar ma21;  //学习码变量
uchar ma22;
uchar ma23;
uchar tmp,tmp0;                    

const  uchar  Cs@0x3ff;

bit   tongbutou; //同步头接收成功标志  
bit   rfok;   
bit   rf_er;//接收失败
bit   signth; //信号高低标志
bit         study1;//是否学习状态标志                 
bit        cdj;        //踩下标志                 
bit          press;//有键按下                                 
bit         anxia;//有键持续按下                                 
bit         xuexi;//学习时间标志                 
                         
bit      diffkey;  //不同的键                          
bit           kaisuo;                         
bit    jiasuo;                                 
                                     
     
/*      
void delay1(void)
{
         for(tmp3=0;tmp3<100;tmp3++)
         {}
}*/

void delay2(n1)
{
        for(l1=0;l1<100;l1++)
            {
                          for(m1=0;m1<n1;m1++)
                                {}
            }
}   


void delay1(void)
{
        asm("nop");
        asm("nop");
        asm("nop");
        asm("nop");

}      
void interrupt ISR (void)
  {   
     
     CLRWDT();

         
     if(T0IF==1)  //time0 100us中断
      {   
              T0IF=0;   
              TMR0=179;  
                  
     if(rfin==1)  
           {     
     
              if(signth==1)//由低到高开始接收   
                          {   
                              if(tlow>thigh)//判断是否低电平   
                                              {   
                                             
                                         if(tlow>5&&tlow<19&&thigh>2&&thigh<9)   
                                                                  {   
                                                                  
                                                                  recnt++;//是低电平   
                                                                  ma01<<=1;//移动一位
                                                                    
                                                                 
                                                                  }   
                                           else   
                                                                  {//接收失败     
                                                                  rf_er=1;   
                                                                  }   
                                         
                                              }      
                     
                              else if(tlow<thigh) //判断是否低高电平
                                                {
                                          if(tlow>2&&tlow<9&&thigh>5&&thigh<19)//
                                                                  {   
                                                                  
                                                                  recnt++;//是高电平     
                                                                  ma01<<=1;//移动一位
     
                                                                  ma01++;   
                                                                 
                                                                 
                                                                  }   
                                          else   
                                                                  {      
                                                                 
                                                                  rf_er=1;   
                                                                  }   
                                             
                                              }   
     
     
                               else if(tlow==thigh)   
                                              {                  
                                             
                                              rf_er=1;           
                                              }   
     
     
                               if(rf_er==1)   
                                      {   
                                      tongbutou=0;//接收失败        
                                      recnt=0;   
                                      rfok=0;   
                                      }   
                               else   
                                      {   
                                      if(recnt==8){ma03=ma01;}   
                                      else if(recnt==16){ma02=ma01;}           
     
                                    
                                      }   
            
                        
                              if(recnt==24)   
                                      {  
                                              tlow=0;
                                              thigh=0;
                                              recnt=0;
                                              tongbutou=0;
                                             if(ma01==ma11 && ma02==ma12 && ma03==ma13)
                                              {
                                                    rfok=1;  //接收成功  
                                                    ma11=0;ma12=0;ma13=0;
                                                   if(ma01!=ma21 || ma02!=ma22 || ma03!=ma23)
                                                       {
                                                            diffkey=1;
                                                            press=1;
                                                            anxia=0;
                                                            tmp2=0;
                                                            ma21=ma01;ma22=ma02;ma23=ma03;
                                                         }
                                                       else
                                                         {
                                                              diffkey=0;
                                                              anxia=1;
                                                              tmp2=0;   
                                                           }        
                                                 }
                                                 else
                                                 {
                                                        ma11=ma01;ma12=ma02;ma13=ma03;
                                                   }
                                       }   
                                       
                              thigh=0;        //signth==1函数                 
                          }   
     
                                                                     
             else   if(tlow>30&&tlow<180)      //判断同步头判断低与if(signth==1)并行
                          {                                                      
                            tongbutou=1;  //检测到正确的同步头                           
                            recnt=0;     //接收位数,清除0                                 
                                                                                                      
                           }   
     
                             thigh++;                                                                                      
                             tlow=0;   
                             signth=0;   
                             rf_er=0;//接收失败标志   
            }
     else   //与if(rfin==1)接收低并行
           {      //输入端口为低电            
              tlow++;           
              if(tongbutou==1)//开始接收标志   
                      {   
                      signth=1;   
                      }   
              else   
                      {   
                  thigh=0;      
                      }   
           }   
        }        
                                                                                 
      
   if(TMR1IF==1)   
         {
                    TMR1IF=0;//清中断标志位
                        TMR1H=0xcf;//初值53035
                        TMR1L=0x2b;
                       
                 if(xuexi)//
                       {
                             ++tmp2;
                             if(tmp2==25)
                             {
                                  tmp2=0;
                                   if(!study)
                                    {
                                        xuexi=0;   
                                        study1=1;  //学习状态标志
                                        led=1;
                                        keygeshu=0;  
                                        ma23=ma22=ma21=0;
                                    }     
                             }  
                       }
                              
              if(anxia)
                   {
                           press=0;
                           ++tmp1;
                           if(tmp1==5)
                            {
                                    tmp1=0;
                                    anxia=0;
                                    press=1;
                              }
                     }
                       
          }              
                                                                                 
  }   
                                          
                                                                                 
                                                                                                
  void main(void)
{

      
        OSCCAL=Cs;   
        PORTC=0x20;
        PORTA=0x00;
        CMCON=0x07;
        TRISA=0x07;
        TRISC=0x0a;
        WPUA=0x04;
        IOCA=0x04;
        OPTION=0x0e;
       
          unlock=0;

        TMR0=179;
        INTCON=0xe0;                //使能timer0;
        T0IE=1;                        //使能timer0;
       
          


   if(eeprom_read(1)!=1)     
                {
                //        delay1();
                        eeprom_write(1,1);
                        delay1();
                        eeprom_write(2,0);             //存开锁码
                        delay1();
                        eeprom_write(3,0);                 
                      delay1();
                        eeprom_write(4,0);                 
                       delay1();
                        eeprom_write(5,0);                //存加锁码
                       delay1();
                        eeprom_write(6,0);                  
                       delay1();
                        eeprom_write(7,0);delay1();                 
                }
                                  
        ks11=eeprom_read(2);
        //delay1();               
        ks12=eeprom_read(3);
        //delay1();
      ks13=eeprom_read(4);
        //delay1();
       
        js11=eeprom_read(5);
        //delay1();
        js12=eeprom_read(6);
        //delay1();
        js13=eeprom_read(7);
                delay1();
        
if(eeprom_read(6)!=0) {ceshi=1;}
       
        TMR1H=0xcf;
        TMR1L=0x2b;                                //time1 0.025s*8预分频定时
        T1CON=0x30;                                //关闭Timer1 设置1:8预分频
        PIE1=0x01;                                //使能time1定时中断
        TMR1IF=0;

        TMR1ON=1;                                        //启动timer1

  
   while(1)
   {       
        if(rfok)
          {
                rfok=0;
                if(!study1)
                  {
                          if(press)
                         {
                                if(ks11==ma01 &&  ks12==ma02 && ks13==ma03)
                               {
                                     unlock=1;
                                     kaisuo=1;
                                     jiasuo=0;
                                     fmq=1; delay2(100); fmq=0; delay2(100);
                                         fmq=1; delay2(100); fmq=0; delay2(100);
                                 }
                                else if(js11==ma01 && js12==ma02 && js13==ma03)
                                 {
                                     unlock=0;
                                     kaisuo=0;
                                     jiasuo=1;
                                     fmq=1; delay2(100); delay2(100); delay2(100);
                                     fmq=0;
                                 }          
                       }
                }
               else
               {
                       if (diffkey)
                       {
                                ++keygeshu;
                           if(keygeshu==1)
                               {
                           
                         eeprom_write(2,ma01);             //存开锁码
                        delay1();
                        eeprom_write(3,ma02);                 
                      delay1();  
                        eeprom_write(4,ma03);          
                      delay1();   
                                   //save();
                                }         
                    else if(keygeshu==2)
                                {
              eeprom_write(5,ma01);             //存加锁码
                          delay1();
                        eeprom_write(6,ma02);                 
                      delay1();
                        eeprom_write(7,ma03);                 
                      delay1();   
                           
         // save1();
                      keygeshu=0;
                      led=0;
                      study1=0;     
                                 }  
                       
                      //ceshi=1;
                      //anxia=1;
                      //press=1;   
                         }
                 }
      }   

    if(!study)//学习
        {
                if(!study1 && !xuexi)
                {
                        xuexi=1;
                        tmp2=0;
                  }
          }
   else
          {
                  xuexi=0;
                  tmp2=0;
                  led=0;
                  study1=0;
                  keygeshu=0;  
          }  

  }
          
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2010-3-5 11:50:19 | 显示全部楼层
用MPLAB8.0版本编译成功 ,偶尔一次能够写进芯片,偶尔又不行。请指点

出0入0汤圆

发表于 2010-3-7 22:06:24 | 显示全部楼层
可能是遇到双内部的问题,ICD2是不行的。

出0入0汤圆

发表于 2010-3-8 02:35:13 | 显示全部楼层
把复位脚挑出,一直加着12V,这样可以应急

出0入0汤圆

 楼主| 发表于 2010-3-8 09:25:21 | 显示全部楼层
编译都能够成功,在什么都没改变的情况下,有时编译后能够写进芯片,有时编译后又写不进去,不知道什么原因?能够写进芯片的程序都能够正常工作。

出0入0汤圆

发表于 2010-3-10 08:21:57 | 显示全部楼层
烧写器的问题。一般是烧内部振荡+内部复位导致的。ICD2烧不稳定。

出0入0汤圆

发表于 2010-3-10 08:34:56 | 显示全部楼层
你可以考虑换一下PICKIT3试试。方便的话你可以给我发个E-MAIL,我们细谈。

出0入0汤圆

 楼主| 发表于 2010-3-11 10:34:46 | 显示全部楼层
回复【6楼】你好 你的 E-MAIL是?

出0入0汤圆

发表于 2010-3-22 20:23:57 | 显示全部楼层
现在搞定了吧,BBS没太关注,资料信息里面有的。

出0入0汤圆

发表于 2016-11-29 21:59:02 | 显示全部楼层
mak3......

出0入0汤圆

发表于 2016-11-30 09:12:02 | 显示全部楼层
  都没容错功能,实际上很多干扰,你这个信号差点就解码不出,

出0入0汤圆

发表于 2017-2-10 15:01:41 | 显示全部楼层
MARK...................

出0入4汤圆

发表于 2017-2-10 15:13:44 | 显示全部楼层
这种毫无意义的挖坟贴,莫大处理不处理呀?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 22:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表