打印

用C写了一个按键闪灯程序,编译以后,16个RAM

[复制链接]
2237|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hxdjb|  楼主 | 2008-12-2 16:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
差不多用完了,我只定义了一个全局变量,我把一个延时函数里的局部变量减少一个以后,看到RAM空间空出了一个。如果用汇编的话16个RAM足够用了。哪位能说一下,单片机C编程中RAM是如何使用的?是不是那些的H文件里的特殊功能寄存器用了也用了占有了RAM。

相关帖子

沙发
hxdjb|  楼主 | 2008-12-2 16:46 | 只看该作者

芯片是EM78P153,资料上介绍的如下:

00-0F特殊功能寄存器,10-2F是普通RAM,但是如果用C只能用20-2F段的16个
。我总共用了3个局部变量,和一个全局变量。如果再增加一个变量,编译器提示RAM空间不够。

使用特权

评论回复
板凳
jt4117| | 2008-12-2 17:07 | 只看该作者

啥芯片啊,穷成这样!!

就这么点ram你还用C写?

使用特权

评论回复
地板
ayb_ice| | 2008-12-2 21:16 | 只看该作者

可能你的函数较复杂

必须要一些中间变量才能完成编译

使用特权

评论回复
5
walnutcy| | 2008-12-2 22:39 | 只看该作者

都穷得没内裤穿了,还想吃西餐

汇编吧

使用特权

评论回复
6
hxdjb|  楼主 | 2008-12-3 10:13 | 只看该作者

还请说一下:单片机C编程中RAM是如何使用的?

使用特权

评论回复
7
hxdjb|  楼主 | 2008-12-3 10:21 | 只看该作者

一段简单C程序,错在哪里?

uchar key(uchar count)           //按键判断程序
{  
   if(option==0)  //
       {
        delayms(); //延时,软件去干扰
        if(option==0)   //确认按键按下
               {
                   count++;     //按键计数加1
                   if(count==5) //计5次重新计数
                   {
                   count=1;    //将count1置
                   }
               }
       }
    return(count);
 }
///////////////////////
 flash(void)         
   {
     uchar a,b;
     a=key(b);     
     switch(a)
        {
          case 1: 
               led1=!led1;
               delayms();
               break;
          case 2:
               led2=!led2;
               delayms();
               break;
          case 3:             
               led3=!led3;
               delayms();
               break;
          case 4:         
               led4=!led4;
               delayms();
               break;
          default:
               break;
         }   
   }

使用特权

评论回复
8
李冬发| | 2008-12-3 10:38 | 只看该作者

什么CPU,用了几个RAM,还剩几个RAM,都是没头没脑的

使用特权

评论回复
9
WOAILYMD| | 2008-12-3 17:26 | 只看该作者

这样处理抖动太小儿科了

delayms(); //延时,软件去干扰

看看论坛里面大侠们处理方法改进下吧!

使用特权

评论回复
10
谈的元| | 2008-12-3 17:32 | 只看该作者

153也C,我510都汇编

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

236

帖子

2

粉丝