4421|9

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

AT89S52能运行AT89C2051就运行不了,高手进来帮忙看看,小弟不胜感激! [复制链接]

#include    
#define data00 P1   
#define uchar unsigned char
uchar recddata=0x00,datastore[6]={0x20,0x20,0x20,0x20,0x20,0x20},i=1,j=0;  //i为datastore数据包变量,j为待发送到8952的当前位置,recddata为接收串口的变量
bit datacom=1,C3en=0,C2en=0,C8en=0,reccent=0;  //datacom 为0表示下一个为数据,1表示下一个为信令 ,分别有C3,C2,C8三种信令,先收信令,再打开相应的位置存储下一个数据 :reccent为接收到C3 06标志位

void sint4()
{                                                       
    if(RI)
        {
                recddata=SBUF;
                //P1^0=~P1^0;
                if(recddata!=0xA5)
                {
                        if(datacom==1)                                                                           //信令识别
                        {
                                switch(recddata)
                                {
                                        case 0xC2: C2en=1; break;
                                        case 0xC3: C3en=1; break;
                                        case 0xC8: C8en=1; break;
                                        default:  break;
                                }                                          
                                datacom=0;  //关闭信令,准备接收数据
                        }
                        else
                        {                                                                                                   //信令识别
                        if(C3en==1)
                        {
                                switch(recddata)
                                {
                                        case 0x06: datastore[0]=0x06;reccent=1;i=1; break; //有进话(可能是拨号也可能是广播)
                                        case 0x32: datastore[5]=0x32; break;                  //电话拨进来
                                        case 0x33: datastore[0]=0x00; reccent=0; break;          //已接通,字幕机收到后停止显示
                                        case 0x3A: datastore[5]=0x3A; break;                  //有广播
                                        default: break;
                                }
                                C3en=0;       
                        }
                        if(C2en==1 && reccent==1)        //来电号码存放
                        {
                                datastore=recddata;
                                i++;
                                C2en=0;   //关闭数据接收,换做接收信令
                                        
                        }                                                    //来电号码存放
                       
                        if(C8en==1 && reccent==1) {if(recddata==0x1A) datastore[0]=0x00; C8en=0; reccent=0;}        //拨打方已挂断或超时自动挂断
                       
                        datacom=1; //关闭数据接收,换做接收信令
                        }
                }
                RI=0;
        }
}
void int4()interrupt 4         //串口中断       
{
        sint4();
}

void int0ans()//中断0响应程序,发送数据到8952
{               
        data00=datastore[j];
        j++;
        if(j==5) j=0;
}

void int0()interrupt 0   
{
    int0ans();
}

void main(void)                                    //主程序
{
  data00=0xff;  
  TMOD=0x20; SCON=0x40;          //串口模试设为1 起始接收各1位加8位数据
  TH1=0xfe; TL1=0xfe;      //6.142M晶振波特率为8000
  EA=1;  //打开中断总开关
  ES=1;  //打开串口中断
  PS=1;        //串口优先级设为1
  IT0=0;   
  EX0=1; //打开外部中断0
  RI=0;  //串口接收中断初始化
  TR1=1;
  REN=1;
  while(1)
  {
          //P3_7=~P3_7;
        //data00=~data00;  
  }
}   




代码全在上面,有知道哪里有问题的请帮忙指点下,先谢谢各位!      

最新回复

问题已解决,换成AT89C4051 OK,谢谢Peasant_Lee的精彩回复  详情 回复 发表于 2010-5-28 20:54
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
AT89C2051,你是用编程器下载代码的吗?这两款单片机,C2051是要编程器下载code的。还有它们的硬件资源事有差别,rom 和ram,还有其他的外设,2051都小一点。首先看看hex代码超过了2051的空间没有,然后看看栈是否溢出了。其实从你的现象可以判断出问题。不知道你什么现象?
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
现象是我不算把串口还有外部中断0都关掉,只运行
while(1)
  {
  P3_7=~P3_7;
  }
这一段都没反应,电源还有RST信号开机都是有的
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
你是用什么下载2051的代码到mcu的?
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 enble_oy 的回复:
现象是我不算把串口还有外部中断0都关掉,只运行
while(1)
  {
  P3_7=~P3_7;
  }
这一段都没反应,电源还有RST信号开机都是有的


你用这样的方式来测试单片机是否工作,欠妥,因为51的口,作为输入输出时,是要设置的,输入时候要先输出0xff,但是,你这句话就使用了两种功能,输入,输出都有,之前就没有先输出0xff。你可以就输出高低来测试就可以了。不用翻转。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
RF-1800编程器,显示是烧程成功
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 peasant_lee 的回复:

你是用什么下载2051的代码到mcu的?

明天找个能用的程序试试看硬件有没有问题

郁闷了一下午
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
不知道有没有仿真器?假如有,那么问题变得简单很多。初步怀疑是ram空间溢出了。。。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
楼主这个是实现什么功能呢,学习一下,谢谢了
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
问题已解决,换成AT89C4051 OK,谢谢Peasant_Lee的精彩回复
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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