51单片机雾化片自动扫频程序_单片机简介

单片机简介

201083d4d83cef488fce13440265be08.png

数字电路简介

在一个控制系统中, 单片机是电路的一部分, 单片机中的程序是针对其所在的电路编写

的。因此,要对单片机编程并实现一定的功能,必须了解整个系统的电路图。单片机编程是

针对某个特定的电路进行的单片机编程是针对某个特定的电路进行的, 这一点和普通的编程不一样。 编程时很可能要经常参照电路图。与单片机直接相关的电路大都是数字电路。 数字电路各部分的功能十分明确, 因此相对比较容易掌握。

简单地说,数字电路就是只有“0”和“1”两种信号的电路。判别信号究竟是“0”还

是“1”是通过电压的大小(常称作“电平” )来判断的。不同的数字器件的电平判断标准是

不一样的。常用的数字器件以高电平(超过某一阈值的电平)作为逻辑“1” ,以低电平(低

于某一阈值的电平)作为逻辑“0” 。其中高电平阈值大于低电平阈值,处于高电平阈值与低

电平阈值之间的电压是无效的。 高电平阈值与低电平阈值的具体值与数字器件的供电电压有

关,如 AT89S51 单片机的高电平阈值为(0.2Vcc+0.9)V,低电平阈值为(0.2Vcc-0.1)V,

其中 Vcc 为单片机的供电电压。 早年常用的数字器件的额定供电电压为 5V, 现在 3.3V、 1.8V

等电压的数字器件已经大量使用了。在 Easy 51 Kit Pro 中,我们仍使用 5V 供电的单片机。

另外,还有一种 RS-232 电平标准,以-12V~-5V 作为逻辑“1” ,以 5V~12V 作为逻辑“0” 。

电脑上的串口都符合 RS-232 标准。还有一个“地”的概念。在电路中“地”并不是通常意义中的地,而是指电路中的一点,这一点的电压被人为地规定为 0V。

MCS-51 单片机简介

57956c79226db1dd74794abd26f983ae.png

目前生产单片机产品的公司非常多, 当中较有影响力的有 intel 公司推出的 MCS-51 系

列等。很多公司的产品都是与 MCS-51 架构兼容(MCS-51 compatible)的。本资料中采用的

atmel 公司的 AT89C51/52 或 AT89S51/52 单片机,就是兼容 MCS-51 架构的单片机。

Atmel 公司的 AT89C51( 以后简称“C51”)、AT89C52( 以后简称“C52”)、AT89C2051

( 以后简称“C2051”)以及 C51、C52 的换代产品 AT89S51( 以后简称“S51”)、AT89S52

( 以后简称“S52”)容易上手、价格低廉(不超过 10 元/片)、资料丰富,是初学者入门

时广泛采用的单片机。

C51 拥有 4096 字节(1 字节=8 位)的片内程序存储器、128 字节的 RAM、32 个 I/O 口、

两个定时器、6 个中断源、一个串口等。C52、C2051 的资源与 C51 差别不大,其中 C52 的片

内程序存储器为 8192 字节、RAM 为 256 节、定时器有 3 个,其它与 C51 一样; C2051 的片

内程序存储器为 2048 字节、I/O 口只有 15 个,另比 C51 多了一个模拟比较器,工作电压范

围比较宽,为 2.7V~6V(C51/52、S51/52 为 4.5~5.5V),其它与 C51 一样。

I/O、 定时器、 中断、 串口等资源的用法在后面有详细介绍。 这里只对程序存储器与 RAM

作一下说明。单片机程序代码经过编译(C 程序)或汇编(汇编程序)后,要把编译或汇编

得到的代码文件(一般来说编译得到 hex 格式文件、汇编得到 bin 格式文件)烧写到单片机

内,存放这个程序的地方就是程序存储器。显而易见,单片机的程序存储器越大,我们就可

以把越大、越复杂的程序放进去。如果我们编写的程序太大,那么单片机的程序存储器就有

可能会放不下这个程序。这时,解决办法就只有精简代码、外接程序存储器(前提是所用的

单片机支持使用外部程序存储器)或采用程序存储器容量更大的单片机。RAM 是单片机程序

运行时存放变量的地方,常量也可以放在 RAM 中。C51 中的 RAM 大小为 128 字节,这就是说

