51单片机答辩问题一个问题求助,为什么值的跳变很明显,不在正常误差范围内?

51单片机晶振你所不知道的21个问题_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
51单片机晶振你所不知道的21个问题
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩6页未读,
定制HR最喜欢的简历
你可能喜欢关于51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。下面我给楼主讲解一下:51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。51单片机有以下几个内存模块组成:1】ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义常量,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改;2】RAM有------内部RAM的低128位(00-7F),对应C语言就是data,比如我定义一个变量,&&&&&&&&&&&&& data unsigned char Var = 0;那么,这个Var变量就是放在内部的低128位Ram中&&&&&&&&&&&&&& -------内部RAM的高128位(80-FF),对应C语言就是idata,比如我定义一个变量,idata unsigned char Var = 0;那么,这个Var变量就是放在内部的高128位Ram中&&&&&&& -------特殊功能寄存器(SFR)(80-FF),对应C语言就是Sfr比如我定义一个变量,Sfr unsigned char Var = 0x90;那么,这个Var变量就是放在内部的特殊功能寄存器中,这是你对Var操作,相当于操作一个特殊的寄存器,但是小心,不能随便定义Sfr变量,很危险&&&&&&&&&&&&& ------外部RAM 64K(0000-FFFF)外部的RAM可以扩展到65536个,但是前256个算是一页,这一页比较特殊,是用pdata来修饰的,当然,也可以用xdata来修饰。除了第一页的256个以外的其他65280个空间,只能用xdata来修饰;回过头来讨论pdata和xdata,这两个都能修饰外部Ram的第一页,但是,Pdata只能修饰第一页,即最前面的256个外部Ram,那么,这最前面的256个到底用Pdata还是Xdata好的呢?答案是Pdata,因为Xdata修饰的变量,用的是DPTR寻址,Pdata用的是R0和R1.DPTR因为是16位的,所以可以覆盖整个的64K外部Ram,R0和R1是8位,所以只能寻址最前面的256个,也就是外部Ram的第一页,但是,用R0寻址,比DPTR快一倍,代码也小的很多楼主又疑惑了,好多地址是重复的,比如,我向80H地址写一个数值,单片机怎么知道读的是内部的高128位RAM?还是SFR?还是外部64K的RAM呢?答案是用指令,如果是直接寻址,那么访问的就是SFR,如果是R0或者R1间接寻址,就是内部高128位RAM,如果是DPTR或者是R0,R1间接寻址,且配合的是MovX指令,那么就是访问外部64KRAM中的第80H个地址。概括一下来说,51的内存由以下组成:1----程序存储器(包括片内Flash或Rom,也包括片外Flash或Rom,C语言用Code定义)2----内部低128位Ram,C语言用data定义3---内部高128位Ram,C语言用idata定义4---内部SFR,C语言用Sfr定义5---外部65536个Ram(通常,很多单片机厂家不会给你扩展那么多的,一般来说扩展256个字节或者1024个字节就差不多了,最近宏晶的出了个扩展4096字节的。这65536字节的Ram,前256个可以用Pdata修饰,也可以用Xdata修饰,超过256个之后的,只能用Xdata修饰)以上所说的只是针对51内核的单片机,其他内核的,像ARM之类的,不是这种结构的。最后,回答楼主的问题:片外存储区是什么?这个问题太模糊,答案可以是外扩的Flash,也可以说是外扩的RAM,如果问题是这么问的:程序或者常量存储在片外存储区,这个片外存储区指的是什么?答案是外扩F如果问题是---变量存储在片外存储区,这个片外存储区指的是什么?答案是外扩RAM;一般来说,如果不指明的话,外内存储区,行业内人士指的是外部的Ram。片内存储器是什么?是不是就是内部的E2PROM?片内存储区一般来说,指的是内部的Ram,包括高128位(idata)和低128位(data)片内存储器,这个说法我没听说过,可能是EEPROM吧。
阅读(...) 评论()豆丁微信公众号
君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
51单片机课程设计--人机界面的多功能电脑时钟.doc
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口51单片机数码管每秒跳变一次_百度知道
51单片机数码管每秒跳变一次
程序如下,但搞不清楚,为什么下面这段不是写在void exter() interrupt 1
程序里面?
while(1) {
if(num==16)
P0=table[num];
#include&reg52.h&#define uchar...
我有更好的答案
写在哪里都是一样的,因为你的a是个全局变量,在中断里执行清零和在中断里面执行效果是一样的
可是我试了
放到中断里面的话
数码管就只显示0 不会改变...
能帮忙解释解释原因吗?
又帮你仔细看了看,感觉如果把while(1)里面的放在中断里是没影响的,你能发来一份你修改完不正常的程序吗?
真心的谢谢了。。。 一下子想明白了。。。
话说,哥们你是不是搞嵌入式的啊?
小弟现在在自学单片机
以后想搞嵌入式的...
我也很菜,只是比你早学几天,嵌入式学的一般,也在努力中~~
采纳率:63%
你的中断里是中断一次把a的值+1.while函数里判断中断二十次就判断估计是一秒,就自动把显示的数字加一,并显示出来,如果超过16就重新赋值。while函数一直循环。中断只起到改变计数值的作用。主函数才进行最后的计算和显示。所以不用放在中断里。如果把while函数的内容放在中断里也可以,但是会延长中断的时间,时间间隔误差就大了。
放在主程序和定时中断程序里的效果应该是一样的(你自己可以试试啊),因为都是在定时的时间到之后才会进入到这段程序中。
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51单片机做的频率计,有两个问题,计数误差很大,而且显示不稳定,老变来变去_百度知道
51单片机做的频率计,有两个问题,计数误差很大,而且显示不稳定,老变来变去
#include&reg51.h&
unsigned int time,
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code
dispbit[]={0xef,0xdF,0xbF,0x7F};
unsigned char ws[4];
我有更好的答案
你的共阴显示,位信号不正常造成不稳定
定时器和计数器的初值赋反了,弄好了,谢谢
采纳率:51%
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机系统出现的问题 的文章

 

随机推荐