51单片机学习笔记

51单片机学习笔记——基于汇编语言(1) 51单片机汇编语言学习日记(1) 阿婆主近期在疫情学校上网课期间里开始汇编语言的51单片机学习,由于博客与论坛上的单片机教程几乎都是基于C语言的,阿婆主打算将自己的学习记录连载在博客上。 该系列文章基于80C51单片机,Keil2(这个版本是比较古老,不过keil2和keil5其实区别不大) 1、80C51系列单片机硬件结构 在开始讲单片机之前,相信大家已经对进制转换与码值已经有了一定的了解,如果... 阅读详情

       高考没考出水平,大大影响了我的心情,打算复读,但随着时间的流逝,热情逐渐褪去。几乎用了半个月才调整好。漫长的暑假,总不能全用来调整心态吧,于是按计划,重新接触编程,编程带来的快乐很快就把阴霾驱散了。而且对大学生活的憧憬令我打消了复读的念头。

    重新接触编程好几天了,进展神速,感觉有必要记录一下这段学习经历,这将会成为我宝贵的经验啊,待我成为高手之时,把这些记录拿出来,写教材,写书都容易啦。哈哈。我也希望通过这种方式,结交同道中人,共同学习。

 

 

        在这篇文章中先把前几天学习的内容记录一下,以后每天更新,记录编程中的酸甜苦辣。

         高一的时候在学校制作机器人的经历至今记忆犹深,组员诗恒编程技术的高超让我惊叹。高一的时候,他就有好些电路板,跑马灯之类的小制作,佩服之余又羡慕他能有那么多资金去制作这些东西,一起为参赛而努力的时光值得我一生去珍藏啊。我在高二在参加机器人竞赛之余又参加了信息学竞赛,这过程中学会看懂c语言的比较高级的程序,自己也能编写几个程序去解那些弱弱的题目。高三奋发图强,把编程搁在一边,努力备考了,编程荒废了一年,忘记得七七八八了。

       在这里跳过知道高考成绩的调整期。

      因为觉得学单片机比较好玩,而且比较实际,于是就打算先不学习以前那些抽象的算法,打算学单片机了。

大约是在7月7号吧,在淘宝看中了一个51单片机开发箱,觉得挺好,还包括电烙铁,万用表之类的东西,下了订单。同时在网上找了很多电子电路,单片机,三极管之类的教程。可恶的是那卖家速度比蜗牛还慢,在15号才送到,打击我学习的热情。收货那天顺便买了本书《51单片机自学笔记》。

   买了书,当然是很热情地看啦,可惜这本书开头那10几页介绍51单片机组成,寄存器,引脚之类的东东,看不明白,后来我又在网上看了一些资料,终于半知半解地看完这部分。

         之后就一直按着这本书去学习了。先是“一个led闪烁”。那个单片机与led灯连接的图还是不太懂,但因为有开发箱,实际电路部分不用我去焊接,所以我可以直接编程序了。  

       这个程序没有保存,太简单了,试验一次成功之后我就把它删了。不过这个程序虽说是简单,但还是比c语言中的“hello world”难得多,有些概念不懂还真的理解不了,从中还是学到了不少。

   比如:org 0000h    

         sjmp start

         org  0030h

start:

     *********

     就是这一段,我也是到后期写多几个程序,在keil中调试时看寄存器的状态时才真正弄懂:单片机开机时,从地址为0000h的地方开始执行命令,而sjmp start就存放在这个0000h中,所以一开始单片机就得到命令,跳到0030h,也就是start存储的位置开始执行,至于为什么要跳过,现在也只是知道不跳过可能会出错吧。呵呵

       接下来就是为什么程序中向p0口输出数据就可以控制led的亮和灭了,虽然以前也知道计算机中的01 0101是代表高低电平,也代表一个数字。后来明白,p0口也是寄存器,我们把某个数字写进去,比如1111 1110写进p0,比如写16进制的数:#0ffh,和二进制的11111111b,10进制的***是一样的。那就可以控制与p0口相连的8条线路的高低电平状态,又根据发光二极管的单向导电性来控制led灯的亮和灭了。

        还有一个重要的就是delay,延时子程序了。教材中