单片机程序中最多只能同时存在 128 个 unsigned char 型的变量或 64 个 unsigned int 型的

变量(在 Keil 环境中,int 型变量的长度为 16 位,这与 VC 的 32 位不一样)或者是相应的

中国科学技术大学业余无线电协会 各种不同类型变量的组合。 可以看出, 单片机程序所允许的规模比 Windows 或其它操作系统环境下的程序要小得多。编写单片机程序时一定要注意不要滥用资源。

S51 与 S52 分别是 C51、C52 的换代产品。从用户的角度看,S5x 单片机比相对应的 C5x

单片机多了看门狗与在线编程 (ISP) 功能, 另外最高运行速度有所增加 (C5x 最高支持 24MHz

的时钟频率, 而 S5x 最高支持 33MHz 的时钟频率, 但市面上比较容易买到的 S5x 单片机仍只

最高支持 24MHz 的时钟频率)。看门狗的使用在后面会有详细介绍,我们来看看单片机的在线编程(ISP)功能。要把程序烧写到 AT89C 系列单片机中, 最常用的做法是把单片机插入专用的编程器中, 通过编程器把程序烧到单片机里。 这样做的麻烦之处是在调试程序时, 编程者对程序作出的每次修改,都要把单片机从电路中拔出来,插到编程器,烧好后又要把单片机重新插回电路板。可以想

象,这种工作是吃力不讨好的。利用 S5x 单片机的 ISP 功能,我们就无须来回插拔单片机,

只要在电路中把单片机的 ISP 编程引脚接出来, 并且这几个引脚所接的外围电路对 ISP 没有

影响,就可以用 ISP 编程器对单片机进行烧写了。另外,支持 AT89C 系列单片机的编程器成

本要比 ISP 下载线高最少几倍。一根并口 ISP 下载线的成本仅几元钱。

除了 S 系列、C 系列外,atmel 公司的 MCS-51 兼容产品也有其它系列,它们的主要区

别在于供作电压范围,在此就不作介绍了。

值得注意的是,一片单片机可以反复擦写的次数是有限的,atmel 的 C 系列、S 系列单

片机的声称可重复擦写次数为 1000 次。

下面以 S52 为例,对其引脚功能一一作出说明。C51、C52 以及 S51 的引脚功能与 S52

大致相同,如有遇到不同的地方会用 粗斜体字 特别说明。

87a45c933f932424fa72d02cc1e6abd3.png

单片机程序指令的执行是以振荡器的振荡来驱动的。在MCS-51架构中,每12个振荡器

周期组成一个指令周期(或称机器周期)。单片机执行指令的时间是以指令周期为单位的。

不同指令的执行时间可能是不同的,一条指令的执行时间最短为一个指令周期。

在MCS-51架构中,每12个振荡器

周期组成一个指令周期(或称机器周期)。单片机执行指令的时间是以指令周期为单位的。

不同指令的执行时间可能是不同的,一条指令的执行时间最短为一个指令周期。因此,单

片机所接的振荡器频率越高,它执行指令的速度就越快。

型号同样为AT89S52的芯片,在其后面还有频率编号,有24MHz和33MHz等可选。读者在

购买和选用时要注意了。 如AT89S52 24PC就是最高振荡频率为24MHz,40P6封装的普通商用芯

片。单片机芯片后缀的详细含义可见相应单片机数据手册的Ordering Information。

复位 RST 9

77d8ca1adaa34eacce3c6f6f6212c925.png

复位

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将

使单片机复位,只要这个引脚保持高电平,单片机便一直处于复位状态。复位后P0~P3口均

置1,引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位引脚由高电平

变为低电平时,芯片从ROM的00H处开始运行程序。复位操作不会对内部RAM有所影响。常用

的复位电路如图2.4所示。当单片机上电时,由于电容的作用,RST引脚会处于短暂的高电平

状态,直到电容充电到一定程度时,RST引脚的电平会被8.2K的电阻拉低,单片机开始运行

程序。图中的按键为手动复位按键,当按下复位按键后,RST引脚会被1K的电阻上拉至高电

平, 单片机复位, 按键松开后, RST恢复低电平, 单片机重新从程序存储器的00H处运行程序。

