3236|3

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:pic16f1828为什么高频接收头码会出错? [复制链接]

高手请指教,这段程序我在其他型号芯片用过,ok的!用pic16f1828在proteus仿真也是没问题的,但是到了实际板子上就出错了,头码要么完全匹配上(不管怎么定义头码),要么就匹配不上。小弟是想自己玩玩高频接收发送,下面有相应的部分原理图及代码。有懂的请指教,谢谢!


#include
#define uint unsigned int
#define uchar unsigned char
__CONFIG(0x0612);

#define _XTAL_FREQ 4000000UL
uint temp[]={0x00,0x00,0x00,0x00};
uint date_buffer[4];
uint k=0,i,id;
uint j=0,t=0,flag=0;
#define        EepromAdd                           0x00                                 //各个页的其始地址定义
void init()
{
        asm("CLRWDT");
        OPTION_REG=0x0F;
        ANSELA=0x00;
        TRISA=0x2f;
        PORTA=0x28;
        WPUA=0XFF;
        ANSELB=0x10;
        ANSELC=0x00;
        TRISC=0x00;
        PORTC=0b00010000;
        IOCAP=0x00;
        IOCAN=0x00;
        CM1CON0=0x00;
        CM2CON0=0x00;       
}       
void delay_ms(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=108;b>0;b--);
}       
               
void main()
{
        init();
        while(1)
        {
                asm("CLRWDT");
                if(RA2==1)
                {
                        __delay_us(500);                //为了接受发码中间时刻的高低信号
                        while(j<20)        //20ms的同步头判断
                        {
                                j++;
                                if(RA2==0)
                                        break;
                               
                                __delay_ms(1);       
                        }
                        RA2=0;
                        if(j!=20)
                        {
                                j=0;
                        }       
                        else if(j==20)
                        {
                                //RC0=1;
                                while(t<20)
                                {
                                        if(RA2==1)
                                                break;
                                        t++;
                                        __delay_ms(1);
                                }
                                __delay_ms(1);
                                if(t!=20)
                                {
                                        j=0;
                                        t=0;
                                }
                                else if(t==20)
                                {
                                        RC0=1;
                                        j=0;
                                        t=0;
                                        asm("CLRWDT");
                                        RC0=0;
                                        for(k=0;k<4;k++)
                                        {
                                                //RC6=1;
                                                for(i=0;i<8;i++)
                                                {
                                                        temp[k]+=RA2<                                                         __delay_ms(2);
                                                }
                                                EEPROM_WRITE(EepromAdd+k,temp[k]);
                                        }
                                        //RC6=0;
                                        for(id=0;id<4;id++)                //读出写入EEPROM的数据,此时是为了仿真检测数据是否正确
                                        {
                                                date_buffer[id]=eeprom_read(EepromAdd+id);
                                        }
                                        if(temp[0]==0x44&&temp[1]==0x33&&temp[2]==0x77&&temp[3]==0xdd)
                                        {
                                                //asm("CLRWDT");
                                                //RC0=1;
                                                flag++;
                                                __delay_ms(200);               
                                                RC0=0;
                                                if(flag==1)
                                                {
                                                        for(id=0;id<4;id++)       
                                                        {
                                                        //        EEPROM_WRITE(EepromAdd+k,temp[k]);
                                                        }
                                                }       
                                        }
                                        for(k=0;k<4;k++)
                                        {
                                                temp[k]=0;
                                        }
                                }
                                j=0;
                                t=0;
                        }       
                }
        }
}               

最新回复

首先我要跟你说的是,论坛有一个功能叫插入代码,希望你以后发代码类文件的时候使用该功能。 [attach]143923[/attach] 其次我看了下你的代码,我建议你能不能把写eeprom和读eeprom先注解掉看结果,因为操作eeprom费时,我前两天有个东西就是因为操作eeprom导致通信出错。   详情 回复 发表于 2014-3-12 08:24
点赞 关注
 

回复
举报

1632

帖子

4

TA的资源

纯净的硅(高级)

沙发
 
首先我要跟你说的是,论坛有一个功能叫插入代码,希望你以后发代码类文件的时候使用该功能。



其次我看了下你的代码,我建议你能不能把写eeprom和读eeprom先注解掉看结果,因为操作eeprom费时,我前两天有个东西就是因为操作eeprom导致通信出错。

点评

谢谢,我试试,第一次在这上面发帖,还不熟,请见谅。  详情 回复 发表于 2014-3-13 09:11
 
个人签名科技改变生活
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
眼大5子 发表于 2014-3-12 08:24
首先我要跟你说的是,论坛有一个功能叫插入代码,希望你以后发代码类文件的时候使用该功能。



谢谢,我试试,第一次在这上面发帖,还不熟,请见谅。

点评

依旧不行,我觉得可能是芯片问题吧,我把这代码,改成用pic16f687的就能正确接受,找不到原因,所以我只能换芯片了,谢谢指点  详情 回复 发表于 2014-3-13 10:52
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
37度瞳眸 发表于 2014-3-13 09:11
谢谢,我试试,第一次在这上面发帖,还不熟,请见谅。

依旧不行,我觉得可能是芯片问题吧,我把这代码,改成用pic16f687的就能正确接受,找不到原因,所以我只能换芯片了,谢谢指点
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表