- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
KEIL C51 使用结构,变量与位变量对比
KEIL C51 使用结构,变量与位变量对比
测试环境:
优化等级:8
程序说明:程序中含其它代码,只对比添加部分。
变量在Isr.c文件中定义,在Isr.h文件声明为全局变量,在Main.c文件主循环中调用。
1.使用结构
typedef struct _IsrFlagType
{
BYTE Flag0:1;
BYTE Flag1:1;
BYTE Flag2:1;
BYTE Flag3:1;
BYTE Flag4:1;
BYTE Flag5:1;
BYTE Flag6:1;
BYTE Flag7:1;
} IsrFlagType;
extern IsrFlagType g_ucFlag;
#define GET_Flag0() (g_ucFlag.Flag0)
#define SET_Flag0() (g_ucFlag.Flag0=1)
#define CLR_Flag0() (g_ucFlag.Flag0=0)
//8个标志都使用的编译结果
Program Size: data=142.1 xdata=48 code=12291
85: if(GET_Flag0())
C:0x23FB E54B MOV A,g_ucFlag(0x4B)
C:0x23FD 30E006 JNB 0xE0.0,C:2406
86: CLR_Flag0();
87: else
C:0x2400 54FE ANL A,#0xFE
C:0x2402 F54B MOV g_ucFlag(0x4B),A
C:0x2404 8006 SJMP C:240C
88: SET_Flag0();
89:
C:0x2406 E54B MOV A,g_ucFlag(0x4B)
C:0x2408 4401 ORL A,#0x01
C:0x240A F54B MOV g_ucFlag(0x4B),A
90: if(GET_Flag1())
C:0x240C AF4B MOV R7,g_ucFlag(0x4B)
C:0x240E EF MOV A,R7
分区temp 的第1 页
C:0x240E EF MOV A,R7
C:0x240F C3 CLR C
C:0x2410 13 RRC A
C:0x2411 30E007 JNB 0xE0.0,C:241B
91: CLR_Flag1();
92: else
C:0x2414 EF MOV A,R7
C:0x2415 54FD ANL A,#0xFD
C:0x2417 F54B MOV g_ucFlag(0x4B),A
C:0x2419 8006 SJMP C:2421
93: SET_Flag1();
94:
C:0x241B E54B MOV A,g_ucFlag(0x4B)
C:0x241D 4402 ORL A,#0x02
C:0x
文档评论(0)