(二)单片机程序语言学习
单片机主要是汇编,当然,利用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,不需要上拉电阻就能读取外部存储。
(二)单片机程序语言学习相关推荐
- 南师大632c语言程序设计,单片机c语言学习心得632.docx
可编辑文档 PAGE 页码页码/NUMPAGES 总页数总页数 单片机c语言学习心得 (一) 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧..不过有些朋友可能只听说他叫单片机,他的全称是什 ...
- 单片机c语言屏蔽第四位,单片机C语言学习
单片机C语言学习(推荐*精简实用) 关键词: 单片机 C语言 单片机C语言之一_______________________________预处理 一>宏定义: 1.不带参数: #define ...
- 51单片机c语言学习感想,51单片机实训心得体会
[www.hywsbj.com--心得体会] 单片机实训有哪些心得体会呢?下面是小编为大家收集的资料,欢迎阅读哦. 51单片机实训心得体会 通过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥 ...
- 单片机c语言学习心得,单片机实习心得3篇
单片机实习心得3篇 单片机实习心得篇1 最近自己对单片机特别的感兴趣,因为看到它能控制电机的转动,自己觉得很神奇.就想弄清楚它到底是怎么做到的? 我看到书上讲:单片机可以用两种语言编写,一种是c语言, ...
- 单片机C语言学习(菜鸟入门)
(一) 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧.不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚,更不用说他的英文全称和简称了.单片机是一块在集成电路芯片上集成了一台有 ...
- 51单片机c语言学习感想,学习51单片机心得体会
在这里给大家分享一下学习51单片机心得体会: 1.我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础. 2.对51单片机的操作本质上就是对寄存器的操作,对其他单片机也是如此.库只是一个 ...
- (二)易语言学习笔记之变量与常量
1 数据类型 (1)易语言数据类型 (2)数据类型应用 数据类型可以用来描述不同变量的类型或组件属性的类型. a 定义变量的数据类型 在声明一个变量时要定义其具体的数据类型,只需要在新建的变量的类型栏 ...
- 单片机C语言学习之移位相减16位除法
低端单片机的需求,有写厂家的编译器不行,不能处理乘除法运算,得像汇编一样,进行移位相减的方法处理,51单片机是不需要的,编译器会处理. #include<stdio.h>unsigned ...
- 从51能不学编程只学c语言,51单片机C语言学习笔记8:单片机C51编程规范
为了普及源圭表的质地和可庇护性,从而最终普及软件产物临蓐力,特编写此表率. 本程序规则了圭表打算职员举行圭表打算时务必遵命的表率.本表率要紧针对C51编程讲话和keil编译器而言,包罗排版.诠释.定名 ...
最新文章
- 如何高效排查系统故障?一分钱引发的系统设计“踩坑”案例
- atitit.细节决定成败的适合情形与缺点
- windows安装mysql 5.7
- 嵌入式Linux系统编程学习之三十线程的同步
- UIView转换为UIImage
- 写给Android开发者的混淆使用手册
- 为提升 DCP 传输效率,阿里工程师竟然这样做!
- python excel处理模块_Python(00):openpyxl模块处理Excel文件
- 前端开源项目周报0109
- BLUE引擎M2运行几天后就不可以施放合击技能的方法
- 带你理解 Hanoi 汉诺塔递归算法
- 看我如何用Python来分析《斗破苍穹》
- [数据结构与算法 DSA 林轩田] 1. Introduction to Data Structure and Algorithm
- 概率论:3.3期望与方差
- 判断两个数运算是否越界
- 宗地权属图生成的解决方案设计
- java中unknown source,java - 对于 提示信息为 unknown source的解决办法: jdk 替换jre, 编译时加上debug=true...
- 微分,变分,差分的确切定义与区别
- CTF—图片隐写+数据隐写
- 个性化推荐系统设计(2.2)——Few-shot Learning用于冷启动的探索