单片机主要是汇编,当然,利用keil可以将c\c++编译成hex以供单片机程序使用。

对于C语言的半架子,懂得还只是语法、指针、变量这种,结构体深入进去都不懂,更别说地址了,而单片机的编程全部的全部都是围绕着地址展开的,这就是硬件和软件的区别吧。

本篇包括简单单片机程序代码解析。

一、标准51单片机头文件解析

对于所有学习51单片机的人而言,在编程之前一定会有这样一个包需要引入:reg52.h

这是什么呢?我们把源代码完整的展示出来

/*--------------------------------------------------------------------------
REG52.HHeader file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/#ifndef __REG52_H__
#define __REG52_H__/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;
sfr TCON  = 0x88;
sfr TMOD  = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IE    = 0xA8;
sfr IP    = 0xB8;
sfr SCON  = 0x98;
sfr SBUF  = 0x99;/*  8052 Extensions  */
sfr T2CON  = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2    = 0xCC;
sfr TH2    = 0xCD;/*  BIT Registers  */
/*  PSW  */
sbit CY    = PSW^7;
sbit AC    = PSW^6;
sbit F0    = PSW^5;
sbit RS1   = PSW^4;
sbit RS0   = PSW^3;
sbit OV    = PSW^2;
sbit P     = PSW^0; //8052 only/*  TCON  */
sbit TF1   = TCON^7;
sbit TR1   = TCON^6;
sbit TF0   = TCON^5;
sbit TR0   = TCON^4;
sbit IE1   = TCON^3;
sbit IT1   = TCON^2;
sbit IE0   = TCON^1;
sbit IT0   = TCON^0;/*  IE  */
sbit EA    = IE^7;
sbit ET2   = IE^5; //8052 only
sbit ES    = IE^4;
sbit ET1   = IE^3;
sbit EX1   = IE^2;
sbit ET0   = IE^1;
sbit EX0   = IE^0;/*  IP  */
sbit PT2   = IP^5;
sbit PS    = IP^4;
sbit PT1   = IP^3;
sbit PX1   = IP^2;
sbit PT0   = IP^1;
sbit PX0   = IP^0;/*  P3  */
sbit RD    = P3^7;
sbit WR    = P3^6;
sbit T1    = P3^5;
sbit T0    = P3^4;
sbit INT1  = P3^3;
sbit INT0  = P3^2;
sbit TXD   = P3^1;
sbit RXD   = P3^0;/*  SCON  */
sbit SM0   = SCON^7;
sbit SM1   = SCON^6;
sbit SM2   = SCON^5;
sbit REN   = SCON^4;
sbit TB8   = SCON^3;
sbit RB8   = SCON^2;
sbit TI    = SCON^1;
sbit RI    = SCON^0;/*  P1  */
sbit T2EX  = P1^1; // 8052 only
sbit T2    = P1^0; // 8052 only/*  T2CON  */
sbit TF2    = T2CON^7;
sbit EXF2   = T2CON^6;
sbit RCLK   = T2CON^5;
sbit TCLK   = T2CON^4;
sbit EXEN2  = T2CON^3;
sbit TR2    = T2CON^2;
sbit C_T2   = T2CON^1;
sbit CP_RL2 = T2CON^0;#endif

用最简单的语言描述这个头文件:赋值、地址。

这个头文件充斥着地址和赋值。其中,单片机的存储器事先就有地址的,而这些赋值做的是一件事,使得这些地址三位一体。三位一体分别时:芯片的引脚、芯片中寄存器的地址、代码变量这三个东西合成一个东西,比如0x80这个地址就是P0变量,也代表着单片机的那个P0引脚。

那么这个头文件在开始的时候就把地址处理得清清楚楚明明白白,那个P0^1代表着P0.1的引脚。

明白了这些地址对应哪个引脚,对应哪个变量之后我们需要知道这些变量是干什么的,接下来一一介绍。

0. 首先的首先,必须先介绍sfr这个东西,如果不弄明白这个,完全不会理解为什么要给一个参数赋值十六进制。

sfr,全称:special function register特殊功能寄存器。从名字可以知道,是一个RAM。我把他理解为是一个类型,用来描述寄存器的类型。不像int,描述的是整形的数,像P0这个是一个IO引脚,不是数,所以需要用一个描述这种东西的类型。

1. 从VCC和GOUND开始,这是电源接口,没问题。

2. 然后是P系列接口,就是广义上的IO接口input\output。这个系列的引脚有点复杂,有什么上拉电阻之类的没听过的词汇。

首先从代码里看,sfr P0 = 0x80;

这代表现在P0的地址就是0x80,而P0下一个地址是0x90,这之间差了16位。首先P0有8个引脚分别时P0.1\0.2\0.3\0.4......那就意味着P0的每一个引脚有两个位地址。至于为什么分配两个位地址给每一个引脚,还没弄清楚,暂时理解为留给输入一个,输出一个吧。

