单片机程 MCS-51系列) 第四课单片机的内部结构(二) 上一节课我们讲了半导体存储器ROM和RAM的内部结构,大家是否觉得有些枯燥了,这一课让我 们先来做一个实验 LED灯闪烁的实验程序 还记得第二课中的实验吗?这个实验在实际应用中太没有意义了,接下来我们要让LED1不断的 闪烁,就象高楼上或者大海中用的航标灯。怎么才能让LED不断的闪烁呢?实际上就是让它亮几秒, 再灭几秒,也就是让P1.0交替地输出高电平或低电平,怎样来实现这个功能,按照前面所学的知识 我们写出下面的程序:CLRP1.0; SETB P1.0:编译后下载到单片机 结果不行,为什么?这里有两个问题:首先计算机执行指令的速度很快,执行完第1条指令后LED1 是灭了,但在极短的时间内又去执行第2条指令,LED1又亮了,我们根本无法看到灯曾经灭过;第二 个问题是当执行完第2条指令后,不会再去执行第1条指令了,因为单片机执行指令的过程是一条一条 地顺序执行的 如何解决这两个问题呢?我们可以作如下的设想:第一,执行完第1条指令后让单片机延时一段 时间(几秒或零点几秒),然后再去执行第2条指令,这样就可以看到LED曾经灭过了;第二,让单片 机执行完全部指令后再返回去执行第1条指令,如此不断的循环就可以达到我们的要求了 实验程序如下 主程序 MAIN: SETB PL. 0 LCALL DELAY:(2) CLR P1. 0 (3) LCALL DELAY :(4) L JMP MAIN 子程序 DELAY: MOV R7,#250 6 D1:MOVR6,#250 (7) D2: DJNZ R6, D2:(8) DJNZ R7, DI (9) RET (10) END (11) 还记得软件的使用方法吗?调试,写入源代码,圖译,[報到单片机,看看是不是我们想要的 结果… 在分析这段程序之前,先来说明几个标点符号的意义:1.分号在这里起一个分隔符的作用,表示 这条指令到此为止:2.括号内的数字在这里是为了解释程序用的,实际的编译过程中是没有意义的,也 就是说没有也是一样的,只是为了程序的可读性更强,我们一般会在分号的后面加上程序的注释文字(后 面我们会用到):3.特别◎:程序中的标点符号只能在英文状态下输入,当使用中文输入时,必须切换 到半角状态,不然编译软件会出错 接下来我们分析一下这段程序:按照我们的要求,第1条,让灯灭,第2条应该是延时,第3条 是让灯亮,第4条和第2条一样也应该是延时,第5条应当返回去执行第1条指令。看一下上面的程序 第1条我们己经懂了,是让LED1灭,第2条和第4条我们等一下讨论,第5条是 L JMP MAIN,LJMP 是一条指令,意思是转移,转移到什么地方去呢?看一下LJMP后面跟着什么,是MAIN,什么地方有MAIN, 在第1条指令的开头就是MAIN,所以第5条指令的意思就是跳转到MAIN(即第1条指令处继续执行), 如此一来,就不断地重复执行这些指令。那么MAIN又是什么意思呢?它实际上是我们为这段程序起的 单片机之友QQ:280919249
单片机教程 (MCS-51 系列) 14 第四课 单片机的内部结构(二) 上一节课我们讲了半导体存储器 ROM 和 RAM 的内部结构,大家是否觉得有些枯燥了,这一课让我 们先来做一个实验: 一.LED 灯闪烁的实验程序 还记得第二课中的实验吗?这个实验在实际应用中太没有意义了,接下来我们要让 LED1 不断的 闪烁,就象高楼上或者大海中用的航标灯。怎么才能让 LED1 不断的闪烁呢?实际上就是让它亮几秒, 再灭几秒,也就是让 P1.0 交替地输出高电平或低电平,怎样来实现这个功能,按照前面所学的知识, 我们写出下面的程序:CLR P1.0;SETB P1.0;编译后下载到单片机…… 结果不行,为什么?这里有两个问题:首先计算机执行指令的速度很快,执行完第 1 条指令后 LED1 是灭了,但在极短的时间内又去执行第 2 条指令,LED1 又亮了,我们根本无法看到灯曾经灭过;第二 个问题是当执行完第 2 条指令后,不会再去执行第 1 条指令了,因为单片机执行指令的过程是一条一条 地顺序执行的。 如何解决这两个问题呢?我们可以作如下的设想:第一,执行完第 1 条指令后让单片机延时一段 时间(几秒或零点几秒),然后再去执行第 2 条指令,这样就可以看到 LED1 曾经灭过了;第二,让单片 机执行完全部指令后再返回去执行第 1 条指令,如此不断的循环就可以达到我们的要求了。 实验程序如下: 主程序 MAIN:SETB P1.0 ;(1) LCALL DELAY ;(2) CLR P1.0 ;(3) LCALL DELAY ;(4) LJMP MAIN ;(5) 子程序 DELAY:MOV R7,#250 ;(6) D1:MOV R6,#250 ;(7) D2:DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) END .(11) 还记得软件的使用方法吗?调试,写入源代码,编译,下载到单片机,看看是不是我们想要的 结果…… 在分析这段程序之前,先来说明几个标点符号的意义:1.分号在这里起一个分隔符的作用,表示 这条指令到此为止;2.括号内的数字在这里是为了解释程序用的,实际的编译过程中是没有意义的,也 就是说没有也是一样的,只是为了程序的可读性更强,我们一般会在分号的后面加上程序的注释文字(后 面我们会用到);3.特别☺:程序中的标点符号只能在英文状态下输入,当使用中文输入时,必须切换 到半角状态,不然编译软件会出错。 接下来我们分析一下这段程序:按照我们的要求,第 1 条,让灯灭,第 2 条应该是延时,第 3 条 是让灯亮,第 4 条和第 2 条一样也应该是延时,第 5 条应当返回去执行第 1 条指令。看一下上面的程序, 第 1 条我们已经懂了,是让 LED1 灭,第 2 条和第 4 条我们等一下讨论,第 5 条是 LJMP MAIN,LJMP 是一条指令,意思是转移,转移到什么地方去呢?看一下 LJMP 后面跟着什么,是 MAIN,什么地方有 MAIN, 在第 1 条指令的开头就是 MAIN,所以第 5 条指令的意思就是跳转到 MAIN(即第 1 条指令处继续执行), 如此一来,就不断地重复执行这些指令。那么 MAIN 又是什么意思呢?它实际上是我们为这段程序起的 单片机之友 QQ:280919249
单片机程 MCS-51系列) 一个名称,专业术语叫标号,既然是一个名称那可不可以用JIGU0, CHINA等等的其他名字呢?当然可 以,这完全取决于您的需要(⑨:不过也有一些是不能采用的,我们以后再讲)。再来分析第2条和第 4条指令,看看它们是如何实现延时的? LCALL DELAY, LCALL也是一条指令,这条指令叫做调用子程 序指令,看看 LCALL后面跟着的是什么一 DELAY,哪里有 DELAY,在第6条指令的开头,很显然这也是 一个标号,这条指令的作用就是当执行到这条指令时就转去执行 LCALL后面标号所在处的程序,如果在 执行程序时遇到RET指令(RET叫返回指令),就返回到LCAL指令的下面一条(即第3条指令)处继 续执行,在第9条指令后确实有RET指令,那么在执行完第2条指令后就应该去执行第6.7.8.9条指令, 之后遇到第10条指令:RET,执行完这条指令后就回去执行第3条指令,将P1.0清零,也就是让LEDl 亮,然后再去执行第4条指令,执行完后又回到6.7.8.9.10条指令,最后执行第5条指令: LJMP MAIN, 也就是我们刚才说的跳转到第1条,将P1.0置位,就是让LEDl灭掉。如此周而复始,LED1就不断的 闪烁。好好理解这段文字,务必把它搞清楚!! 从标号 DELAY处(即第6条)开始到RET的这一段指令我们称之为子程序,它是一段延时程序 至于延时多长时间,我们会在以后的课程中学习。程序的最后一条是END,它不是指令,它只是告诉编 译软件整个程序到此结束了,它叫“伪指令”。在大家以后的编程中,写完程序都要加上这一条 在上面的程序中我们知道了从标号 DELAY开始的子程序是一段延时程序,那么它又是如何工作的 呢?在了解它的工作过程之前我们必须先知道其中的一些符号,就从R7开始吧,它是单片机内部的 个重要组成部分,叫工作寄存器,什么是工作寄存器?下面我们就来讲解这个问题 工作寄存器 上一课我们已经讲过,在单片机中有许多的功能寄存器和半导体存储器RAM有关,那么工作寄存 器又属于哪一部分呢?它是用来干什么的呢?要搞清楚这个问题,让我们先从日常生活中的一个例子说 起,比如我们要做一道数学题123+456,您会马上得出答案:579,接下来再看一道题:123+456+789 要你马上得出答案就不那么容易了,通常我们会怎么做呢?一般总是先把123+456的结果579写在一张 纸上,然后再算579+789=1368,这1368就是我们想要的最终结果,而579只是为了得到最终结果而暂 时记下来的中间结果,单片机中做运算和我们生活中做运算一样,也需要把中间结果放在某个地方,那 么计算机把它放在哪儿呢?前面我们提到的ROM(只读存储器)中,不行!因为ROM是用来存放程序的, 它只能写进去,不能读出来(再次提醒一下,这只是相对而已),所以只能放在单片机的另一个区域一RAM 中(即随机存取存储器)中。R7就是RAM区域中划出的一部分。知道了R7,接下来让我们来分析一下 这段子程序(延时程序) 三,LED灯闪烁程序子程序的分析 首先看第6条,MoVR7,#250,这也是一条指令,意思是传递数据。我们知道在日常生活中,要 传递一件东西就必须要有一个传递者,一个接受者和被传递的东西,那么在单片机中是怎么区分它们的 呢?在这条指令中,R7是接受者,250就是要传递的东西(单片机中要传递的东西当然是数字了),这 里传递者被省略了(顺便提一下,并不是每条指令都能省略的,事实上大部分的指令都要有传递者), 这样一来,这条指令的意思也很清楚了:就是把250这个数传递给R7这个工作寄存器(也就是把250 这个数送入R7中),这样执行完这条指令后R7中的值就应该是250,我们可以用DUBG8051这个软件来 验证一下,看是不是符合。讲到这里,不知大家注意没有,在250这个数的前面有个#,它是什么意思 呢?这个#就说明250是一个被传递的数的本身,而不是传递者。看懂了MOVR7,#250,那么MOVR6, #250也应该很清楚了 接着看第8条 DJNZ R6,D2,这又是另一条指令,我们来看一下DNZ后面跟着什么,一个是R6 个是D2,R6我们已经知道了,再找一下D2,D2在本行的开头,我们已经学过,它是标号。那么这条 指令是怎么执行的呢?它的执行过程是这样的:它将后面的值(即工作寄存器R6中的值)减1,然后 查一下这个值是否等于“0”,如果等于“0”就往下执行,如果不等于“0”就转移,转移到什么地方去 呢?大家应该明白了,实际上这条指令的执行结果就是在原地转250次;当R6中的值等于“0”之后 程序就去执行第9条指令,也就是 DJNZ R7,D1,大家自行分析一下这条指令的结果(是不是转去执 行MoVR6,#250,同时R7中的值减1),这段子程序的最终执行结果就是 DJNZ R6,#250这条指令被 单片机之友QQ:280919249
单片机教程 (MCS-51 系列) 15 一个名称,专业术语叫标号,既然是一个名称那可不可以用 JIGUO,CHINA 等等的其他名字呢?当然可 以,这完全取决于您的需要(☺:不过也有一些是不能采用的,我们以后再讲)。再来分析第 2 条和第 4 条指令,看看它们是如何实现延时的?LCALL DELAY,LCALL 也是一条指令,这条指令叫做调用子程 序指令,看看 LCALL 后面跟着的是什么--DELAY,哪里有 DELAY,在第 6 条指令的开头,很显然这也是 一个标号,这条指令的作用就是当执行到这条指令时就转去执行 LCALL 后面标号所在处的程序,如果在 执行程序时遇到 RET 指令(RET 叫返回指令),就返回到 LCALL 指令的下面一条(即第 3 条指令)处继 续执行,在第 9 条指令后确实有 RET 指令,那么在执行完第 2 条指令后就应该去执行第 6.7.8.9 条指令, 之后遇到第 10 条指令:RET,执行完这条指令后就回去执行第 3 条指令,将 P1.0 清零,也就是让 LED1 亮,然后再去执行第 4 条指令,执行完后又回到 6.7.8.9.10 条指令,最后执行第 5 条指令:LJMP MAIN, 也就是我们刚才说的跳转到第 1 条,将 P1.0 置位,就是让 LED1 灭掉。如此周而复始,LED1 就不断的 闪烁。好好理解这段文字,务必把它搞清楚!!! 从标号 DELAY 处(即第 6 条)开始到 RET 的这一段指令我们称之为子程序,它是一段延时程序, 至于延时多长时间,我们会在以后的课程中学习。程序的最后一条是 END,它不是指令,它只是告诉编 译软件整个程序到此结束了,它叫“伪指令”。在大家以后的编程中,写完程序都要加上这一条。 在上面的程序中我们知道了从标号 DELAY 开始的子程序是一段延时程序,那么它又是如何工作的 呢?在了解它的工作过程之前我们必须先知道其中的一些符号,就从 R7 开始吧,它是单片机内部的一 个重要组成部分,叫工作寄存器,什么是工作寄存器?下面我们就来讲解这个问题: 二.工作寄存器 上一课我们已经讲过,在单片机中有许多的功能寄存器和半导体存储器 RAM 有关,那么工作寄存 器又属于哪一部分呢?它是用来干什么的呢?要搞清楚这个问题,让我们先从日常生活中的一个例子说 起,比如我们要做一道数学题 123+456,您会马上得出答案:579,接下来再看一道题:123+456+789, 要你马上得出答案就不那么容易了,通常我们会怎么做呢?一般总是先把 123+456 的结果 579 写在一张 纸上,然后再算 579+789=1368,这 1368 就是我们想要的最终结果,而 579 只是为了得到最终结果而暂 时记下来的中间结果,单片机中做运算和我们生活中做运算一样,也需要把中间结果放在某个地方,那 么计算机把它放在哪儿呢?前面我们提到的 ROM(只读存储器)中,不行!因为 ROM 是用来存放程序的, 它只能写进去,不能读出来(再次提醒一下,这只是相对而已),所以只能放在单片机的另一个区域—RAM 中(即随机存取存储器)中。R7 就是 RAM 区域中划出的一部分。知道了 R7,接下来让我们来分析一下 这段子程序(延时程序)。 三.LED 灯闪烁程序子程序的分析 首先看第 6 条,MOV R7,#250,这也是一条指令,意思是传递数据。我们知道在日常生活中,要 传递一件东西就必须要有一个传递者,一个接受者和被传递的东西,那么在单片机中是怎么区分它们的 呢?在这条指令中,R7 是接受者,250 就是要传递的东西(单片机中要传递的东西当然是数字了),这 里传递者被省略了(顺便提一下,并不是每条指令都能省略的,事实上大部分的指令都要有传递者), 这样一来,这条指令的意思也很清楚了:就是把 250 这个数传递给 R7 这个工作寄存器(也就是把 250 这个数送入 R7 中),这样执行完这条指令后 R7 中的值就应该是 250,我们可以用 DUBG8051 这个软件来 验证一下,看是不是符合。讲到这里,不知大家注意没有,在 250 这个数的前面有个#,它是什么意思 呢?这个#就说明 250 是一个被传递的数的本身,而不是传递者。看懂了 MOV R7,#250,那么 MOV R6, #250 也应该很清楚了。 接着看第 8 条 DJNZ R6,D2,这又是另一条指令,我们来看一下 DJNZ 后面跟着什么,一个是 R6, 一个是 D2,R6 我们已经知道了,再找一下 D2,D2 在本行的开头,我们已经学过,它是标号。那么这条 指令是怎么执行的呢?它的执行过程是这样的:它将后面的值(即工作寄存器 R6 中的值)减 1,然后 查一下这个值是否等于“0”,如果等于“0”就往下执行,如果不等于“0”就转移,转移到什么地方去 呢?大家应该明白了,实际上这条指令的执行结果就是在原地转 250 次;当 R6 中的值等于“0”之后, 程序就去执行第 9 条指令,也就是 DJNZ R7,D1,大家自行分析一下这条指令的结果(是不是转去执 行 MOV R6,#250,同时 R7 中的值减 1),这段子程序的最终执行结果就是 DJNZ R6,#250 这条指令被 单片机之友 QQ:280919249
单片机程 MCS-51系列) 执行了250*250=62500次,执行这么多次干吗?就是为了延时。 四.本课总结 大家可以改变一下MoVR6,#250这条指令中的值(注意⑧:不能大于255,为什么,以后会讲 到)或者改变一下标号的名称,看是不是符合上面的分析。接下来提一个问题:通过实验我们看到了 LEDI在闪烁,是因为DNZR6,#250这条指令被执行了250*250=62500次,执行那么多次究竞需要多 长时间呢?下一课我们就将讨论这个问题。 这里有必要介绍一下DUBG8051这个软件,它是一个专为8051单片机设计的仿真软件,配合MON51 仿真机能进行51单片机的仿真,拥有这样一套设备在过去可是非常奢侈的,不过现在已经很少有人使 用它了,原因是目前市场出现了许多兼容 KEIL C51的仿真器,它们的功能更先进,MON51只能属于被 淘汰产品。不过作为单片机初学者,使用DUBG8051还是很有意义的,因为用它可以帮助我们理解单片 机的内部结构和程序的执行结果,在我们实验套件的随机光盘中,有这个软件 五.第4课习题 1.什么是主程序?什么是子程序? 2.标号的含义是什么? 3.单片机是如何执行程序的? 4.工作寄存器属于ROM单元还是RAM单元? 5.在实验中如果没有RET指令会出现什么情况? 6.理解指令 LCALL、LJMP、DJNZ的意义 7.掌握DUBG8051软件的使用方法 单片机之友QQ:280919249
单片机教程 (MCS-51 系列) 16 执行了 250*250=62500 次,执行这么多次干吗?就是为了延时。 四.本课总结 大家可以改变一下 MOV R6,#250 这条指令中的值(注意☺:不能大于 255,为什么,以后会讲 到)或者改变一下标号的名称,看是不是符合上面的分析。接下来提一个问题:通过实验我们看到了 LED1 在闪烁,是因为 DJNZ R6,#250 这条指令被执行了 250*250=62500 次,执行那么多次究竟需要多 长时间呢?下一课我们就将讨论这个问题。 这里有必要介绍一下 DUBG8051 这个软件,它是一个专为 8051 单片机设计的仿真软件,配合 MON51 仿真机能进行 51 单片机的仿真,拥有这样一套设备在过去可是非常奢侈的,不过现在已经很少有人使 用它了,原因是目前市场出现了许多兼容 KEIL C51 的仿真器,它们的功能更先进,MON51 只能属于被 淘汰产品。不过作为单片机初学者,使用 DUBG8051 还是很有意义的,因为用它可以帮助我们理解单片 机的内部结构和程序的执行结果,在我们实验套件的随机光盘中,有这个软件。 五.第 4 课习题 1. 什么是主程序?什么是子程序? 2. 标号的含义是什么? 3. 单片机是如何执行程序的? 4. 工作寄存器属于 ROM 单元还是 RAM 单元? 5. 在实验中如果没有 RET 指令会出现什么情况? 6. 理解指令 LCALL、LJMP、DJNZ 的意义。 7. 掌握 DUBG8051 软件的使用方法。 单片机之友 QQ:280919249
单片机程 MCS-51系列) 第五课单片机的内部结构(三) 上一课中,我们提到了 DJNZ R6,#250这条指令被执行了250*250=62500次,就产生了延时 那么这个时间是多少呢?它又是如何计算出来的呢?这一课就来讨论这个问题。 单片机的时序 1.时序的由来 我们已经知道单片机执行指令的过程就是顺序地从ROM(程序存储器)中取出指令一条一条的顺 序执行,然后进行一系列的微操作控制,来完成各种指定的动作。它在协调内部的各种动作时必须要有 定的顺序,换句话说,就是这一系列微操作控制信号在时间上要有一个严格的先后次序,这种次序就 是单片机的时序。这就好比我们学校上课时用的电铃,为了保证课堂秩序,学校就必须在铃声的统一协 调下安排各个课程和活动。那么单片机的时序是如何规定的呢?接着往下看 2.时序的周期 计算机每访问一次存储器的时间,我们把它称为一个机器周期,它是一个时间基准,就象我们日 常生活中使用的秒一样,计算机中一个机器周期包括12个振荡周期,什么是振荡周期?一个振荡周期 是多少时间?振荡周期就是振荡源的周期,也就是我们使用的晶振的时间周期,一个12M的晶振,它的 时间周期是多少,如果电子技术学得好的朋友应该不难算出(T=1/f),也就是1/12(微秒),那么使用 12M晶振的单片机,它的一个机器周期就应该等于12*1/12(微秒),也就是1μS 在MCS-51系列单片机中,有些指令只要一个机器周期,而有些指令则需要两个或三个机器周期 另外还有两条指令需要4个机器周期,这也不难理解,你在家擦地板的话总比擦桌子的时间要长,不过 我可是大男子主义,从来不做家务的。开句玩笑!!!如何衡量指令执行时间的长短?我们就要用到一个 新的概念:指令周期一即执行一条指令所需的机器周期, INTEL公司规定了每一条指令执行的机器周期 当然这不需要我们非把它记住,不过在这里DJNZ指令我们是要记住的,它是双周期指令,执行一次需 要两个机器周期,即2μS。(12M晶振的话),回到我们上一课的实验,延时的时间就应该算出来了吧, 是62500*2S=125000μS,也就是125mS。这么大的数字也就0.125S,怪不得LED1闪烁的这么快。(这 里给大家出个题目:在上一课的实验中,如何延长闪烁的时间?想想看,怎么做?当然,不会也没关系)。 单片机的时钟电路 XTAL2 XTAL1 外部振荡信号 大家已经知道,单片机是在一定的时序控制下工作的,那么时序和时钟又有什么关系呢?时钟是 时序的基础,单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路就要在 唯一的时钟信号控制下按时序进行工作。那么单片机内的时钟是如何产生的呢? 1.内部时钟电路 单片机之友QQ:280919249
单片机教程 (MCS-51 系列) 17 第五课 单片机的内部结构(三) 上一课中,我们提到了 DJNZ R6,#250 这条指令被执行了 250*250=62500 次,就产生了延时, 那么这个时间是多少呢?它又是如何计算出来的呢?这一课就来讨论这个问题。 一. 单片机的时序 1.时序的由来 我们已经知道单片机执行指令的过程就是顺序地从 ROM(程序存储器)中取出指令一条一条的顺 序执行,然后进行一系列的微操作控制,来完成各种指定的动作。它在协调内部的各种动作时必须要有 一定的顺序,换句话说,就是这一系列微操作控制信号在时间上要有一个严格的先后次序,这种次序就 是单片机的时序。这就好比我们学校上课时用的电铃,为了保证课堂秩序,学校就必须在铃声的统一协 调下安排各个课程和活动。那么单片机的时序是如何规定的呢?接着往下看: 2.时序的周期 计算机每访问一次存储器的时间,我们把它称为一个机器周期,它是一个时间基准,就象我们日 常生活中使用的秒一样,计算机中一个机器周期包括 12 个振荡周期,什么是振荡周期?一个振荡周期 是多少时间?振荡周期就是振荡源的周期,也就是我们使用的晶振的时间周期,一个 12M 的晶振,它的 时间周期是多少,如果电子技术学得好的朋友应该不难算出(T=1/f),也就是 1/12(微秒),那么使用 12M 晶振的单片机,它的一个机器周期就应该等于 12*1/12(微秒),也就是 1μS。 在 MCS-51 系列单片机中,有些指令只要一个机器周期,而有些指令则需要两个或三个机器周期, 另外还有两条指令需要 4 个机器周期,这也不难理解,你在家擦地板的话总比擦桌子的时间要长,不过 我可是大男子主义,从来不做家务的。开句玩笑!!!如何衡量指令执行时间的长短?我们就要用到一个 新的概念:指令周期—即执行一条指令所需的机器周期,INTEL 公司规定了每一条指令执行的机器周期, 当然这不需要我们非把它记住,不过在这里 DJNZ 指令我们是要记住的,它是双周期指令,执行一次需 要两个机器周期,即 2μS。(12M 晶振的话),回到我们上一课的实验,延时的时间就应该算出来了吧, 是 62500*2μS=125000μS,也就是 125mS。这么大的数字也就 0.125S,怪不得 LED1 闪烁的这么快。(这 里给大家出个题目:在上一课的实验中,如何延长闪烁的时间?想想看,怎么做?当然,不会也没关系)。 二.单片机的时钟电路 大家已经知道,单片机是在一定的时序控制下工作的,那么时序和时钟又有什么关系呢?时钟是 时序的基础,单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路就要在 唯一的时钟信号控制下按时序进行工作。那么单片机内的时钟是如何产生的呢? 1. 内部时钟电路 单片机之友 QQ:280919249
单片机程 MCS-51系列) 在MCS-51单片机的内部有一个高增益的反相放大器,其输入端为引脚XTL1(19),输出端为XTLz (18),我们只要在外部接上两个电容和一个晶振,就能构成一个稳定的自激振荡器,它的内部电路的 工作原理就不介绍了,这里主要讲一下电容和晶振的选择,看上面的图,晶振的大小与单片机的振荡频 率有关,我们到串行接口时再详细讲解,电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常 选择10-30P的瓷片电容或校正电容;另外在设计电路时,晶振和电容应尽可能的靠近芯片,以减少PCB 板的分布电容保证振荡器振荡工作的稳定性,提高系统的抗干扰能力 2.外部时钟电路 除了内部时钟方式外,单片机还可以采用外部引入时钟的振荡方式,什么时候需要采用外部时钟 方式呢?当我们的系统由多片单片机组成时,为了保证各单片机之间时钟信号的同步,就应当引入唯 的公用的外部脉冲信号作为各单片机的振荡脉冲,此时应将XTAL2悬空不用,外部脉冲信号由XTAL1 引入,如上右图所示,外部信号的高低电平持续时间应大于20mS,这是大虾们的作品,在此就不介绍 了 本课总结 本课的内容比较少,我就罗嗦一下,讲几句题外话。我是一个只有初中毕业,没有读过多少书的 人,从小就爱好无线电,记得很小的时候,当通讯兵的父亲带回来几本电子方面的书籍,从此就迷上了 无线电,那种痴迷程度决不亚于现在的小孩迷恋游戏机,至今仍然清楚的记得,曾经因为装成功一台6 管收音机而兴奋的几天几夜没睡好觉。那个时候,我国的电子工业还刚刚起步,买一个3AX31的三极管 都要特地跑到市区,而且价格奇贵,几乎要用去一个月的零化钱,当时最愿意去的地方就是上海的虬江 路电子旧货市场,因为在那里可以淘到好多旧的电子元件。初中毕业以后,在当地根本就找不到一家电 子企业,只好在镇上开了一家电器修理店,也就是这几年,边干边做地学了不少在今天已根本无法再学 得进去的“电子,空穴,移位,寄存,施密特”等等理论知识,由于身边没有一个可以请教的老师,为 了加深学习的印象,所以只好一边做实验一边学理论,尽管进度很慢,但效果竟然还不错,好在当时搞 家电修理的收入还可以,加上没有家庭负担,也就这么过来了 随后的几年,做过工人,也当过老师,但更多的时间是在搞技术开发,这些年来,看到很多的昔 日同学靠导腾房地产或者做生意发了财,可自己依然还在这个领域默默无闻的钻研着,但我还是没有后 悔,也从来没有想过改行,因为电子技术那众多迷人而未知的领域常常会使我深深地陷入其中,以至无 法自拔,也感叹自己搞了这么多年,还只是一个入门者 现在老是听到有些年轻的朋友说我要速成单片机,速成C语言,速成什么什么的,每当我看到或 听到这些话的时候,总有一种说不出的滋味。现在的社会,什么都讲究个效率,这本来没有错,但学 项技术也能速成,实在让人有点不知道说什么好。就单片机而言,即使你现在只有15,6岁,也很有天 赋,想把现在的几种主流单片机都搞懂并很好的应用到实践中去,没有个几年恐怕也难,更何况单片机 的技术是在不断发展的,你想跟也来不及 不过,话又说回来,我不是要打击大家的学习积极性,单片机是一种非常宽泛的技术,它的设计 是为了满足大多数的需要,换言之,即使你并没有把全部的知识都理解得很深透,或者说没有把每种单 片机都搞懂,也没关系,你一样可以在实际的产品开发种应用它,因为几乎没有一个产品会把全部的指 令都用起来。 好了,废话讲了半天,还是言归正传吧,希望大家课后多交流,因为在我看来,技术只有不断的 交流,才会有进步,闭门造车只有“S”路一条。 四.第5课习题 1.什么是单片机的机器周期?什么是振荡周期?什么是指令周期?它们之间的关系是怎么样的? 2.什么是单片机的时序? 单片机有几种振荡方式? 简述单片机内部时钟的产生过程 单片机之友QQ:280919249
单片机教程 (MCS-51 系列) 18 在 MCS-51 单片机的内部有一个高增益的反相放大器,其输入端为引脚 XTL1(19),输出端为 XTL2 (18),我们只要在外部接上两个电容和一个晶振,就能构成一个稳定的自激振荡器,它的内部电路的 工作原理就不介绍了,这里主要讲一下电容和晶振的选择,看上面的图,晶振的大小与单片机的振荡频 率有关,我们到串行接口时再详细讲解,电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常 选择 10-30P 的瓷片电容或校正电容;另外在设计电路时,晶振和电容应尽可能的靠近芯片,以减少 PCB 板的分布电容保证振荡器振荡工作的稳定性,提高系统的抗干扰能力。 2. 外部时钟电路 除了内部时钟方式外,单片机还可以采用外部引入时钟的振荡方式,什么时候需要采用外部时钟 方式呢?当我们的系统由多片单片机组成时,为了保证各单片机之间时钟信号的同步,就应当引入唯一 的公用的外部脉冲信号作为各单片机的振荡脉冲,此时应将 XTAL2 悬空不用,外部脉冲信号由 XTAL1 引入,如上右图所示,外部信号的高低电平持续时间应大于 20mS,这是大虾们的作品,在此就不介绍 了。 三.本课总结 本课的内容比较少,我就罗嗦一下,讲几句题外话。我是一个只有初中毕业,没有读过多少书的 人,从小就爱好无线电,记得很小的时候,当通讯兵的父亲带回来几本电子方面的书籍,从此就迷上了 无线电,那种痴迷程度决不亚于现在的小孩迷恋游戏机,至今仍然清楚的记得,曾经因为装成功一台 6 管收音机而兴奋的几天几夜没睡好觉。那个时候,我国的电子工业还刚刚起步,买一个 3AX31 的三极管 都要特地跑到市区,而且价格奇贵,几乎要用去一个月的零化钱,当时最愿意去的地方就是上海的虬江 路电子旧货市场,因为在那里可以淘到好多旧的电子元件。初中毕业以后,在当地根本就找不到一家电 子企业,只好在镇上开了一家电器修理店,也就是这几年,边干边做地学了不少在今天已根本无法再学 得进去的“电子,空穴,移位,寄存,施密特”等等理论知识,由于身边没有一个可以请教的老师,为 了加深学习的印象,所以只好一边做实验一边学理论,尽管进度很慢,但效果竟然还不错,好在当时搞 家电修理的收入还可以,加上没有家庭负担,也就这么过来了。 随后的几年,做过工人,也当过老师,但更多的时间是在搞技术开发,这些年来,看到很多的昔 日同学靠导腾房地产或者做生意发了财,可自己依然还在这个领域默默无闻的钻研着,但我还是没有后 悔,也从来没有想过改行,因为电子技术那众多迷人而未知的领域常常会使我深深地陷入其中,以至无 法自拔,也感叹自己搞了这么多年,还只是一个入门者。 现在老是听到有些年轻的朋友说我要速成单片机,速成 C 语言,速成什么什么的,每当我看到或 听到这些话的时候,总有一种说不出的滋味。现在的社会,什么都讲究个效率,这本来没有错,但学一 项技术也能速成,实在让人有点不知道说什么好。就单片机而言,即使你现在只有 15,6 岁,也很有天 赋,想把现在的几种主流单片机都搞懂并很好的应用到实践中去,没有个几年恐怕也难,更何况单片机 的技术是在不断发展的,你想跟也来不及。 不过,话又说回来,我不是要打击大家的学习积极性,单片机是一种非常宽泛的技术,它的设计 是为了满足大多数的需要,换言之,即使你并没有把全部的知识都理解得很深透,或者说没有把每种单 片机都搞懂,也没关系,你一样可以在实际的产品开发种应用它,因为几乎没有一个产品会把全部的指 令都用起来。 好了,废话讲了半天,还是言归正传吧,希望大家课后多交流,因为在我看来,技术只有不断的 交流,才会有进步,闭门造车只有“S”路一条。 四.第 5 课习题 1. 什么是单片机的机器周期?什么是振荡周期?什么是指令周期?它们之间的关系是怎么样的? 2. 什么是单片机的时序? 3. 单片机有几种振荡方式? 4. 简述单片机内部时钟的产生过程。 单片机之友 QQ:280919249