1、96 单片机课程设计报告 一、课程设计的目的: 这次单片机课程设计布置在暑假到开学初, 暑假大多数同学都没有完 成,即使完成了程序的初步构想以及编写, 但是如果没有仿真机的话 还是不能够完成课程设计的。所以在开学初这三周时间,才是 96 单 片机课程设计完成的主体时间。 由于暑假的原因,单片机的内容在两个月内忘记了不少, 至少我是这 样。所以在开学的时候开始写程序都是一直翻书, 并且寻找原来的实 验参考资料,找回一些记忆, 也是为了尽量避免在做课程设计的时候 出现过多的错误: 这些事情都让我逐渐恢复对 MCS-96 单片机的了解, 这次课程设计期间,我犯过很多错误,但是每一次的发现与改正都让
2、我印象特别深刻;每一步的程序编写、调试过程,都让我对这门课多 一点理解,所谓温故而知新。 二、课程设计的内容: 1、在仿真机的 LED 上显示自己学号的后 8 位 2、开平方计算器: 对 199999999 范围内的数进行开平方操作,精确 到 6 位有效数据。键盘数据输入,LED 显示结果。 (每班一组) 三、课程设计的原理: 程序主体结构框图: 开方的流程图: 等待以及键盘循环扫描 显示学号,键盘按“1”则 跳转进入开方运算 开方运算程序, 键盘按 “0” 则跳转进入现实学号。 按“0”或“1” 按 “ 0 ” 按 “ 1 ” 按“1”则开始开方 SQRT 延时等待输入数据 循环八次,输入数
3、据 把输入的数据存储 到 3000H 到 300EH XL=0? 数码带权求和 把被开方数两位两位分开,并存储 到 30023008,之后五个字节清零 N Y N Y N Y N Y/显示学号 课设的主要内容是对199999999 范围内的数进行开平方操作,实验原理 主要涉及开方算法;当时想到的有迭代法、手算开方的算法,现在比 较两种算法的思路: 1)迭代法。迭代法首先需要寻找最高位,即通过把被开方 数除以 100 的 n 次幂, 写成 X0000 的形式, X可以是199, 第一次迭代开始, 跌代数写成 Y00 形式, Y从 9 迭代到 0, 比较平方,小于跌代数的平方则存储第一位的 Y 值
4、,求取 90 迭代, 计算每一位有 效数字 XX0? 存储该位有效数字 显示结果 是否按“0” BL=0? ZZ=WW? 余数,跳出第一层循环,之后重复操作。其中在个位数时 取小数点。 2)手算开方法。这种算法首先把被开方数从小数点开始, 每两位两位地取数,开方时从最高 2 位开始,从 9 迭代到 0 的 XL 求出最高位的一位数,存储该数 XL,以及一次操作 的余数 YUSHU, 之后每次开方都需要对XX 乘以10加上 XL, 得到新的 XX;XX 乘以 20,再加上 XL,乘以 XL,得到 YY; 余数乘以 100 再加上后两位,得到 ZZ ;YY 乘以 XL 得到 WW,比较 ZZ、WW,WW 小则存储 XL,推出一次循环迭 代;同样小数点需要注意。 算法比较:第一种算法比较容易理解,算法简单,即层层迭代;但是 在出现小数时就已经计算复杂,由于 96 单片机的乘法 MULU,MUL 等都是对整数处理,故需要乘以 10 的几次 幂,转化为整数,另外在取到 6 位有效数字时, ,已经超出了双字的范围,所以数 字处理比较困难。 第二种算法则不存在第一种算法的困难