delay:mov r0,#250

     d2:mov r1,#250

     d1:djnz r1,d1

         djnz r0,d2

          ret

 

        我想,如果没有竞赛时训练出来的读程序的基础,对初学者来说,这的确不容易理解啊,

特别是那djnz ,r1,d1 它的意思就是令r1寄存器实现c语言中的 r1--,连续减250次,然后执行下一句

,令r0--,r0减一次之后,就跳回d2:那句,给r1重新赋值250,再循环。总共执行250*250次。这个是搞懂了,但它为什么能延时啊,才知道以前自己学c语言从不理会程序执行的时间,单片机执行每个程序都要一定的时间, 250*250次,加起来的时间就有零点几秒了,人就可以打破视觉暂留,看到led的闪烁了。

        接下来学了个控制8个led灯的程序,从位操作指令变成字节操作指令,有之前一个led的铺垫,不难。

难的是再接下来的“led万能闪烁”,它实现了只修改数字,就可以改变led的闪烁状态。

从中学会了查表,单片机的指针,还有累加器的使用。

例如:mov dptr #tab 就把标号为tab的表的内存地址给了dptr指针,实现查找功能

再者 movc a,@a+dptr  是把原来a的数值加上dptr指针中的数值作为内存地址,去这个地址中的数据,再把这个数据的值赋给累加器a,可恶的是这个批令不可以把a改成任何一个寄存器,所以每次使用都要重新给a赋值再使用,这是单片机的缺陷吧。还要说一下调试中出现的错误,我把movc写成mov了,错,还有很容易忽略中间的“,”逗号。

       接下来是单个数码管的程序,很简单,作为过渡吧,了解到共阳极码,共阴极码这些东西,明白计算机真的是挺笨啊,只不过是控制了电路的通断而已,通过控制8个led管的亮与灭,来实现显示人类理解的数字(我在此不是否定人工智能,我是持人工智能总有一天超越人类的态度的。)

       接下来动态显示生日的程序有一定难度。做了这个程序,终于明白所谓的扫描是什么意思,计算机高速扫描,人类因为视觉暂留,看到一整幅图像。这个程序的原理是控制8个数码管(不是8个led管哦, 8个数码管=64个led灯管)因为51单片机最多也只有32个引脚,也就是可以控制32个电路,每个电路控制一个led灯的亮灭,所以要8个引脚才能控制1个数码管的数字显示情况,而64个led管足足比32个引脚多了一倍啊。在此我不得不感叹前辈的才智。这个程序只用16个引脚(电路)就控制了64个led的亮与灭。输出数据的8个引脚分别与每个数码管对应的被称为a,b,c,d,e,f,g,dp,的led灯相连,结果是各个数码管相同称号的led管并联起来,所以输出数据的电路一旦发出11110101之类的信号,就能控制8个数码管输出相同的数字了,但是这样就不能实现显示生日了啊,毕竟生日不是同一个数字组成的2222,2222,我要显示的是1991,0410。所以就用到另外8个引脚了,每个引脚与1个数码管相连,用于控制整个数码管的通断,所以我就可以实现数码管一个一个地输出数字了,当前8个引脚(数据总线)给8个数码管输出1这个数字时,我再用后8个引脚(控制总线)来控制第一个数码管亮,其余数码管灭,同理,熄灭第一个数码管,数据总线输出9,控制总线使第二个数码管亮,其余灭。如是逐个输出数字,当19910410这几个数字逐个逐个出现,刷新速度极快的时候,我们就可以看到不变的,整体的生日了。

       在这个程序中我参照了教材,做了一点创新,教材的程序控制通断是用位操作指令的,异常繁琐,我先用了一个查表的方式,后来用了跑马灯的 RL操作指令,简化得接近完美,哈哈

 

       还有个循环自加计数器的程序,这是目前为止最难的一个了。它包括初始化,主程序,自加子程序,显示子程序。这里主要有两个问题:一,每数码管是分立的,显示36这样的两位数不能直接告诉数码管显示36,查表的话会很复杂,而是要告诉它,第一个数码管显示3,第二个数码管显示6,这样人就能理解是36了,数码管无头脑,它不用这样理解。二,程序自加速度太快,我们需要数码管显示一个数字,然后要停留一段时间,人才能分辨出来,否则速度极快的时候,数码管只是显示88这两数字(每次显示数字不同,且刷新速度太快,视觉暂留,看起来16个数码管都一直亮着,所以看起来像88)。解决方法是自加一次后,两个数码管不刷新同一个两位数,这样看起来就像停顿一样了,这个刷新过程和显示生日的大同小异,先显示3,再显示6,循环一定次数,然后数据加一,显示37。

       这个程序中还学到了几样东西,count equ 30h 这个伪指令,意思是给地址为30h的内存空间取个名字叫count。还有div ab,意思是用a中的数除以b中的数,商存储在a中,余数存储在b中。另外,cjne这个指令

