单片机与嵌入式.doc_第1页
单片机与嵌入式.doc_第2页
单片机与嵌入式.doc_第3页
单片机与嵌入式.doc_第4页
单片机与嵌入式.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一部分实验内容:1. 把AD转换所得的8位二进制数0到255,转换为0.0到5.0的十进制数。已知AD转换的基准电压为5.0V。若用LED显示,小数点后取几位比较合适?对10位的AD转换又该如何考虑。输入字节可放R0L中;转换结果保存在变量result中;2. 课外作业:已知一个偶对称函数的取样数列(8位256点),求其频谱(16位256点)。 算法自选。算法描述:方案一:待转换数(0-255)记为x, x/51就可以得到转换后的整数部分,在把余数部分R1*10/51, 可以得到第一位小数,以此类推,在把余数部分Rn*10/51, 可以得到第n位小数。方案二:先把输入的数据乘以500(说明一下,整个实验中的后两位为小数,第三位为整数位),然后除以256(实际上应除以255,但是除以256相当于把16进制的数右移2位,处理起来很方便)。这样得到的数再转化为10进制的数就是最后的结果了。方案三:采用查表法,在内存中建立好一个2555.0的映射结果,到时候查表输出结果,优点是速度快,但是所用的存储单元多,而且表格的建立也需要一定机械的工作。设计思路:我采取的实验方法是:计算量化间隔为5/256=0.01953125,取量化间隔为1953,程序中r2为输入数据,所得结果以压缩BCD码的形式存放入R0中保留到小数点后三位。流程图:R2=0R2!=0N初始化r0,r1,r2判断r2是否为0 R0=r0+1953H(bcd加法)如果有进位r1=r1+1R2=r2-1R0=r0+50H如果有进位r1=r1+1R1,r0组成的32位BCD码右移8位wait程序清单:见ad5程序说明:其中r2中为输入的0255之间的数值,结果保存在result1,result中,以非压缩BCD的格式保存。实验结果:255被转化为4.931,可见这种方法有一定的误差,这种误差是累计增加的。127被转化为2.480,准确的数值应该是2.5,但是误差可以认为在可以接受的范围以内。最大误差为(5.04.931)/5.01.38思考题:如果是十位AD量化间隔为5/1024=0.0048828125.程序中量化间隔为4883。流程图和上面的基本相同。源程序:见ad10实验结果:1023被转化为4.9953,因为是利用了上一题的程序,所以除了小数增加了一位,别的没有什么变化,但是小数的后面两位已经没有什么意义了,所以可以只看402和401单元里的BCD码就可以了。511被转化为2.49此时,转化的最大误差为0.5课外作业:(1)算法描述这道题目我们根据上个学期的数字信号处理的知识可以知道有两种方法可以实现。第一种是按照离散傅里叶变换的方法,挨个对各个数进行乘加运算,然后得出答案。这种方法虽然麻烦但是程序简单。第二种是进行FFT算法,这种方法速度快,但是程序稍微麻烦一点。具体方法是将x(n)按n为奇偶分解成两个子序列:其N点DFT可以写成E(k)和F(k)都是N/2点DFT结果,由DFT性质可以知道:所以: 依此类推,可化为求N/4,N/8点的DFT,这样可以大大减少计算次数。当然基的计算对于单片机还是很复杂的,我们可以通过matlab先计算出计算中所学要的SIN,COS值,然后做成表格放入单片机程序,计算过程中通过查表的方法得到所需要的三角函数值。(2)编程思想所以此题的关键是求出的表达式,利用迭代法做Z变换,整理得x(0)=1,n1时令k=1即可得到的表达式,的周期性所以只要求出即可。下图是用matlab,利用迭代法计算的。本程序实现起来有很大的困难,因为用定点数迭代精度不高,但是又不会采用浮点数,所以只能用matlab生成.asm文件,文件里面有cos函数的查找表。然后设置一个计数变量,本程序中用的是r2。循环一次r2+1,根据r2的值计算dft并输出(3)matlab生成查找表N=256;t=0:255;B=cos(2*pi*t/256);fid_1=fopen(cos.asm,w+);for k=1:N fprintf(fid_1,cosk%d: .word %d rn,k,floor(B(k)*32768);endfclose(fid_1);注意由于1时用32768表示,但是单片机是补码运算32768表示-1所以1用32767表示手动将32768改为32767,然后将文件内容复制到主程序内。(4)程序源代码见fft(5)实验结果(只给出了部分结果)(6)实验总结:体会了查表法和迭代法的差别,迭代法存储器利用效率高,但是精度不高,所以适合短的dft,和存储器比较紧张的情况,查表法速度快,精度高,如果有条件尽量使用查表法方法二:用快速算法(1)用matlab产生sin,cos函数的源程序n=256;k=0:255;t=-2*pi*k/n;c=cos(t);p=sign(c);s=abs(c);for i=1:256 a=s(i); for j=1:15 if a=(0.5)j a=a-(0.5)j; ss(i,j)=1; else ss(i,j)=0; end end if p(i)=-1 f(i,1)=1; ss(i,:)=not(ss(i,:); for j=15:1 if (ss(i,j)=0) ss(i,j:15)=0; ss(i,j)=1; break end end else f(i,1)=0; endendss=f,ss;for i=1:256 fprintf(%s %d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%cn,.word,ss(i,:),b);end(2)源程序见fft2(3)实验结果只给出了部分结果。第二部分实验目的:1 学习使用硬件仿真工具KD30;2 了解单片机在电路控制和LED驱动方面的一些应用。实验内容:1熟悉硬件仿真工具KD30的使用。 2修改样本程序 SAMP1a,使无论在计数或停止计数时,按 SW3 均对计数值清零,并停止计数。 3编制一个秒表程序, 测试精度为0.1秒,按 SW1键启动计数,再按一次 SW1键停止计数。任何时候按 SW3 键停止计数,并对计数值清零。4按 SW1键后, 以 0.1 秒为单位开始计数,再按一次 SW1 键停止计数。若按 SW1 键时间超过2秒,则计数值清零,回到初始状态。实验电路图: 图一 实验电路板LED显示电路图采用扫描方式,先选中段选,然后选中位选,利用视觉暂留现象。图二 LED显示部分电路图三 键盘部分电路程序流程图:1 主程序说明:以秒计数时R0=500以0.1s计数时R0=50。2 显示子程序说明:第二,三个任务要显示小数点所以需要两个查找表,一个带小数点,一个不带,根据Fdig选择用那个查找表。3 计时子程序实验步骤:(实验板上三个按钮从左到右是sw3,sw2,sw1)【任务一】:使计数器在停止计数时也可以实现清零功能(1)状态转移图(2)编程思路第一个程序很简单,只需要在停止计数的部分加上对清零的判断即可,如果清零有效,则进行清零,否则就保持原状。(3)源程序见watch1【任务二】:实现最小计数单位为0.1秒的计数。只使用SW1一个键进行“启动”和“停止”的操作,即按一次“启动”,再按一次“停止”。用另一个键SW1实现“清零”。注意要求显示小数点。(1)状态转移图(2)编程思路 要实现最小计数单位为0.1秒的计数,ta0需要由1000改为100以提高计数频率。 只使用SW1一个键进行“启动”和“停止”的操作,需要在启动的中断部分对sw_in进行判断,如果原来是“1”,按键后就变为“0”;如果原来是“0”,按键后就变为“1”;其实就是取反的操作。 最关键的部分是小数点的显示,原来的两个数码管用都是不显示小数点的一套译码,所以现在需要将它们进行区分,如果是第一个数码管显示,则需要显示小数点,具体做法是在原来译码的基础上将高位减去8,当然也可以用与运算来实现;如果是第二个数码管显示,则按照原来的译码进行显示即可。(3)源程序见watch2【任务三】:进一步修改程序只使用SW1一个键实现“启动”、“停止”和“清零”的全部操作,即按一次“启动”,再按一次“停止”,若按 SW1 键时间超过2秒,则计数值清零,回到初始状态。(1) 状态转移图(2)编程思路只使用SW1一个键实现“启动”、“停止”和“清零”的全部操作,则原先的停止和清零中断都得去掉,只用启动中断进行判定即可。判定的方法也很简单,在第二步实验的基础上,从sw1_in改变状态时开始进行计数,计到2s就进行清零,将sw1_in复原即可。(3)源程序见watch3程序分析和说明:本次程序很简单,只要在原有的电路上修改就可以,不需要我们再关心地址分配等问题。但编程的思想却很好,整个程序可以分为两个部分,一个是由中断服务程序组成的状态转移模块,负责状态间的转换。另一个是主程序的计数显示模块

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论