手动复位按键在单片机的最小系统中并不是必须的,但对单片机的复位控制会方便些。

db5f0f892b5bc837269d464d5a624b43.png

常用的复位电路

输入输出引脚

(1)P0端口[P0.0~P0.7] P0是一个8位漏极开路型双向I/O端口, 端口置1 (对端口写1)

时作高阻抗输入端端口置1 (对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。 P0端口要外接上拉电阻。

(2)P1端口[P1.0~P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱

动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存

储器编程时,接收低8位地址信息。除此之外P1端口还用于一些专门功能,

3)P2端口[P2.0~P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱

动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存

储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口

送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

(4)P3端口[P3.0~P3.7] P2是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱

动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存

储器编程时,接控制信息。除此之外P3端口还用于一些专门功能,

其它的控制或复用引脚

(1)ALE/-PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的

低位字节。 即使不访问外部存储器, ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频

率的1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚

用于输入编程脉冲PROG。

(2)PSEN 29 该引脚是外部程序存储器的选通信号输出端。 当S52由外部程序存储器取

指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会

有脉冲输出。

(3)-EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。

要使S52只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。当使

用内部的程序存储器时,此引脚应与Vcc相连。当使用内部的程序存储器时,此引脚应与Vcc相连。对Flash存储器编程时,用于施加Vpp编程电压。

C2051 的引脚功能与 C51 相仿,在此不另外介绍了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT公司老板落水,各部门员工怎么救??

戳蓝字“CSDN云计算”关注我们哦!公司高层公司副总A:咱们开个会研究一下这个事情怎么处理。公司副总B:如果老板没有救成功,下任是谁呢?会不会影响公司的上市?公司副总C:我认为咱们开会应该讨论两…

使用 MaxCompute(原ODPS) java sdk 运行安全相关命令

摘要: 使用 odps console 的同学,可能都使用过 odps 安全相关的命令。 转自zhenhong 使用 MaxCompute console 的同学,可能都使用过 odps 安全相关的命令。官方文档上有详细的 odps 安全指南,并给出了安全相关命令列表。 简而言之…

苹果笔记本能不能用python_“苹”除了苹果还能组哪些词?苹组词,释义及造句汇总!...

“苹”字组词,很多人第一反应就是苹果。那么除了苹果,苹还能组哪些词?苹组词都有哪些?下面,浙江秦学教育小编为大家带来苹组词,释义及造句汇总!来更新我们的组词大全,大家一定要多积累&#xff…

历史回顾——NLP问题解决方案的演变史

摘要: 回顾NLP问题的解决方案,探寻当下最流行的NLP技术,激发NLP问题新的解决方案!NLP-深度学习时代之前:在深度学习来临之前的日子里,在自然语言处理算法(NLP)领域出乎意料地有许多相…

关于signed和unsigned进行整形提升所出现的问题

看如下代码: int main() {char a -1;signed char b -1;unsigned char c -1;printf("a%d,b%d,c%d", a, b, c);return 0; }输出结果如下图所示 为什么会出现这种结果呢,现在我来分析一下 内存中存储这些变量都是以补码的方式进行存储&#x…

flowable BPMN的组件汉化

1.背景: 现在flowable流程设计器已经部分做了汉化,但是bpmn的组件还是没有汉化的,这样对我们中国 人来说就不是很方便。 2.效果:如何实现这一效果呢? 3.实现 3.1. stencilset_bpmn.json拷贝这个json文件到我们的资源…

华为确认与三家EDA公司停止合作;开源安卓恶意软件窃取用户隐私信息;三星高通回应7纳米EUV工艺问题……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 速腾聚创与英国 Aidrivers达…

MaxCompute Console 实用小命令

摘要: MaxCompute Console 可以从 这里 下载。在阿里云官网可以查看 帮助文档。 这里跟大家分享一些 MaxCompute Console 中实用的小命令。 MaxCompute Console 可以从 这里 下载。在阿里云官网可以查看 帮助文档。 这里跟大家分享一些 MaxCompute Console 中实用的…

一个form 如何做两次提交_如何做一个优秀的家长

如何做一个优秀的家长文|潍坊坊子崇文中学父母对待孩子无外乎三种情况:一是事事管、时时管,做了很多事,效果却不好;二是什么都不管,什么都不做,放任自流,不闻不问,结果更不好&#x…

动态执行shell脚本

文章目录一、linux动态执行指定脚本二、需求思路分析①我要做什么?②先手动执行一遍流程③ 把执行命令记录下来三、动态执行脚本①手动制作脚本②脚本升级③ 脚本截图一、linux动态执行指定脚本 脚本目录 /app/CodeQualityScan/gblfy_cx/脚本名 sonar-scanner.sh用…

关于机器学习,你需要知道的三件事!

摘要: MATLAB开发运营团队深度解析何为机器学习,什么时候使用机器学习,如何选择机器学习算法,MATLAB到底能为机器学习提供怎样的便利?机器学习是一种数据分析技术,让计算机执行人和动物与生俱来的活动&…

京东云的区块链“经”

戳蓝字“CSDN云计算”关注我们哦!就在不久前,京东云在北京国家会议中心召开“区块链京东云 大有可为”战略合作媒体沟通会。会上,京东云与京东数科宣布了在区块链技术服务领域深度合作,重磅发布了智臻链“云”建设规划&#xff0c…

MaxCompute Tunnel SDK数据上传利器——BufferedWriter使用指南

摘要: MaxCompute 的数据上传接口(Tunnel)定义了数据 block 的概念:一个 block 对应一个 http request,多个 block 的上传可以并发而且是原子的,一次同步请求要么成功要么失败,不会污染其他的 b…

库函数strlen的模拟实现

1、对于strlen这个库函数来说&#xff0c;主要就是求字符串的长度的&#xff0c;无论何时&#xff0c;只要遇到‘\0’,求得的长度都会戛然而止&#xff0c;可以看一下例子 #include<stdio.h> #include<string.h> int main(){char* str1[]"abcdef";char*…

MaxCompute 中的Code Generation技术简介

摘要&#xff1a; 前言 在《数据库系统中的Code Generation技术介绍》中&#xff0c;我们简单介绍了一下Code Generation技术及其在大规模OLAP系统&#xff0c;特别是大规模分布式OLAP系统中的重要性。MaxCompute采用了Code Generation技术来提高计算效率。在MaxCompute 前言 …

java调用python_Python教程:17个冷门但实用的小技巧

Python是机器学习的主流语言&#xff0c;没有之一。今年5月&#xff0c;它首次在PYPL排行榜上超越JAVA&#xff0c;成为全球第一大编程语言。而一个月后&#xff0c;Stack Overflow也分享了最新的编程语言浏览量统计数字&#xff0c;结果显示&#xff0c;Python的月活历史性地超…

Hadoop精华问答 | NameNode的工作特点

我们很荣幸能够见证Hadoop十年从无到有&#xff0c;再到称王。感动于技术的日新月异时&#xff0c;让我们再来看看关于Hadoop的精华问答。1Q&#xff1a;NameNode的工作特点A&#xff1a;NameNode始终在内存中保存metedata&#xff0c;用于处理“读请求”&#xff0c;到有“写请…

五个非常实用的自然语言处理资源

摘要&#xff1a; 正在学习NLP&#xff0c;手中没有资源&#xff1f;快来看看这些免费的NLP学习资源吧&#xff01;如果你对自然语言处理方面的资源感兴趣&#xff0c;请仔细阅读本篇文章。运行数据科学POC的7个步骤网上有很多依靠深度学习方法的NLP资源&#xff0c;有一些资源…

'umi' 不是内部或外部命令,也不是可运行的程序 或批处理文件或umi: command not found

1.#首先&#xff0c;需要安装Node.js &#xff08;一路下一步安装&#xff09;&#xff0c;并确保 node 版本是 8.10 或以上。&#xff08;mac 下推荐使用 nvm 来管理 node 版本&#xff09; #安装完成后&#xff0c;通过node -v 命令查看其版本号 node -v2.推荐使用 yarn 管…

库函数strcpy函数的实现

strcpy指的是字符串的拷贝&#xff0c;就是把源字符串拷贝到目标空间里面 1、源字符串的拷贝是是以‘\0’结尾的&#xff0c;同时会将字符串中的’\0’拷贝过去 #include<stdio.h> int main(){char arr1[20]"xxxxxxxxxxxxx";char arr2"hello world"…