- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C51编程中的自义“位”
资料来源 电子下载网 下载时间 2010-7-5 18:09:30
本文地址 http://3u .com/dpj/51/1/489.html
C51 编程中的自定义“位”
摘要: 以例举的方式,阐述单片机C语言编程中有关标志位的自定义以及对于
其当前状态的保存问题。从标志位的理念着手,探讨在单片机C语言编程中自
定义标志位的必要性、自定义标志位保存的必要性,以及自定义标志位保存的
几种具体的操作方法。
关键词: 单片机; C语言; 自定义; 位; 变量; 保存
中图分类号: TM3文献标识码: B
Customizing “Bit” and Its Saving Method in C51 Programming
Zhang Chunfeng
(Ningbo Tianan (Group) Co., Ltd. , Ningbo 315700, China)
Abstract: The customization and saving of the flag bit in C
programming for microcontrollers are described. Necessities for
customizing flag bit and saving of the customized bit are discussed,
and several ways for saving customized flag bit in C language are
provided.
Key words: microcontroller; C language; customization; bit;
variable; save
引言
在现有的教课书及相关文章中,都难得提到在单片机C语言编程中对于自
定义“位”的状态进行保存的理念。
当单片机C语言编程中提及“位”的概念时,人们自然会想到状态字PSW
中PSW.5的F0与PSW.1的F1两个用户通用标志位。这两个标志位均可参与布
尔运算、“位”控操作,也可随状态字PSW一起保存。但是,往往会忽视这一
点:在一些特定的情况下,如在C语言编程的中断服务程序中,对状态字PSW
中PSW.5的F0与PSW.1的F1这两个用户标志位的操作可能是无效的。如:
void EX1_ISR() interrupt 2 {//外部中断1
static unsigned int tempaddr;//定义接收地址缓存
static unsigned int tempkey;//定义接收数据缓存
unsigned int timecnt;
timecnt=TH1*256+TL1;
TH1=0;
TL1=0;
TR1=1;//定时器1启动
F0=~F0;//取反F0
if(F0) {
tempaddr=tempaddr1;
}
else {
tempkey=tempkey1;
}
}
以上是一段单片机外部中断1的中断服务程序,乍看似乎没什么问题,仿
真调试时也能通过“编辑”。但实际上这是一段错误的程序——其中对“F0”
用户标志位的“取反”操作是达不到其预期效果的。因为对“F0”用户标志位
的“取反”操作是在中断服务程序中进行的。在进入中断时,C语言自动会保
护“中断现场”——将程序指针PC、累加器ACC、状态字PSW等压入堆栈保护
起来……直到中断返回时弹出堆栈并覆盖了中断服务时的变值,恢复到压入堆
栈之前的原样。因此,状态字PSW中的F0也不例外,如果压入堆栈之前F0是
处于逻辑“0”状态,中断返回后还是复原成逻辑“0”状态——不管中断服务
程序中怎么取反改变——也就是说,在中断服务程序中试图改变F0之值的操作
是有失偏颇的。对于上文例举的那段中断服务程序来说,若F0的初始状态为逻
辑“0”,即进入中断服务之前和中断返回之后总是逻辑“0”,那么进入执行
“F0=~F0”指令后F0总是逻辑“1”,因而接下运行的是“if(F0)”下花括号
中“tempaddr=tempaddr1”指令永远也运行不到。所以,若要中断服务程序
达到预期的效果——“if(F0)”下花括号中的指令与“else”下花括号中
您可能关注的文档
- BarTende软件连接EXCL表格数据教程.doc
- BiologEcPlate_TM_实验信息提取方法改进_张燕燕_1.pdf
- C5解剖车讲解教(讲解版).ppt
- CD44在不同肿细胞表面阳性表达率的实验研究.pdf
- CE4668标致08音响安装手册.ppt
- chapter 外汇汇率和汇率折算.ppt
- CNAS-R01可标识和认可状态声明管理规则.pdf
- CFD-POST出数据方法.pdf
- CSAMT法-2110531.ppt
- CTC自愿性认证志使用指南.doc
- 2024年汽车技师职业鉴定测试卷附答案详解(典型题).docx
- 2024年汽车技师职业鉴定每日一练试卷附完整答案详解【考点梳理】.docx
- 2024年汽车技师职业鉴定每日一练试卷附答案详解【突破训练】.docx
- 2024年汽车技师职业鉴定每日一练试卷(有一套)附答案详解.docx
- 2024年汽车技师职业鉴定每日一练试卷汇编附答案详解.docx
- 2024年汽车技师职业鉴定每日一练试卷带答案详解(基础题).docx
- 2024年汽车技师职业鉴定测试卷及完整答案详解(夺冠系列).docx
- 2024年汽车技师职业鉴定每日一练试卷及答案详解【历年真题】.docx
- 2024年汽车技师职业鉴定每日一练试卷附答案详解【B卷】.docx
- 2024年汽车技师职业鉴定练习题(考点提分)附答案详解.docx
文档评论(0)