51单片机汇编课程设计案例精编 - Read.DOC

  1. 1、本文档共162页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机汇编课程设计案例精编 - Read.DOC

51单片机汇编课程设计案例精编 MSC51 51单片机汇编课程设计案例精编 1 MSC51 1 第六课 C51基础 1 简结键盘去抖方法 5 【小雨的成长】外部中断的简单应用 10 第七课??按键处理 13 [单片机教程]第九课 中断应用—红外解码 15 [单片机教程]第十课 LCD1602显示 20 51单片机与串口通信(含代码) 24 [单片机教程]第十二课 ADC0832应用 28 【小雨的成长】简单东西复杂玩之流水灯 37 lcd??ko 57 《51单片机汇编课程设计案例精编》源代码 31 81 空调温度控制器 102 简易电子琴设计 106 设计实验 跑马灯 1 111 温度采集系统 112 A/D与D/A转换 117 单片机MCS-51系列指令快速记忆法 118 汇编语言在51单片机中的所有指令有那些 122 单片机复位电路设计 128 单片机复位电路的可靠性分析 135 I2C总线原理及应用实例 143 三极管的基本放大电路 146 AVR,C51和PIC八位单片机性能比较 148 电力电子器件的缓冲电路 152 利用PC的RS232口控制LED灯 155 十六进制显示 159 二进制转换成十六进制的方法 159 第六课 C51基础 更新时间:2009年01月08日 浏览次数: 183 作者: 来源:   上一课我们讲了一些C51的知识,并且把第一、二课的汇编程序用C写了出来,今天我们继续学习一些C51的基础知识。上节我们学过for,while,除此还有do while,if else,switch之类的,这些都是很常用,我们将在以后的课程中逐步来学习。本节课先把第三、四课的汇编程序改用C来写一写,进一步领会一下C和汇编的差别。   我们先看看C的一些运行运算符。  第三课我们讲的跑马灯,用二种方式,一种移位一种查表来实现,现在我们来看看实现这些功能的C程序。首先是移位方式 sfr LedPort=0x80;是特殊功能寄存器声明,P0口地址是0x80,我们这里声明LedPort就是指向P0口,这样在程序里就可以直接写LedPort来代替写P0,这个与汇编相似。   uchar dat;这是定义一个无符号单字节变量,把它放在程序顶,称为全局变量,这样,在每个子函数里都可以对它进行引用、修改,在整个程序执行中都占用固定的RAM空间。相对应的就是局部变量,比如我们在mDelay函数里定义的i,j就是局部变量,它们只有在函数执行前才生效,结束后就消失了,占用的RAM空间会被释放,不能被其它函数引用,在C里面,我们一般建议能用局部变量就不用全局变量,这是因为单片机的RAM空间有限,可要节约使用喔~~   if(!dat)dat=1;从图一中我们可以知道符号“!”是逻辑非,即如果dat是0,那么!dat之后,结果就是1(真),如果dat是非0(注意,只要是非0,不管是1、2、3戓什么值),那么!dat结果就是0(假),逻辑判断是很常用的,大家认真领会一下。   if(表达式1)表达式2;   是一条判断语句,根据表达式1运算结果来判断是否执行表达式2,只有在结果为1(真)的时候才会执行。   LedPort=~dat;是将dat值按位取反后送到P0口,“~”是按位取反运算符,比如第一次执行时dat的值为1即二进制的0000 0001 ,那么按位取反后就是1111 1110,然后再送到P0口,这样,我们就可以点亮P0口上最低位的LED了。   dat=1;把dat的值左移1位,“”是左移,位数可以自己喜欢啦,不一定1位,比如dat=2就是左移2位。这个式子完整的表达应该是   dat=dat1;   这样看比较清楚,先把dat左移1位再赋值给dat本身。在C里常有这种写法,称为复合赋值运算,含义就是变量与表达式先进行运算符所要求的运算,再把运算结果赋值给参与运算的变量,比如dat-=1;和式子dat=dat-1;是一致的,其它一些运算也可以写成这种方式,这里不再详细说明,以后用到就会明白。   这里的移位操作跟汇编不同,移位后,原来的位置是用0补充的,不象是汇编里的循环移位。比如dat如果是1111 1111那么执行dat=1;后,结果就变成1111 1110。大家想想,如果左移8位后结果是什么?   结果是0,呵呵,所以我们在开始放了一句判断if,如果dat是0就将dat写成1,这样,这个跑马灯就可以周而复始的跑了。另外补充一下,C里也有循环移位的指令,但没有带进位位移位的指令,这里暂时不详细讲这个,以后用到再说。   .我们再来看看第3课里查表方式实现的跑马灯。   uchar code Tab[]是存放要显示的数值在ROM里,要引用里面的数据比如第11个只要直接写出Tab[10]即可(第1个是0),注意这语句里有个

文档评论(0)

wangsux + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档