不能用内存空间中的数与另一个数比较,如只能先把count存放在寄存器r0中,再用cjne r0,#10这样比较,也可以用a来代替,但不能直接cjne count,#10。

 

       终于写到我今天学的内容了,写完这个明天就可以分开一篇一篇来记录,不那么长啦。

今天学的是按键处理。

    main:jnb p1.4,led0  ;如果p1.4低电平跳到led0处

          jnb p1.5,led7

          sjmp main

     led0:cpl p0.0

           sjmp main

      led7:cpl p0.7

           sjmp main

      学了个jnb,jb,简单指令,不值一提,要提的是我自己写程序时把led0,和led7中的sjmp main改成了ret

发现p0.0控制这个灯一直在亮,可知程序出错了,错在我是用jnb跳进led0的,而不是平时的call,没有用call而用了ret,就不知道是不是跳到060h这个初始化的指针地址了。所以一直在亮。

另一个问题是按键会产生波形数据,按键有时会失灵,这就是进入到了模电的知识吧,因为波形不是直接的1010,所以会出现失灵的现象,需要去抖动处理。明天我再编写这个去抖动的程序吧。

 

       写了这么长的一篇文章,内容不深不浅,不明不白,外行人看不懂,内行人不想看。或者这篇文章就只可当作我自己的记录吧,以后会逐渐改进我的写作啦!还会再加上我的程序代码文件和单片机实验现象。   

 

