单片机代码解析

知识点的问题解决了,但是这还远远不够,代码怎么办?
直接背,这是不可能的,一不小心就会背错一个数字或者字母,直接没分,而且,代码好难背啊。
要是理解了会不会好背一点呢?
带着帮助同学们的心情,我抽了几个课本上的源码给大家解析一下。1

话不多说,直接上代码。

基础准备

代码大题基本上都涉及到了中断的使用,在知识点复习过程中,包含有关中断部分的介绍,在这里结合代码复习一遍。
如下图所示,当我们需要使用中断时,需要打开相应的开关,在代码中就是将相应的中断允许位置1。
使用外部中断时,需要额外设置中断触发条件,下降沿触发或高电平触发。代码中就是IT0/IT1 置1或置0,或设置TCON寄存器。
使用定时器中断时,需要设置定时器的工作方式。即设置TMOD寄存器。
中断允许位置1,可以单独设置,也可以通过IE寄存器统一设置。
对于多个中断的项目工程中,可能需要设置中断触发优先级。代码中即为设置IP寄存器。但是题意中不需要设置中断优先级时,IP寄存器可不设置。

实例1

有一包装流水线,产品每计数12瓶时发出一个包装控制信号。试编写程序完成这一计数任务。用T0完成计数,用P3.7发出控制信号。

分析:

在本题中,涉及到定时/计数器的使用。首先应该想到对定时器的一系列初始化。
用T0完成计数 ” 的隐含意义就是:总中断要打开,定时器要打开,定时/计数器设置为计数模式。
计数12瓶 ” 隐含意义:计数内容不大,使用方式设置,初值计算。

解题过程:

第一步 分析:

在答题卡上写出答题过程,寄存器数值的由来,初值的由来。(不分析直接写也可以,但是保险起见,还是写上稳妥。)

由上图可知,我们要将EA、ET0置1,结果就是IE=1000 0010 → IE=0x82;



由上图可知,我们要将定时/计数器0的工作方式设置一下,GATE标志位为0,C/T标志位为1,C/T标志位为1时,定时计数器为计数模式。M1M0设置为8位自动重装载模式,M1M0为10。结果就是TMOD=0000 0110 →TMOD=0x06;
在定时/计数器的方式2工作方式下,初值的计算为X=2^8-N;即初值=256-12=244=0xf4。将0xf4送入TH0、TL0→TH0=0XF4;TL0=0XF4;

第二步 写代码:

1、程序框架

#include<reg51.h>
#define uchar unsigned char     //宏定义,将unsigned char 重命名为 uchar
#define uint unsigned int       //相当于是把尼古拉斯凯奇·德玛西·凯金更名为李狗蛋void main(void)
{while(1);
}

2、中断初始化
上面的分析和框架写好后,再一步一步添加内容,可以先将代码写在演草纸上,最后写在答题纸上。
将初始化的内容写上:

IE=0x82;
TMOD=0x06;
TH0=0XF4;
TL0=0XF4;
TR0=0;         //打开定时/计数器,开始工作

这里可以使用函数。具有c语言基础的小伙伴可以跳过这部分,看第三代点。

#include<reg51.h>
#define uchar unsigned char     //宏定义,将unsigned char 重命名为 uchar
#define uint unsigned int       //相当于是把尼古拉斯凯奇·德玛西·凯金更名为李狗蛋void init()
{IE=0x82;TMOD=0x06;TH0=0XF4;TL0=0XF4;TR0=0;            //打开定时/计数器,开始工作
}
void main(void)
{init();while(1);
}

3、数码管
题目中未明确要求使用数码管可将本部分省略。
在书本上我们看到一个code的标识符,作用是,将常量数组存储在ROM中。片内资源有限,所以将一些不会变的,不经常调用的,占用内存较大的数据存储在ROM中。

uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0XC6};
//这里是共阳极数码管,如果题目中使用共阴极数码管,将上述数码管数组中的值展开成二进制,在取反即可。例如:0的值是0xC0,展开就是1100 0000,取反后就是0011 1111,转换为16进制就是0x3F。剩下同理。

一个数码管就要占用8个I/O口,当出现多个数码管时,会占用大量I/O口,但是单片机本身自带I/O口数量又不是很多,所以在出现多个数码管时,往往会使用3-8译码器,在这里先不过多讲解了。
4、主函数
本题中,主函数中的程序不算多,主要就是控制包装机。