地址的事就是这样,P0是一个双向的IO口,都说P0是一个普通的IO,需要加上拉电阻才能访问外部储存器。上拉电阻的目的是加大电阻从而加大电压。

P1--P7结构都是差不多的,不像P0,不需要上拉电阻就能读取外部存储。

(二)单片机程序语言学习相关推荐

  1. 南师大632c语言程序设计,单片机c语言学习心得632.docx

    可编辑文档 PAGE 页码页码/NUMPAGES 总页数总页数 单片机c语言学习心得 (一) 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧..不过有些朋友可能只听说他叫单片机,他的全称是什 ...

  2. 单片机c语言屏蔽第四位,单片机C语言学习

    单片机C语言学习(推荐*精简实用) 关键词: 单片机 C语言 单片机C语言之一_______________________________预处理 一>宏定义: 1.不带参数: #define ...

  3. 51单片机c语言学习感想,51单片机实训心得体会

    [www.hywsbj.com--心得体会] 单片机实训有哪些心得体会呢?下面是小编为大家收集的资料,欢迎阅读哦. 51单片机实训心得体会 通过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥 ...

  4. 单片机c语言学习心得,单片机实习心得3篇

    单片机实习心得3篇 单片机实习心得篇1 最近自己对单片机特别的感兴趣,因为看到它能控制电机的转动,自己觉得很神奇.就想弄清楚它到底是怎么做到的? 我看到书上讲:单片机可以用两种语言编写,一种是c语言, ...

  5. 单片机C语言学习(菜鸟入门)

    (一) 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧.不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚,更不用说他的英文全称和简称了.单片机是一块在集成电路芯片上集成了一台有 ...

  6. 51单片机c语言学习感想,学习51单片机心得体会

    在这里给大家分享一下学习51单片机心得体会: 1.我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础. 2.对51单片机的操作本质上就是对寄存器的操作,对其他单片机也是如此.库只是一个 ...

  7. (二)易语言学习笔记之变量与常量

    1 数据类型 (1)易语言数据类型 (2)数据类型应用 数据类型可以用来描述不同变量的类型或组件属性的类型. a 定义变量的数据类型 在声明一个变量时要定义其具体的数据类型,只需要在新建的变量的类型栏 ...

  8. 单片机C语言学习之移位相减16位除法

    低端单片机的需求,有写厂家的编译器不行,不能处理乘除法运算,得像汇编一样,进行移位相减的方法处理,51单片机是不需要的,编译器会处理. #include<stdio.h>unsigned ...

  9. 从51能不学编程只学c语言,51单片机C语言学习笔记8:单片机C51编程规范

    为了普及源圭表的质地和可庇护性,从而最终普及软件产物临蓐力,特编写此表率. 本程序规则了圭表打算职员举行圭表打算时务必遵命的表率.本表率要紧针对C51编程讲话和keil编译器而言,包罗排版.诠释.定名 ...

最新文章

  1. 如何高效排查系统故障?一分钱引发的系统设计“踩坑”案例
  2. atitit.细节决定成败的适合情形与缺点
  3. windows安装mysql 5.7
  4. 嵌入式Linux系统编程学习之三十线程的同步
  5. UIView转换为UIImage
  6. 写给Android开发者的混淆使用手册
  7. 为提升 DCP 传输效率,阿里工程师竟然这样做!
  8. python excel处理模块_Python(00):openpyxl模块处理Excel文件
  9. 前端开源项目周报0109
  10. BLUE引擎M2运行几天后就不可以施放合击技能的方法
  11. 带你理解 Hanoi 汉诺塔递归算法
  12. 看我如何用Python来分析《斗破苍穹》
  13. [数据结构与算法 DSA 林轩田] 1. Introduction to Data Structure and Algorithm
  14. 概率论:3.3期望与方差
  15. 判断两个数运算是否越界
  16. 宗地权属图生成的解决方案设计
  17. java中unknown source,java - 对于 提示信息为 unknown source的解决办法: jdk 替换jre, 编译时加上debug=true...
  18. 微分,变分,差分的确切定义与区别
  19. CTF—图片隐写+数据隐写
  20. 个性化推荐系统设计(2.2)——Few-shot Learning用于冷启动的探索

热门文章

  1. 虚幻4 虚拟漫游场景 制作过程
  2. 重聚京都 找不到服务器,阴阳师重聚京都活动怎样玩 重聚京都活动玩法攻略
  3. windows流氓软件卸载
  4. jpg和png的区别
  5. cydia java_Cydia Substrate 使用
  6. 【工程/物理光学(三)——光的干涉技术】
  7. 改编的一个滑动门代码
  8. java配置文件properties_关于Java配置文件properties的学习
  9. 抽丝剥茧,C#面向对象快速上手
  10. WML语言基础(WAP建站)一