C51知识点拾遗

1.不能直接给P0^0赋值,如P0^0=1;

要先sbit LED = P0^0;
然后 LED = !LED;

解释:P1^0”只是个常数,表示寄存器P0的0位的位地址值。而
sbit led = P1^0;
真正地定义了一个位变量。有了变量才能对此赋值。


2.关于51单片机里的data与code
 data与code是指数据的存储类型,即存储在数据段还是程序段内,常用的就是data与code。
下面是我在12864多层菜单滚动显示时遇到的问题。
//菜单参数
 typedef struct _MENU_PRMT
 {
  uchar ExitMark;   //推出菜单(0-不推出,1-退出)
uchar Cursor;     //光标值(当前光标位置)
uchar PageNo;     //菜单页(显示开始项)
uchar Index;      //菜单索引(当前选择的菜单项)
uchar DispNum;    //显示项数(每页可以显示的菜单项)
uchar MaxPage;    //最大页数(最大有多少种显示页)  
 } MENU_PRMT;

//菜单执行
 typedef struct _MENU_TABLE
 {
  uchar *MenuName;   //菜单项目名称
void (*ItemHook)(void);  //菜单函数
 }MENU_TABLE;
 /*************************************************************************/
 MENU_PRMT *pPrmt;                                     <<=指向data段的指针
 MENU_TABLE code *pTable;                        <<=指向code的指针
//----------------------------------   主菜单   ---------------------------------------
MENU_PRMT  GSetPrmt;                                 <<=默认定义在data段 
MENU_TABLE code GeneralSet[] =               <<=定义在code段         
{    
{" -= 常规设置 =- ", Menu_Null        },
{"1.转向设定    ", Menu_RotDirecSet},           
  {"2.速度设定      ", Menu_SpeedSet    },               
    {"3.启动时间设定  ", Menu_Null        },                
    {"4.停止时间设定  ", Menu_Null        },                
};

pPrmt = &GSetPrmt;          <<=指针的赋值是一样的,别忘记变量前面的&
pTable = &GeneralSet;

下面是从网上粘来相关知识:

c51中的存储类型

code :程序存储区(64KB),

data :可直接寻址的内部数据存储区(128B)

idata:不可直接寻址的内部数据存储区(256B)

bdata:可位寻址内部数据存储区(16B)

xdata:外部数据存储区(64KB)

pdata:分页的外部数据存储区


code 是在 0000H .. 0FFFFH 之间的一个代码地址。
我用
ORG     5000H
TAB:    DB      22H,3BH,43H,66H,5H,6DH,88H后,
CODE从5000H开始以后变成DB各位

data
是 在 0 到 127 之间的一个数据存储器地址,或者加 128 .. 255 范围内的一个特殊功能寄存器(SFR)地址。

bit
是在内部数据存储空间中 20H .. 2FH 区域中一个位的地址,

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值