单片机读书笔记.docx 单片机读书笔记全文共9页,当前为第1页。单片机读书笔记全文共9页,当前为第1页。单片机的分类 单片机读书笔记全文共9页,当前为第1页。 单片机读书笔记全文共9页,当前为第1页。 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。 众多的单片机可以从不同角度进行分类。 按生产厂家分 1.INTEL公司的单片机(MCS-48系列单片机:MCS-48单片机是美国INTEL公司于1976年推出,它是现代单片机的雏形,包含了数字处理的全部功能,外接一定的附加外围芯片即构成完整的微型计算机;MCS-51系列:MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容 立即下载

相关推荐

10xGenomics Loupe Browser实战指南:从数据导入到细胞注释全流程解析

本文提供了10xGenomics Loupe Browser的实战指南,详细解析了从数据导入到细胞注释的全流程。作为一款强大的可视化工具,Loupe Browser能帮助研究者直观探索单细胞测序数据,通过交互式操作进行细胞选择、差异基因分析和细胞类型注释,是单细胞数据分析入门和结果验证的高效平台。

blue42的博客 453

单片机学习笔记——入门51单片机

单片机,英文Micro Controller Unit,简称MCU 。内部集成了中央处理器CPU、随机存储器ROM、只读存储器RAM、定时器/计算器、中断系统和IO口等一系列电脑的常用硬件功能 单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制 。单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用。 同时,学习使用单片机是了解计算机原理与结构

WWMMWWMM_的博客 3万+

从编解码芯片看Tesla T4的隐藏实力:双NVDEC如何实现70路1080P解码?

本文深入剖析了英伟达Tesla T4显卡的隐藏实力,重点解读其独特的双NVDEC硬件解码器设计如何突破性能瓶颈。通过分析Turing架构、对比HEVC/H.264解码差异,并结合驱动与SDK优化,揭示了实现高达70路1080P视频流并发解码的原理与实战配置,为云游戏、直播转码等高并发场景提供高效解决方案。

weixin_29209801的博客 484

郭天祥新概念51单片机(第一期读书笔记)

了解各端口以及电平特性。

weixin_51036112的博客 738

欧姆龙多PLC串行链接模式的应用

欧姆龙多PLC串行链接模式的应用 一、如何将两台CP1H进行串行PLC连接(PLC串行链接) 主机侧设定 从机侧设定 二、 如何实现编程通信 主机侧的【PC连接模式】为【全部】的时候 ① 主机会把自己的地址从3100开始,按照【链接字】设定的字数个数发送到每个从机的3100开始进行存储。 ② 从机会把自己的地址从31n0开始,按照主机侧参数【链接字】设定的字数个数发送到主机的31n0开始进行存储。 注:(n为从机的地址号,若从机号不连续,则该编号的地址将不被定义..

u014202847的博客 3081

最优控制 (Optimal Control) 算法详解及案例分析

最优控制是一种通过优化控制输入,使系统在满足约束条件的情况下达到最优性能的控制方法。其目标是最小化或最大化一个性能指标。

闲人编程的博客 2090

单片机原理及应用笔记:单片机的结构原理与项目实践

c51程序开发概述单片机的C语言采用c51编译器(简称C51)。由C51产生的目标代码短、运行速度高、所需存储空间小、符合C语言的ANS标准生成的代码遵循lntel目标文件格式,而且可与A51汇编语言目标代码混合使用。采用C51的优势:进行单片机应用系统的程序设计,编译能自动完成变量的存储单元的分配。C51编译器支持位数据类型,具体说明如下:(1)位变量的C51定义语法及语义。/*将dir_bit定义为位变量*//*将lock_bit定义为位变量*/

WL999655的博客 1163

【DaVinci Configurator专题】-6-将UDS&OBD诊断数据库文件CDD和PDX导入到CFG

CDD和ODX是两种诊断数据库文件。机器可读的诊断数据库其实就是将传统的Excel调查表等信息编辑成CDD或ODX文件。CDD是Vector私有的一种诊断数据库格式;ODX是国际标准的诊断数据交互格式。CANdelaStudio编辑CDD文件,以及也可以导出ODX文件;ODX Studio用于编辑ODX文件,诊断数据库的编辑其实就是诊断需求的定义。 下面以PDX为例,将其导入到DaVinci Configurator。 目录 1 打开DaVinci Configurator,导入PDX文件 2 解.

「汽车电子助手」的博客 6750

51单片机学习笔记-1

Keil-4:编写程序。STC-ISP:下载比特流文件到板子上,另外还有一些小工具(如串口助手、自动生成代码等)。注意:还需下载开发板驱动程序,否则电脑无法识别开发板。单片机(Micro Controller Unit, MCU) 内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能。单片机的任务 是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制。单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。

2202_75302447的博客 522

YOLO环境配置+项目启动全流程(Conda+PyCharm超详解)

YOLO(You Only Look Once)是一个基于深度学习的目标检测算法,广泛应用于智能识别领域。本篇保姆级教学将手把手教你如何从零开始运行一个YOLO项目,适合完全没有基础的新手。

一键难忘的博客 1537

Axure RP9.0 教程:左侧菜单列表导航 ( 点击父级菜单,子菜单自动收缩或展开)【响应式的菜单导航】

1. 设置目标原件时,选择切换,这样就可以实现,当原件展示时,点击自动隐藏,隐藏时自动显示; 2. 展开/收起原件(推动/拉动原件)设置为方向**向下**

专注于计算机研发知识和资讯分享 1376

[51单片机]51单片机学习笔记

51单片机学习笔记

zhangchenyang251的博客 930

第二节:Vben Admin 登录逻辑梳理和对接后端准备

第一节,我们已经配置了前端环境,运行起来了我们的Vben Admin的项目。本节内容,我们先熟悉下项目的目录和文件,然后开始准备对接后端程序路由在 src/router页面在 sr/views本节前端登录逻辑梳理完成了,后端只要在/api/login 接口编写返回逻辑,前后段就可以打通了,具体详情我们下一节介绍。

cuiwin的专栏 5084

51单片机学习笔记(更新中)

编译时要放行。

2301_82312663的博客 1422

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

51单片机学习笔记之点亮LED灯

51单片机点亮实验

Dg24682538000的博客 2827

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

51单片机_学习笔记

定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号每隔“一秒”,计数单元的数值就加以,当计数单元数值增加到“设定的闹钟提醒时候”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使得程序跳转到中断服务程序。注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的。注意: 中断的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的中断资源,例如中断源个数不同,中断优先级个数不同等等。

2502_90478897的博客 1368

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

51单片机编程学习笔记——管脚输入

一文中,我们了解了管脚和寄存器之间的关系。我们可以给寄存器的一些位设置值,然后控制管脚的电平,以达到给器件传输信号的目的。即我们可以通过器件影响寄存器的值,从而给单片机获取输入信息的机会。需要说明的是,电路图中给的K1和K2对应的管脚是错的。实际上,我购买的开发板上,K1对应P30,K2对应P31。在学习之前,我们需要知道P0~P3管脚在复位情况下的电平状态。基于这样的认知,我们可以通过判断P30~P31的位变量值是否为0,来得知对应按键是否被按下。图中4个按键的电路连接的都是P3系列的管脚。

方亮的专栏 1394

51单片机(STC89C52RC)系统性学习笔记

本文是关于51单片机学习的笔记,不包含红外模块的相关内容。

zicheng_G的博客 1万+

51单片机学习笔记-1简介及点灯

点灯、按键电灯

虎慕的博客 5896

51单片机学习笔记(1)

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。单片机也被称为单片微控器,属于一种集成式电路芯片。

xi_lingling的博客 2100

51单片机原理与应用开发学习笔记与题库:助你高效掌握单片机技术

51单片机原理与应用开发学习笔记与题库:助你高效掌握单片机技术 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今的电子技术领域,51单片机因其稳定性强、成本低的特性,成为许多电子爱好者和技术人员入门的首选。为此,《51单片机原理与应用开发》学习笔记与题库应运而生,这是一份专为帮助学习者快速掌握51单片机原理与应用而精心编写的资源。该学习笔记与题库由广东职业技术学院...

gitblog_06783的博客 283

单片机led闪烁代码_51单片机学习笔记

本人很笨,这里主要将原理图和代码罗列一下,普中板子。所有资料:https://pan.baidu.com/s/1qG_GYp6n4kJ2Sgxp48PCAA密码:nod2目录:第一节:LED模块1.LED原理图开发板上面LED的原理图如右图,LED的阳极串联一个电阻,然后连接到电源VCC,而LED的阴极连接到单片机的P2口,如果你想点亮一盏LED就对把单片机相对应的IO赋为低电平。LED电路图2....

weixin_39791349的博客 1万+

《51单片机原理与应用开发》学习笔记与题库

《51单片机原理与应用开发》学习笔记与题库 去发现同类优质开源项目:https://gitcode.com/ 资源简介: 本资源为广东职业技术学院欧浩源编写的《51单片机原理与应用开发》学习笔记与实训题库,旨在帮助学习者快速入门51单片机的原理与应用开发。内容全面,深入浅出,适合初学者及有一定基础的学习者使用。 内容概述: **学习笔记:**详细记录了51单片机的硬件结构、指令系统、编程方法及实...

gitblog_06752的博客 313

AutoLeaders控制组——51单片机学习笔记(二)

模块化编程是什么?有什么好处?传统方式编程:所有的函数放在main.c里,当使用模块较多时,文件内的代码十分杂乱,不利于代码的组织和管理,也很影响编程者的思路。模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用的函数声明,其他.c文件想使用其中代码时,只需要include“xxx.h”文件即可。使用模块化编程可以极大提高代码的可阅读性、可维护性、可移植性。为什么我们可以选择使用模块化代码?

Lesley0608的博客 1498
下一篇: 51单片机学习笔记(二)
0木木0
博客等级 码龄17年 458粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值