while(1)
{if(flag==1){flag=0;P3^7=0;//P3^7引脚是直接调用单片机I/O口,也可以先对P3^7口进行定义再调用P0=tab[Conter];Delay(20);P3^7=1;}
}

5、中断服务程序

void C0Isr() interrupt 1 //返回值类型为void 函数名为C0Isr 中断号为1 //函数名随意,只要自己好区分即可//后面的中断号一定不要错了,这里使用的是定时/计数器0,中断号为1
{Flag = 1;             //用户自定义变量,主要作用类似于开关Counter++;              //用户自定义变量,主要作用计数if(Counter==13)Counter=0;
}
其他实例

其他实例内容暂时为空,大家对教材上的代码有不理解的,可以将代码粘贴在评论区,作者会及时进行更新。

——————————————————————————————————————
本文纯原创,如有侵权请联系删除,如有错误,敬请批评指正,谢谢大家。


  1. 当然了,解析的有问题或者不太清楚可以私信或者在下面评论,我看到会及时更改。 ↩︎

单片机期末复习 代码篇相关推荐

  1. c51单片机期末复习个人总结2单片机基本原理

    单片机基本原理 51系列单片机简介 MCS-51系列单片机的结构原理 MCS-51系列单片机的基本组成 MCS-51系列单片机的内部结构 51系列单片机的中央处理器 运算部件 控制部件 MCS-51系 ...

  2. 80C51单片机期末复习

    80C51有基本型和增强型.区别:增强型多了定时器,内置存储空间不同. 1冯•诺依曼思想计算机由运算器.控制器.存储器.输入设备.输出设备组成这一计算机的经典结构. 2将CPU.存储器.I/O接口集成 ...

  3. 单片机C51期末复习答案

    单片机C51期末复习答案:仅做参考 题目来源 本答案来源个人笔记,无论对错,如果阁下发现有错,可以评论区留言. 1.当EA=1时,可扩展的外部存储器大小 ? 答案解析:60KB 当EA=1时,表示首先 ...

  4. 浙江万里学院计算机期末考,期末复习看这一篇推送就够了

    原标题:期末复习看这一篇推送就够了 叮!面对即将到来的2020, 小编在这里提前祝同学们 新年快乐~ 然而,比起新年大家又长大一岁来说, 更可怕的是-- 考试周到了! 提起期末考试, 作为学生的大家 ...

  5. 计算机病毒与恶意代码(第4版)期末复习

    写在最前面,解释一下,小标题后面的括号代表该问题在书中所处的页码,有.的猜测是选择题或判断题:有+的是简答题:综合题会另外再写一篇博客.仅代表个人猜测,未压中勿喷. 另附:课后题答案链接(也可QQ私聊 ...

  6. Android期末复习篇_传智课后习题以及答案(选择、填空、判断、简答、编码题)

    写在前面 此为移动应用开发传智课后习题及答案,供期末复习使用,注意 答案仅供参考 加粗题目为强调 题型涉及:选择.判断.填空.简答.编程题 另8章习题及答案汇总:Android期末复习篇_8章节练习题 ...

  7. MySQL数据库期末复习--这一篇就够了

    目录 一.前言 二.一些基本概念 1.时态数据库 2.分布式数据库 3.面向对象数据库 4.移动数据库 三.数据库的创建 1.工具 2.基本需求 3.根据上述需求画出E-R图 4.将E-R图转换成关系 ...

  8. Android期末复习篇_8章节练习题附答案

    说明 Android移动应用开发章节练习题,注意 此答案并非标准答案,仅供期末复习参考. 加粗题目为强调题目 目录 第一章-安卓基础入门 第二章-安卓常见页面布局 第三章-安卓常见页面控件 第四章-安 ...

  9. 最优化理论笔记及期末复习(《数值最优化》——高立)

    目录 一.预备知识 二.无约束最优化方法的基本结构 三.凸集和凸函数 四.负梯度方法和Newton型方法 五.共轭梯度法 六.约束最优化问题的最优性理论 七.罚函数方法 八.期末复习 8.1 知识点复 ...

最新文章

  1. linux c 内核 warning: the frame size of 1040 bytes is larger than 1024 bytes
  2. linux内核PID管理--命名空间
  3. PDA(Personal Digital Assistance)
  4. linux设备驱动之pci设备的驱动架构
  5. 函数参数的值传递和地址传递
  6. 网络操作系统 第七章 管理TCP/IP网络
  7. 生产环境apache2整合tomcat动静分离
  8. 数据库:数据库设计与数据建模及建模工具(PowerDesigner)
  9. 文件名变乱码怎样修复?
  10. 用三元运算符判断奇数和偶数
  11. QGraphicsItem
  12. ERDAS IMAGINE 2013裁剪影像方法
  13. 【批处理DOS-CMD命令-汇总和小结】-磁盘管理和修复、磁盘和分区属性的管理、设置隐藏分区卷(convert、diskpart、chkdsk)
  14. Android蓝牙系统
  15. Python matplotpy颜色表
  16. Linux --------- 远程操作工具
  17. ppt怎么把图片做成翻书效果_PPT怎么制作翻书效果?PPT制作翻书效果教程
  18. 织梦插件-全自动SEO织梦插件
  19. ERROR: Encountered errors while bringing up the project.
  20. 狂神说笔记——MyBatisPlus快速入门24

热门文章

  1. FFMPEG Tips
  2. 煤灰混凝土泡沫已经来临,煤灰混凝土消泡剂准备好没有
  3. 谷歌广告西联汇款到账的美元转人民币
  4. ExtractFileDir 与 ExtractFilePath 的区别
  5. 在Word中按条件标示数值,例如标示不及格的成绩或大于50万的金额
  6. HTML-图片、音频、视频链接
  7. html 网页联系人,HTML+CSS网页制作实例:制作联系人网页表单
  8. js实现根据身份证号自动生成出生日期
  9. 用JS基础写一个简单的滚动条事件
  10. 网络协议学习之Ethernet II协议(二层)