版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
写在前面
武汉理工大学信息工程学院尹勇一些个人建议1本课程是实用性非常强的一门技术基础课,本课程学好后,可能找不到好工作,但一定不会失业!本课程属于技术类课程,与行业(电子、计算机、通信、石油、化工等)无关,学生毕业后只要是从事工科行业,基本都会用上本课程所学知识和技术。本课程需要任课老师具有模拟电子、数字电子、微机原理、C语言、汇编语言等专业知识(精通),同时具备一些手机、相机、PDA、VC、Andriod、USB、PCI等相关常识性知识(了解)。一些个人建议2任课老师尽量以自己通俗易懂的语言讲解本课程的知识,并与当今流行的计算机、编程语言、应用范例相结合,以让学生在学习课本知识的基础上,增强课堂的趣味性和生动性(比如,我通常在课堂上说8086和51总是对着干,8086是小端格式、堆栈向下增长、SP是以字为单位、属于独立编址等等;而51则属于大端格式、堆栈向上增长、SP以字节为单位、属于分开编址等)。任课老师尽量将单片机在实际科研课题中的应用于课堂教学结合起来。一些个人建议3一般来说,将本教材的内容都掌握了,那么单片机也一定学好了,但是具体实践需要很多课外资料,建议任课老师引导学生“百度”和“淘宝”,在了解更多芯片时能学会查芯片手册和所需板子,同时激发学生自发学习ARM/DSP/FPGA的积极性和主动性。本课程的体系是:计算机基础知识(通用)--51单片机芯片的内部结构--51单片机的指令系统--51单片机编程(汇编+C)--51单片机芯片内部接口--51单片机芯片外部扩展(内部不够用)。任课老师请把握此主线。本课件的特色是:教材上已有文字内容尽量少弄,一些图形和代码需要详细讲解时放在PPT,一些重要的结论和心得特别强调。这些结论和心得,是通过教材自学不到的。一些个人建议4上本科生的课是一门艺术。老师上课的45分钟的讲解非常重要。一般来说,完全依靠教材是不可取的,那叫照本宣科;完全依靠PPT是不可取的,那样学生要么像看电影一样一晃而过,要么会大量记笔记而没有时间认真听老师讲解。建议PPT和教材结合,并尽量让学生在教材上记笔记。课堂45分钟以让学生理解为目的,一些常识性东西需要在课堂上记忆,其他东西在课下记住即可,某种程度上,记忆是为了应付考试。第一章
计算机基础
(如果学生学过《计算机基础》,可略讲)本章内容1.1概述(了解)1.2数字与编码(重点)1.3数据的表示(重点)1.4常用编码(BCD是重点,其他了解)1.5定点与浮点(了解)1.1概述1.1.1产生和发展第一个阶段:1946年以前。机械计算机(与谍战片里面的密码机结合起来)第二个阶段:从1946年到1959年。电子管计算机时代(与CRT类似)第三个阶段:从1960年到1964年。晶体管计算机时代(与模电结合起来)第四个阶段:从1965年到1970年。芯片计算机时代
(与运放结合起来)第五个阶段:从1971年到现在。LSI和VLSI计算机应(与电脑城攒机结合来)新一代计算机:神经网络计算机、生物计算机、量子计算机等(叫学生百度)1.1概述1.1.2分类及特点大型计算机:(超)大、中型计算机,通常指大、快、贵的计算机,主要应用于大范围天气预报、流体湍流分析、海洋环境与污染分析、卫星照片整理,原子核物理探索及核试验模拟。小型计算机:通常能满足部门性的要求,为中小企事业单位所采用。例如,美国DEC公司的VAX系列、DG公司的MV系列、IBM公司的AS/400系列,以及富士通公司的K系列都是有名的小型机。工作站:用于特殊的专业领域,例如图像处理、计算机辅助设计等方面,HP-Apollo工作站、Sun工作站。微型计算机:台式机(PersonalComputer,PC)、笔记本、PDA、单片机、DSP、ARM等1.1概述1.1.3架构与指令集冯.诺伊曼架构和哈弗架构:CISC:指令数目多而且复杂,每条指令编译成机器码以后的长度也不相等,Intel、AMD、TI(德州仪器)、Cyrix以及VIA(威盛)RISC:仅包含最简单、最基本的指令,指令编译成机器码以后,其长度相等,51系列的单片机、ARM、MIPS、POWERPC1.2数制与编码1.2.1概念与分类2进制、8进制、10进制、12机制、60进制等(如果学生学过《计算机基础》,可略讲)1.2.2表达方法(要求学生记住)1.2数制与编码1.2.3数制之间的转换(如果学生学过《计算机基础》,可略讲)其他进制与十进制之间的转换(10.01)2=1×21+1×2-2=(2.45)10=2.45D(13.7)8=1×81+3×80+7×8-1=(11.725)10=11.725D(1A.AF)16=1×161+A×160+A×16-1+F×16-2=(26.68)10=26.68D十进制与其他进制之间的转换,建议老师在黑板上一步一步的书写。1.2数制与编码二、八、十六进制之间的转换(如果学生学过《计算机基础》,可略讲,建议老师在黑板上一步一步的书写)(1011.0101)2=(001011.010100)2=(13.24)8 (46.7)8=(100110.111)2(10010.01)2=(00010010.0100)2=(12.4)16(79B.FC)16=(11110011011.111111)2
1.3数据的表示1.3.1数据的表示在计算机中,一切数据都是以二进制的形式存在的,人们在显示器上看到的10进制或其他进制,是在计算机中经过转换后显示出来的。人们阅读或者表达二进制时,在计算机中通常使用十六进制来表示二进制,11111111
11111111B和FFFFH的本质都是二进制数。1.3.2带符号二进制数的表示(如果学生学过《计算机基础》,可略讲)(1)原码、反码和补码,仅针对有符号数,无符号数不存在;(2)一有符号数,无论以原码、反码或补码表达,其所表示的实际值称为该数的真值;(3)对有符号数而言,虽然存在原码、反码或补码三种表示形式,但在计算机中,该数都是用补码的形式来表达、存储数据和进行运算的。1.3数据的表示1.3.3算术运算(1)算术运算的概念:数的加、减、乘、除以及乘方开方等数学运算.具体的运算方法,请参考教材1.3.3(2)溢出和进位的概念:首先,仅有符号数才有溢出,无符号数不存在溢出;其次,有符号数和无符号数都存在进位,进位是正常现象,溢出是错误的。(3)正数和正数相加、负数和负数相加,有可能发生溢出;一个负数和一个正数相加,结果永远不溢出。(4)溢出的官方判别,请参考教材1.3.3.民间的溢出判别方法是:正数加正数变成负数;或者负数加负数变成正数,即溢出。
1.3数据的表示1.3.4逻辑运算(1)逻辑运算的具体运算方法,请参考教材1.3.4(2)所有的逻辑运算都是按位进行的,位与位之间没有任何联系,也即,逻辑运算不存在进位、溢出等现象。(3)正数和正数相加、负数和负数相加,有可能发生溢出;一个负数和一个正数相加,结果永远不溢出。(4)溢出的判别,请参考教材1.3.3.民间的溢出判别方法是:正数加正数变成负数;或者负数加负数变成正数,即溢出。
1.4常用编码1.4.1BCD码
(1)
BCD码的概念:二-十进制码,它用4位二进制数来表示十进制数0~9这10个数码中的1位,是一种二进制的数字编码形式来表达十进制数。此处注意:BCD码本质是十进制数,只不过用二进制的形式来表达。由于十进制数只有0~9十个,因此一位BCD码仅十个,即:0000~1001(2)分离BCD码和组合BCD码,请参考教材1.4.1
1.4.2ASCII码
(1)概念:是用二进制的形式来表达字符的一种编码,即用二进制数的形式来表示所有的大写和小写字母、数字0到9以及一些特殊控制字符,这些字符能在显示器上显示,或者能从键盘输入电脑。(2)请记住0、a、A的ASCII码,作为常识记住。
1.4常用编码1.4.3汉字编码
(1)
因为以后要学习单片机、嵌入式系统,有可能将汉字编码移植甚至开发简易的汉字输入法等,因此学生必须理解各种编码的概念及用途。(2)汉字输入码:指从键盘上输入的代表汉字的编码,又称“汉字输入码”。例如区位码、拼音码、五笔字型码等。注意,搜狗输入法、腾讯输入法等,只能是叫输入法,这些输入法本质上是利用了汉字输入码,是搜狗和腾讯公司用比较便捷的输入方法封装了汉字输入码。
(3)区位码:每个汉字或图形符号分别用两位的十进制区码(行码)和两位的十进制位码(列码)表示,组合起来就是区位码。如果同学们能记住每个汉字的区位码,那么可以说区位码是汉字输入方法的一种,比如早期的打字机用的就是区位码输入汉字。(4)国标码:国标码本质上是一种特殊的区位码,是中国大陆为了标准化汉字编码而提出的。区位码在中国台湾、香港、和其他汉语国家在使用,但中国大陆推荐使用国标码。(5)内码:为了让汉字信息在计算机内部进行存储、交换、检索等操作,同时为了让汉字的编码与国际上的字符表达ASCII统一,于是出现了汉字的内码。因此,内码是跟计算机打交道的。
课题:嵌入式打标机—矢量字体的处理优化的SHX文件的存储结构图第二章
计算机的基本工作原理
本章内容2.1计算机的组成单元(了解)2.2中央处理器(CPU)(了解)2.3存储器(部分重点掌握)2.4I/O接口(概念重要)2.5总线(概念重要)2.6数据的单位(重点)2.7计算机系统(了解)2.8计算机的工作过程(了解)2.1计算机的组成单元计算机一般由中央处理单元、存储器、输入输出设备等几大部件构成,让学生与自己的电脑结合起来即可中央处理单元输入设备输出设备存储器总线总线总线输入接口输出接口输入接口信号输出接口信号2.2中央处理器(CPU)(1)中央处理器是芯片内部最核心的功能部分,即中央处理单元(CentralProcessingUnit),类似人的大脑。(2)CPU内部包括运算逻辑部件、寄存器部件和控制部件等。目前这些东西很抽象,只能死记。(3)运算逻辑部件、寄存器部件和控制部件的具体功能,了解即可,后续会详细介绍。
2.3存储器(1)在计算机中,存储数据的,都可以说是存储器,按材料(介质)分:半导体存储器(U盘)、磁表面存储器(硬盘)、光介质存储器(光盘)。(2)按应用分类:
(3)按数据存取方式分类:只读和可读写2.3存储器(4)在PC中,内存指内存条,硬盘、U盘、光驱等是辅存,又叫外存。注意,计算机主板上固化启动程序的存储芯片本质上也是内存,通常用来存放BIOS程序。(5)计算机中,存取速度(寄存器不是存储器):
2.3.1半导体存储器简介
(1)半导体即模拟电子、数字电子中的硅或锗材料,形成PN结,然后集成封装构成芯片(2)半导体存储器分为RAM和ROM两种(3)半导体存储器的基本技术指标:一个存储芯片的地址线为10根,数据线为4根,则该芯片容量为210×4B=4KB存取时间和存取周期非常重要,一定要与CPU的读写时序配合,否则数据是乱码,这在嵌入式系统中显得很关键。
(4)DRAM/FPRAM/SDRAM/EPROM/Flash等简单介绍常识即可,其中Flash因应用广泛,最好结合U盘、移动硬盘等多做介绍。2.3.2半导体存储器原理
存储器的基本原理(RAM/ROM适用)
2.3.2半导体存储器原理
存储单元的地址和存储内容
(RAM/ROM适用)
2.3.3静态RAM的内部结构(1)存储单位是存储1位的电路(1或0),存储单元是存储一个字节的电路(8位)(2)存储电路简单了解即可
2.3.4静态RAM2114芯片2114的引脚介绍请详细,学生第一次接触静态RAM芯片2.3.5动态RAM的内部结构(1)动态RAM的内部结构简单介绍,主要让学生明白刷新的原因,具体刷新的机制不必了解。(2)让学生明白,ARM芯片、pc机的CPU芯片内部都已经集成刷新电路,因此经常用动态RAM;而单片机和DSP芯片内部没有刷新电路,如果使用动态RAM,用户必须自己购买动态刷新芯片并设计电路,非常麻烦,因此单片机和DSP通常用静态RAM。2.3.6动态RAM2164芯片特别注意:但由于封装的限制,2164芯片的16位地址信息必须通过同一组引脚分两次接收,因此,在芯片内部有一个能保存8位地址信息的地址锁存器提供锁存信号,并分为行、列两次译码。2.4I/O接口(1)由于计算机由CPU、内存、接口、外设四部分组成,因此可以这么说,计算机上的东西,不是CPU,就是内存,或者就是接口,或者就是外设。那么可以说:U盘、硬盘、键盘、网线等,都是外设。(2)计算机的外设,可能是机械、可能是光电、可能是电气等等电或者非电设备,但这些外设,必须通过接口与CPU打交道。(3)接口必须是电路,因此通常又称为接口电路,即必须是半导体芯片构成的电路。
2.4.1I/O接口的功能
各种功能见教材2.4.1,需要注意,请老师列举例子讲解这些功能,不要照本宣科。2.4.2I/O接口与CPU的交互
三种交互信息见教材2.4.2,需要注意,请老师列举例子讲解这些功能,不要照本宣科。2.4.3I/O接口的内部结构
(1)I/O与CPU打交道是通过数据总线、地址总线、控制总线等三总线进行的。(后续讲解)(2)I/O与外设打交道时,控制信息由CPU通过I/O接口电路发给外部设备,因而是单向的;数据信息可以在CPU和外部设备之间双向传输;状态信息仅仅由外部设备传递给I/O接口电路,然后传递给CPU,以让CPU读取外部设备的状态,因而也是单向的。也即:只可能CPU控制外设,并且只可能外设向CPU汇报状态,CPU是老大(3)必须注意,I/O只是中介,是CPU访问外设的桥梁2.5总线(1)CPU与所有内存和I/O接口之间必须通过总线通信,即:内部总线,属于芯片级。(2)一些接口板卡,如网卡、显卡等与CPU通信,也是通过总线,即系统总线,属于板卡级。(3)一些外设,如U盘、光驱等与I/O接口通信,也是通过总线,即外部总线,属于设备级。(4)各种总线的介绍请参考教材。
2.6数据的单位(重要)(1)学生第一次接触,务必让学生掌握位、字节、字等概念。(2)计算机的字长决定了其CPU一次操作处理实际位数的多少,由此可见计算机的字长越大,其性能越优越。能处理字长为8位数据的CPU通常就叫8位的CPU。同理32位的CPU就能在单位时间内处理字长为32位的二进制数据。(3)从存储器的角度而言,一个存储单元只能存储一个字节;从CPU的角度而言,CPU一次读取或处理的数据叫字。如果CPU一次能从存储器读取2个存储单元的内容,那么该CPU的字长就是16,即2个字节。
2.6.2大端和小端(重要)
大端和小端,必须针对2个以上的字节才有意义,比如对1234H而言:2.6.3规则和非规则(重要)
规则字和非规则字的概念,是针对一个字而言,与字节和位无关,比如对1234H而言:2.7计算机系统请老师结合实际的8086、单片机、PC机通俗易懂的介绍2.7计算机系统课题:嵌入式打标机中的计算机构成2.7计算机系统课题:嵌入式打标机中的各个硬件模块振荡器及定时电路CPUROMRAM定时器/计数器总线扩展控制电路可编程I/O可编程串行口单片机芯片外部设备总线2.8程序的执行请老师结合实际的单片机、PC机通俗易懂的介绍,因8086单板机基本不用,此处不再讲解。具体执行过程,请参见教材2.82.9
流水线第三章
单片机内部结构本章内容3.1单片机简介(了解)3.2单片机的内部结构(重点)3.3存储器(重点)3.4特殊功能寄存器(重点)3.5时钟电路与复位电路(重点)3.6引脚功能(重点)3.7单片机最小系统(了解)3.1单片机简介为课堂生动,吸引学生的学习兴趣,建议老师多和课题、电子设计大赛等结合起来讲解。(1)为什么叫单片机(2)单片机的发展(读小说一样)(3)单片机的分类(读小说一样)(4)单片机的应用等级(了解)(5)单片机的应用领域(了解)3.2单片机内部结构详细讲解PC/ACC。必须注意,运算器和指令寄存器只是芯片内部的一个功能模块,用户无法编程访问,即无法读、写。3.3存储结构(1)在51中,ROM用来存放程序、表格和一些常数;RAM用来存放程序运行过程中所需要的数据(变量)或临时存放运算的结果。(2)普林斯顿和哈佛结构,可以从独立编址和分开编址的角度来看,也可以从总线是否分时复用的角度来看。单片机是普、DSP是哈。(3)由于51只有16根地址线,因此最大扩展空间是64K(注意是扩展,不包括片内)。但由于51是普林斯顿结构,ROM和RAM分开访问,故有64K的ROM和64K的RAM可以扩展。3.3.1物理和逻辑来看
(1)从物理角度来看(硬件的角度),51单片机有4个存储空间,即:片内RAM、片外RAM、片内ROM和片外ROM(2)从逻辑角度来看(编程的角度),51单片机有3个存储空间,即片内RAM、片外RAM和片内片外统一的ROM
3.3.2ROM和RAM的组织
ROM总共最大64K,包括片内和片外一起,参见教材3.3.1
3.3.3外部RAM和I/O地址
(1)片外扩展的数据存储器和扩展的I/O口与片内数据存储器空间0000FH~FFFFH是重叠的。也就是说,所有扩展的外部RAM和扩展的I/O接口共同占用64KB的地址单元(2)片外RAM和I/O接口使用MOVX指令
3.3.4内部RAM普通51单片机
增强型52单片机
各个区域的具体介绍请参考教材3.3.4
3.4特殊功能寄存器(1)明白为什么叫特殊功能寄存器,一些特殊功能寄存器的名字和功能必须记忆。(2)各特殊功能寄存器的描述请参考教材3.4(3)PSW是重点,各个位的顺序不必记忆,但各个位的功能和名称必须记忆。(4)PC和DPTR是重点,PC总是指向下一条即将执行的代码的地址;DPTR是51中为数不多的16位寄存器。3.4特殊功能寄存器SP是重中之重,SP是指向堆栈的指针,堆栈是临时存放调用子程序或响应中断服务程序时主程序断点的位置和其他寄存器内容的东西,注意,该东西不一定是存储器,也可能是寄存器。天下所有计算机必须有堆栈,不同的计算机堆栈不一样,但他们具有以下共性:(1)按“先进后出,后进先出”的原则存取数据,这里的“进”与“出”是指进栈与出栈操作。(2)SP用于存放最后一个被存放在堆栈的数据的地址。每存入(或取出)1次数据(不一定是一个字节),SP就自动加(或减)。SP始终指向新的被操作的数据。
(3)堆栈有栈底和栈顶之分,栈底就是CPU初始化时SP指向的地址,栈底地址一旦初始化后将保持不变,它决定了堆栈在RAM中的起始位置;栈顶是最后一个被存放在堆栈的数据的地址,SP随栈顶的变化而变化,可以说SP总是指向栈顶。(4)堆栈栈底确定后,就可以向堆栈存放数据。存放数据时,有向上生长和向下生长两种方式。(5)堆栈有专门的操作指令:PUSH:数据进入堆栈称“进栈(压栈)”POP:数据从堆栈取出称“出栈(弹栈)3.4特殊功能寄存器51单片机的堆栈具有以下个性(详细请参见3.4小节的例题):(1)初始化时,SP=07H,即栈底为07H,此时栈底与栈顶一样都是51单片机是属于向上增长方式,且以“字节”为单位进栈或出栈,此时堆栈中没有数据,只能执行PUSH操作,无法执行POP操作。(2)SP是一个8位的寄存器,51的堆栈位于片内RAM区域。
(3)51单片机是属于向上增长方式,且以“字节”为单位进栈或出栈。3.5时钟与复位电路(1)为什么需要时钟电路?(2)注意,购买的2脚晶振是一块材料,必须和单片机内部的振荡电路一起才可能工作;购买的4脚晶振是一个含有振荡材料的电路,直接加电源即可工作。故有内部和外部振荡2种方式。(3)明白振荡周期(拍节)、状态周期、机器周期、指令周期的概念。其中,机器周期非常重要,衡量不同架构的CPU的指令系统性能的好坏,是以机器周期为指标的。即:执行同样一条指令,不同的CPU所消耗的机器周期的个数不一样。3.5时钟与复位电路(4)为什么需要复位电路?(5)注意,不同CPU对复位的要求不一样。(6)单片机复位后,某些特殊功能寄存器的值必须记忆。3.6引脚功能3.7课题:嵌入式打标机的最小系统(1)什么是最小系统?(2)嵌入式打标机最小系统硬件第四章
51单片机的指令系统本章内容4.1寻址方式(重点)4.2基本指令
(重点)前言(1)明白机器码、汇编指令、高级语言的区别和联系(2)0101的代码叫机器码、在汇编语言叫指令、高级语言叫语句。(3)由于单片机目前大量存在汇编语言开发的程序,因此必须认真掌握单片机的汇编语言,既是找工作需要,也是考试重点之一。(4)天下所有汇编语言都包括操作码和操作数,其中操作码是必须的,操作数是可选的,正如英语单词中的:go(5)dir、#data、#data16等表达,是因为在程序注释中为了少写字,用这些缩写替代“片内RAM和SFR的8位直接地址”、“8位立即数”、“16位立即数”等表达。如果用户不嫌烦,也可以不用dir、#data、#data16等表达,直接书写汉字。故dir、#data、#data16等表达只可能出现在程序注释中。4.1寻址方式(1)为什么需要寻址方式?(2)判断何种寻址方式必须切记:谁是被操作对象(3)不同寻址方式,产生的机器码的字节数和执行的机器周期个数不一样。(4)寻址方式和计算机的数据组织以及存储器结构密切相关。4.1.1立即寻址(#data)(1)指令中直接给出操作数的寻址方式:MOVA,#33H;#33H→A
(2)在该指令中,MOV指令的机器码是74H。整个指令的机器码是:7433H。必须注意,MOV指令不同的寻址方式,机器码不一样。(3)立即数寻址速度最快,因为立即数不需要去内存去寻找,指令直接把被操作对象给出了。4.1.2直接寻址在指令中直接给出操作数所在的地址:MOVA,33H;(33H)→A
被操作对象不是33H,而是33H里面的内容:12H4.1.3寄存器寻址(1)操作数(被操作对象)存放在寄存器中(2)能作为寄存器寻址的只有:A,B,DPTR,R0~R7,其中:B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。A可以寄存器寻址又可以直接寻址,直接寻址时写作ACC
MOVA,B;B→A,该指令中,目的操作数A是寄存器寻址,源操作数B的寻址方式是直接寻址方式4.1.4寄存器间接寻址(1)以寄存器内容为地址,该地址中存放的内容才是被操作对象(2)可以访问内部RAM和外部RAM。内部RAM空间为128B,必须要寄存器R0或R1提供内部RAM的地址;而外部RAM空间为64KB,需由P2端口提供高8位地址,R0或R1提供低8位地址,或DPTR提供16位间接地址,如:MOVA,@R0;(R0)→A
MOVXA,@DPTR;(DPTR)→A4.1.5变址寻址(1)以DPTR或PC作为基地址寄存器,累加器A作为变址寄存器,将基地址寄存器的内容和变址寄存器的内容相加形成地址,被操作对象存放于该地址中。
(2)变址寻址只用于访问程序存储器,只有2条指令:MOVCA,@A+DPTR及MOVCA,@A+PC
4.1.6相对寻址(1)将程序计数器PC的当前值与指令第二字节给出的相对偏移量(rel)相加,从而形成转移的目标地址。
(2)该指令只用于跳转,故只能访问ROM。
(3)例如:1000HSJMP30H由于SJMP指令为2字节指令,所以在执行这条指令时,当前的PC值为1000H+2H=1002H,而相对偏移量rel=30H,所以,本指令转移的目的地址=1002H+30H=1032H
4.1.7位寻址(1)对片内RAM中20H~2FH中的128个位地址及SFR中的可位寻址的位地址寻址。
(2)位寻址类似于直接寻址,都是指令给出直接地址,不同之处在于位寻址只给出该位的地址,而非字节地址。
(3)例如:SETB07H;或写成SETB20H.74.2基本指令-传送类(1)在汇编语言中,MOV指令应用最多。(2)务必分清楚MOV/MOVX/MOVC的应用场合。(3)MOV可以有各种寻址方式;MOVX只能是间接寻址;MOVC只能是变址寻址。(4)MOVX访问片外RAM,故可读写,因此总共有4条;MOVC访问ROM(片内、片外ROM),只读,故只有2条。4.2基本指令-传送类(5)PUSH/POP指令的理解非常重要:在执行PUSH指令时,先将SP值加1,然后将要压栈的数据向SP所指向的内部RAM单元传送。也即:指针先动,把空间腾出来,然后把数据压进去。在执行POP指令时,先将要弹出堆栈的数据向SP所指向的内部RAM单元传送,数据弹出后将SP值减1。也即:数据先弹出来,然后指针再向下移动。
4.2基本指令-字节交换类字节交换类指令,请参见教材4.2.2。
4.2基本指令-算术、逻辑运算(1)所有双字节算术运算指令,必须A为目的操作数,源操作数为片内任意形式。(2)对双字节逻辑运算指令而言,要么A为目的操作数,源操作数为片内任意形式;要么dir为目的操作数,此时#data或A必须为源操作数。这就是A叫做累加器的原因,因为单片机只有加法的硬件机构(不存在减法、乘法等硬件,如果需要减法等运算,必须在CPU里面自己转换成加法运算),且A是该机构的核心部件,故算术运算和逻辑运算大多数必须A参与。A不参与双字节逻辑运算的唯一例外情况是:AND/ORL/XRL
DIR,#DATA(3)请注意,DEC没有DPTR形式。
4.2基本指令-算术、逻辑运算(4)十进制调整指令理解非常重要:
十进制调整指令的目的是,当用户想用十进制的形式进行运算,然后计算机中的一切数均是以二进制(十六进制)的形式存在的,为了让CPU明白现在是十进制运算,故必须在运算紧接着的下一条指令采用DAA指令告诉CPU,用户是十进制而不是二进制运算。比如:
7+9=16,可是计算机却认为是7H+9H=10H,如果在7+9运算后面立即跟一个DAA指令,那么CPU就知道7+9=16,而不是10H。(5)十进制调整指令的具体调整过程是在CPU碰到DAA指令后,由CPU内部自动完成的,不需要用户干预,故用户对内部自动完成的机理理解即可。(6)单片机只有DAA一条调整指令,且只能是加法。如果需要减法调整,那么用户必须编程将该减法运算变化为加法运算。(7)其他算术、逻辑运算指令请参考教材4.2.4.4.2基本指令-算术、逻辑运算(8)算术运算和逻辑运算指令对标志位的影响
:1)对A操作指令(包括传送指令)都将A中“1”个数的奇偶反映到PSW的P标志位上。即A中奇数个“1”,P=1;偶数个“1”,P=0。因此MOV指令会影响P(只可能影响P),但不可能影响C/OV等。2)加1、减1指令、逻辑运算指令不影响CY、OV、AC标志位(本身是有进位、借位的)。
3)加、减运算指令影响标志位,乘除指令使Cy=0,当乘积大于255,或除数为0时,OV置1。4)对进位位CY(指令中用C表示)进行操作的指令和大环移指令,显然会影响CY。4.2基本指令-控制转移类(1)控制转移类指令,一定是与程序的运行方向有关。通常情况下程序是从上到下一条一条指令顺序执行的,有时候如果用户不想让程序按照这个顺序执行,此时就会用到控制、转移类指令。(2)由于程序执行的下一条语句的首地址放在PC中,通常情况下程序是从上到下一条一条指令顺序执行的,此时PC的内容是自动增加(注意不一定是加1)的,不需要人工干预。也即,如果人工干预了PC里面的值,那么程序无法从上到下一条一条指令顺序执行了。(3)控制类指令,在汇编里面叫子程序调用,类似C里面的函数;转移类指令在汇编里面叫跳转,类似C语言里面的goto。(4)无条件的转移指令,可以长跳,也可以短条;有条件转移指令,只能短跳。各个语句的具体描述,请参见教材4.2.54.2课题:嵌入式打标机所用指令创建链表1,逐行检查绘图命令;检测第1行绘图命令为PU,将A点坐标存入链表1;检查第2行绘图命令为PD,将B点坐标加入链表1;检查第3行绘图命令为PD,将C点坐标加入链表1;检查第4行绘图命令为PU,说明当前点(D点)和前
一点(C点)不在同一笔上,终止链表1,创建新的链表2并将D点坐标添加入此链表;检查第5行绘图命令为PD,将E点坐标加入链表2;检查到文件尾则终止链表2,关闭文件。第伍章
汇编程序设计本章内容5.1概述(了解)5.2伪指令(重点)5.3汇编语言程序设计步骤(掌握)5.4顺序程序设计(掌握)
5.5分支程序设计(掌握)5.6循环程序设计(掌握)5.7位操作程序设计(掌握)5.1概述(1)从编程的角度,汇编程序设计你可能不会,但一定要能看懂别人编写的汇编程序;(2)从考试的角度,学生必须能编写基本的顺序、分支、循环、位操作等程序;(3)本章列举大量例题,考虑到课时限制,老师可以在一种形式的汇编设计中挑选一个有代表性的例题进行讲解,其他可由学生根据自己实际情况自学;(4)在讲解例题时,建议老师用粉笔在黑板上一步一步讲解。5.1概述课题:嵌入式打标机的程序调试过程5.2伪指令(1)伪指令的概念:首先,伪指令是指令,所以伪指令出现在源代码文件中;其次,伪指令有个“伪”字,所以它不产生机器码,也即伪指令在编译后不占用ROM,CPU无法执行。伪指令的作用是,用于告诉汇编器,源代码文件中哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等,以及告诉汇编器该源代码编译后的机器码存放在ROM中什么位置,等等。伪指令只是起指示作用,告诉汇编器如何对待该源代码文件。伪指令与汇编器有关,也即,MASM6.0能识别的伪指令,在MASM2.0中不一定能识别。但是只要是为单片机汇编语言设计的汇编器,所有真正的单片机指令都能识别。5.2伪指令(2)伪指令的一个例题:
OGR100HTAB3:DW5678H,10
第一行,伪指令告诉汇编器,下面的东西将存在ROM中的100H处。第二行的结果是:(100H)=56H,(101H)=78H,(102H)=00H,(103H)=0AH。
这里充分体现了单片机的大端格式特点。56H是高8位、78H是低8位。其他伪指令,请参见教材5.2小节。
5.4顺序程序【例5-2】若R4R5为双字节负数,编写其求补程序。解:程序如下:ORG0000H MOV A,R5 ;取低字节
CPL A ADD A,#1 ;低字节变补
MOV R5,A MOV A,R4 ;取高字节
CPL A ADDC A,#0 ;加低8位的进位
ORLA,#80H ;恢复负号
MOV R4,A END5.5分支程序【例5-4】求8位有符号数的绝对值。解:利用JNB指令来判断符号位,以确定正负数,如是正数则不变,如是负数则变补。程序如下:ORG0000HMOVA,R2 JNBACC.7,N;为正数?
CPLA ;负数变补
INCA MOVR2,AL1:SJMP$ ;结束5.6循环程序【例5-8】设计将片外RAM的2000H单元开始的50个存储单元清零的程序。解:程序如下:
ORG1000HCLEAR:CLRA;清AMOVR2,#32H;循环次数50MOVDPTR,#2000H;建立地址指针
LOOP:MOVX@DPTR,AINCDPTRDJNZR2,LOOP;R2-1≠0,转LOOPRET;R2-1=0循环结束5.7位操作程序【例5-12】编写程序实现逻辑表达式Q=XYZ+X解:设变量X、Y、Z、Q对应的口线为:X:P1.0Y:P1.1Z:P1.2Q:P1.7程序如下:ORG1000HMOVC,P1.0ANLC,P1.1ANLC,P1.2MOVF0,C;用户标志位F0用来暂存中间结果XYZMOVC,P1.0ANLC,/P1.2ORLC,F0MOVP1.7,CEND5.8子程序【例5-14】编程实现Y=X12+X22。解:;子程序名:SQR1;主程序:
ORG00HX1EQU30HX2EQU40HYEQU50HSTART:MOVA,X1ACALLSQR1 MOVR1,A;X12值暂存R1 MOVA,X2;X22取值
ACALLSQR1 ADDA,R1;求X12
+X22 MOVY,A;存入子程序ORG0100H0100SQR1:INCA0101 MOVCA,@A+PC0102 RET0103TAB:DB0,1,4,9,160108 DB25,36,49,64,81课题:嵌入式打标机的程序设计第六章
C程序设计本章内容6.1概述(了解)6.2C51程序结构(了解)6.3C51的数据类型(重点)6.4数据的存储器类型和存储器模式(重点)6.5指针(重点)6.6SFR、寻址位、存储器和I/O口的定义(重点)6.7C51的运算符(了解)6.8函数(了解)6.9汇编语言和C语言的混合编程(掌握)6.10开发工具简介(KeilC)(了解)6.1概述(1)从教学的角度,本章不是重点;从学习的角度,本章是重中之重,因此学生必须在课下自学,甚至查阅大量课外参考书。(2)本章许多内容与C《语言》一致,课堂上可以略讲。(3)本章可以安排到课程即将结束时讲解,那时单片机的接口和扩展也可以用C语言编写程序。(4)在讲解时,建议老师将科研中所用到的C语言编程与教学相结合。6.2C51程序结构
(1)C51程序是由函数构成的。函数是C51程序的基本单位。一个函数由两部分组成:
1)函数说明部分。包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。一个函数名后面必须跟一个圆括号,函数参数可以没有,例如main()。
2)函数体。即函数说明下面的大括号之内的部分。(2)一个C51程序总是从main函数开始执行,而不论main函数在整个程序中所处的位置如何。(3)C51程序书写格式自由,一行内可以写几个语句,一个语句可以分写在几行上。在Keil集成开发环境中,C51编辑器带有行号,可以方便编辑和调试。但行号的有无对于C51程序的执行没有影响。(4)每个语句和数据定义的最后必须有一个分号。分号是C51语句的必要组成部分。分号不可少,即使是程序中的最后一个语句也应包含分号。(5)C51本身没有输入输出语句。标准的输入和输出(通过串行口)是由scanf和printf等库函数来完成的。对于用户定义的输出,比如直接以输出端口读取键盘输入和驱动LED,则需要自行编制输出函数。(6)可以用“/*…*/”对C51程序中的任何部分作注释。在Keil
uVision3中,还可以使用“//”进行单行注释。
6.3C51数据类型
数据类型长
度值
域unsigned
char单字节0~255signed
char单字节-128~+127unsigned
int双字节0~65535signed
int双字节-32768~+32767unsigned
long四字节0~4294967295signed
long四字节-2147483648~+2147483647float四字节±1.175494E-38~±3.402823E+38指针1~3字节对象的地址bit位0或1sfr单字节0~255sfr16双字节0~65535sbit位0或16.4C51存储类型
存储器类型与物理存储空间的对应关系data直接寻址片内数据存储器的低128字节,访问速度快bdatadata区中可位寻址区域20H~2FH(16字节),允许位与字节混合访问idata间接寻址片内数据存储区(256字节),可访问片内全部RAM空间pdata分页(256字节)的外部数据存储区,通过P0端口的地址对其访问xdata片外数据存储区(64KB),通过DPTR访问code程序存储区(64KB),通过DPTR访问(1)指针就是指变量或数据所在的存储区地址(2)存放变量地址的变量称为“指针变量”
(3)通型用指针指向任何存储器空间(4)存储器型指针所指向的对象具有明确的存储器空间一些例子:char*xdata
psy;/*将通用型指针psy自身指定在xdata区*/longcode*xdata
l_ptr;/*指针变量l_ptr指向的是code区中的long型变量,l_ptr自身在片内存储区xdata中*/chardata*c_ptr;/*指针c_ptr指向的是data区中的char型变量*/
int
xdata*i_ptr;/*指针i_ptr指向的是xdata区中的int型变量*/6.5C51指针
特殊功能寄存器SFR定义
C51使用关键字sfr对特殊功能寄存器SFR进行定义,有两种定义方式:(1)自主定义方式定义后,在程序中即可直接引用寄存器名。例如:
sfrIE=0xa8;/*定义中断允许寄存器IE,地址为A8H*/
sfrACC=0xe0;/*定义A累加器,地址为E0H*/
sfrP1=0x90;/*定义P1端口,地址为90H*/(2)利用C51建立的reg51.h(reg52.h)进行定义使用包含语句#include<reg51.h>后,就可直接引用SFR名称,或直接引用位名称。头文件对所有的SFR和其可寻址位进行了sfr、sbit定义。特别注意:引用SFR或位名称时必须大写。*/6.6课题:嵌入式打标机中的I/O口定义
对位变量的定义有3种方法:(1)将变量用bit类型的定义符定义为bit类型例如:bitmm;/*定义mm为位变量,其值为0或1,由C51自行安排在bdata区。*/(2)采用字节寻址变量^位的方法例如:
bdata
int
ixy;/*ixy定义为整型变量*/
sbit
bnn=ixy^13;/*bnn定义为ixy的D13位,其中:位是运算符“^”相当于汇编中的“·”*/(3)对SFR中可寻址位的定义对SFR中可寻址位的定义有4种方法:1)使用头文件reg51.h及sbit定义符;多用于无位名称的可寻址位:例如:
#include<reg51.h>
sbitP2_3=P1^1;/*定义P2_3为P1口的D1位*/
sbitflag=ACC^5;/*定义flag为累加器A的D5位*/6.6SFR、可寻址位、存储器和I/O口的定义
利用绝对地址访问的头文件absacc.h可对不同的存贮区进行访问。该头文件中定义的关键字有:CBYTE(访问code区字符型)DBYTE(访问data区字符型)PBYTE(访问pdata或I/O区字符型)XBYTE(访问xdata或I/O区字符型)
CWORD(访问code区int型)DWORD(访问data区int型)PWORD(访问pdata区int型)XWORD(访问xdata区int型)在利用绝对地址访问时,程序中一定要包含absacc.h,关键字CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORD、PWORD必须大写。6.6课题:嵌入式打标机中的内存访问定义
6.7-6.8,6.10省略
(1)直接在C语言程序中嵌入汇编语句1)使用关键字asm
格式1:asm<操作码><操作数><;/换行符>
格式2:__asm<操作码><操作数><;/换行符>
格式3:__asm{汇编指令}2)在C文件中嵌入汇编代码的地方加上如下代码:#pragmaASM汇编程序的代码#progmaENDASM6.9汇编和C的混合编程
(2)C语言调用汇编语言子程序【例6-】无参数传递的函数调用。其中example.c和example.a51为项目中的两个文件。 ***********************example.c**************************************externvoiddelay100();/*说明被调函数delay100()(在example.a51中)*/main() {delay100;}/*调用函数delay100()*/*******************************example.a51****************************?PR?DELAY100SEGMENTCODE ;在程序存储区中定义段PUBLICDELAY100 ;
声明函数RSEG?PR?DELAY100 ;
函数可被连接器放置在任何地方DELAY100:
MOVR7,#10DEL: MOVR6,#20
DJNZR6,$
DJNZR7,DELRETEND6.9汇编和C的混合编程
第七章
51单片机中断系统
本章内容7.1中断的基本概念(重点)7.251单片机的中断系统(重点)7.3MCS-51中断处理过程(重点)
7.4中断的程序设计(重点)7.1中断的基本概念(1)中断是一个过程:当CPU内部或外部出现某种事件(中断源)需要处理时,中止正在执行的程序(断点),转去执行请求中断的那个事件的处理程序(中断服务程序),执行完后,再返回被暂时中止执行的程序(中断返回),从断点处继续执行。。(2)中断系统是实现和处理中断功能的软、硬件的集合。整个中断过程由计算机的中断系统配合用户设计的中断服务程序来实现。所有计算机必须有中断系统。(3)中断源是产生申请中断信号的单元和事件,也即导致CPU产生中断的来源。7.1中断的基本概念(4)可屏蔽中断和不可屏蔽中断:不可屏蔽中断,程序员不能控制它,一旦产生了不可屏蔽中断,系统肯定会立即响应;而对于可屏蔽中断,程序员可以通过指令来控制CPU对它们的响应。(5)硬件中断和软件中断:硬件中断的请求时间,程序员无法控制,它们基本上是随机产生的;而对于软件中断,汇编语言程序员可通过指令来有目的安排它们产生时间和位置。(6)内部中断和外部中断:内部中断是CPU内部集成的许多功能模块,如定时器、串行通讯口、模/数转换器等,它们在正常工作时往往无需CPU参与,而当他们处于某种状态或达到某个规定值需要程序控制时,会通过发出中断请求信号通知CPU。典型例子有定时器溢出中断,如8位的定时器在正常计数过程中无需CPU的干预,一旦计数到达0xff产生溢出时便产生一个中断申请信号,通知CPU进行必要的处理。内部中断源在中断条件成立时,一般通过片内硬件会自动产生中断请求信号,无须用户介入,使用方便。内部中断是CPU管理片内资源的一种高效的途径。一个中断信号(通常是高/低电平或者电平跳变的上升/下降沿)送到CPU的外部中断请求引脚。这些中断源是通过CPU的引脚进行中断请求的,称为外部中断源。7.1中断的基本概念(7)中断处理过程中断处理过程,也叫中断过程,天下所有中断一般包含以下五个步骤:中断请求、中断判优、中断响应、中断处理以及中断返回。中断请求:由中断源发出中断请求信号,外部由硬件产生,内部由指令产生。中断判优:如果有两个或两个以上中断源同时发出中断请求,要根据中断优先权,找出最高级别的中断源,首先响应其中断请求,处理完后再响应较低一级的中断源。中断响应:CPU接到中断请求信号后,在满足条件的情况下,CPU进入中断响应周期。中断处理:中断处理也叫中断服务,是由中断服务程序完成的。中断服务程序是用户编写的。中断返回:程序自动返回到断点地址,继续执行被中断的主程序。中断服务程序的最后必须是中断返回指令RETI。7.1中断的基本概念(8)其中:中断响应很特殊,CPU响应中断后将自动完成以下处理:1)断点保护。把断点地址自动压入堆栈。2)形成中断入口地址。CPU响应中断后,根据判优逻辑提供的中断源标识,获得中断服务程序的入口地址,转向对应的中断服务程序。(9)其中:中断处理过程很特殊,用户编写的中断服务程序一般应由以下几部分按顺序组成:1)保护现场:对于主程序中需要保护的一些寄存器和变量,但在CPU进入中断服务程序时硬件无法自动保护,需要用户编程用入栈指令把这些内容压入堆栈,以便返回后CPU能正确运行原程序。值得注意的是,断点地址是由硬件自动保护的,不用在用户在中断服务程序中编程进行保护。2)中断服务程序:执行输入/输出或事件处理程序,由用户编写。(10)其中,中断返回过程很特殊:是程序自动返回到断点地址,继续执行被中断的主程序。中断服务程序的最后必须是中断返回指令RETI(类似C语言里面的函数最后一个语句必须是Return),由CPU自动完成以下功能:1)将相应的优先级触发器清0;2)从堆栈中弹出断点地址给PC;3)回到中断处继续执行。7.1中断的基本概念(11)中断处理示意图7.1中断的基本概念(12)中断优先级和中断嵌套
通常,CPU可以接收若干个中断源发出的中断请求。但在同一时刻,CPU只能响应这些中断请求中的其中一个。为了避免CPU同时响应多个中断请求带来的混乱,每一个中断源赋予一个特定的中断优先级。一旦有多个中断请求信号,CPU先响应中断优先级高的中断请求,然后再逐次响应优先级次一级的中断。中断优先级也反映了各个中断源的重要程度,同时也是分析中断嵌套的基础。使用优先级的情况是:1)某一时刻同时有两(多)个中断源申请中断。在这种情况下,CPU首先响应中断优先级最高的那个中断,而将其它的中断挂起。待优先级最高的中断服务程序执行完成返回后,再顺序响应优先级较低的中断。2)当MCU已经响应了某个中断正在执行为其服务的中断程序时,此时又产生一个其它的中断申请,这种情况也称作中断嵌套。7.1中断的基本概念(13)课题:嵌入式打标机中的中断处理
7.1中断的基本概念(14)注意
一些CPU内部(如51系列CPU)集成了中断管理系统。其硬件能够自动实现中断优先级判断以及进行中断嵌套的处理,也即单片机芯片内部的硬件电路能够识别中断的优先级,并根据优先级的高低自动完成对高优先级中断的优先响应,从而实现中断的嵌套处理。然而,对8086而言,CUP内部没有中断优先级判断电路和中断嵌套处理电路,因此必须外接中断管理芯片才能完成中断的处理,如8259芯片等。7.251单片机的中断系统(1)单片机的五个中断源是: 1)外部中断请求0,由引脚/INT0输入,中断请求标志为IE0。 2)外部中断请求1,由引脚/INT1输入,中断请求标志为IE1。 3)定时器/计数器T0溢出中断:中断请求标志为TF0。 4)定时器/计数器T1溢出中断请求:中断请求标志为TF1。 5)串行口中断:片内串行口完成一帧发送或接收产生的中断,中断请求标志为TI或RI。7.251单片机的中断系统(2)与中断相关的寄存器:
7.251单片机的中断系统(3)51的中断结构:
7.351的中断处理过程(1)得到中断响应的条件: 1)IE寄存器中的中断总允许位EA=1。(大门开) 2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(有请求)
3)该中断源中断允许位=1,即该中断没有被屏蔽。(小门开) 4)无同级或更高级中断正在被服务。(无领导)(2)在允许响应的情况下,下列情况可能被延迟: 1)CPU正在处理同级的或高一级的中断;(领导在) 2)现行的机器周期不是当前所执行指令的最后一个机器周期;(不能让当前指令执行到一半) 3)当前正在执行的指令是返回(RETI)指令或是对IE或IP寄存器进行读/写的指令。(正在操作堆栈)7.351的中断处理过程(3)课题:嵌入式打标机中的中断的响应和处理过程:初始化时SP=30H,CPU即将执行主程序1000H处的指令,这时在单片机的/INT0引脚上出现一个中断请求,则CPU响应和处理该中断过程如下:
7.351的中断处理过程(4)中断标志的清除
1)定时器溢出中断源的中断请求标志是自动撤除的,用户不用编写程序清除它们。 2)用户应在中断服务程序的适当位置处通过如下指令将中断标志撤除。 CLRTI;撤除发送中断 CLRRI;撤除接收中断若采用字节型指令,则也可采用如下指令:
ANLSCON,#0FCH;撤除发送和接收中断 3)外部中断请求的撤除: 外部中断源的中断请求请求是自动撤除的,用户不用编写程序清除它们。
7.4中断程序设计(5)外部中断引脚的清除
在下降沿触发方式下,外部中断标志IE0或IE1是依靠CPU两次检测或引脚上触发电平状态而确定的,即如果第一次检测到或引脚是高电平,第二次检测到或引脚是低电平,CUP就将外部中断标志IE0或IE1置1。因此通常情况下用户不用关心外部中断引脚,因为不会出现下降沿这种干扰信号(出现下降沿是用户所需要的)。在低电平触发方式下,外部中断标志IE0或IE1是依靠CPU检测或上低电平而置位的。尽管CPU响应中断时相应中断标志IE0或IE1能自动复位成“0”状态,但若外部中断源不能及时撤引脚上低电平(不是用户所需要的),就会再次使已经变成“0”的中断标志IE0或IE1置1,这是绝对不能允许的。因此,电平触发型外部请求的撤除必须使或上低电平随着其中断被CPU响应而变成高电平。
7.351的中断处理过程(1)中断初始化
中断系统初始化步骤如下:1)开相应中断源的中断;2)设定所用中断源的中断优先级;3)若为外部中断,则应规定低电平还是负边沿的中断触发方式。
7.351的中断处理过程(2)主程序的安排
由于单片机复位后PC=0000H,而在0003H-0023H为中断入口地址,为了避免单片机主程序覆盖中断入口地址的程序,往往在0000H处放一条跳转指令,跳转到真正存放主程序的地方:
ORG 0000H ;主程序入口地址
LJMP MAIN ORG 0003H ;中断程序入口地址
LJMP INT0_R ORG 0030H MAIN:…… ;主程序
7.351的中断处理过程(3)编程举例
【例7-2】如图所示,在INT0引脚(P3.2)上接一个按键开关,要求每按一次,P1口连接的8个发光二极管点亮位置下移一位,初态P1.0亮。
按下键输入低电平,没按下为高电平。设置边沿触发,下降沿有效。按键按下产生一个下降沿触发中断,在中断服务程序中对点亮位置左移。初始状态时P1口高电平亮灯,设P1的初值为00000001B=01H。程序如下:ORG 0000H ;主程序入口
LJMP MAIN ORG 0003H ;INT0入口
LJMP INT0_R ORG 0030HMAIN: MOV A,#01H ;初始状态
SETB EA ;开全局中断
SETB EX0 ;开INT0中断
SETB IT0 ;设下降沿触发LOOP: MOV P1,A ;输出 HERE: SJMP LOOP INT0_R: RL A ;中断服务程序
RETI ;中断返回上面的程序,主程序将在LOOP和HERE两句循环执行,等待按键产生中断后进入中断服务程序0003H处,然后跳转到INT0_R处执行真正的中断服务程序。在产生中断的一瞬间,具体是在LOOP或者HERE处产生中断,是随机的,因此中断返回的地址也是随机的。为了保证返回到LOOP处,可以采用修改中断返回点的方法,程序如下:ORG 0000H ;主程序入口
LJMP MAIN ORG 0003H ;INT0入口
LJMP INT0_R ORG 0030HMAIN: MOV A,#01H ;初始状态
SETB EA ;开全局中断
SETB EX0 ;开INT0中断
SETB IT0 ;设下降沿触发LOOP: MOV P1,A ;输出HERE; SJMP LOOPINT0_R: RL A ;中断服务程序
POPDPH POPDPL MOVDPTR#LOOP PUSHDPL PUSHDPH RETI ;中断返回上面的程序是为了让读者充分理解中断和堆栈的关系。如果在中断服务程序中加入一条语句,则可以避免中断返回的地址是随机的情况:ORG 0000H ;主程序入口
LJMP MAIN ORG 0003H ;INT0入口
LJMP INT0_R ORG 0030HMAIN: MOV A,#01H ;初始状态
SETB EA ;开全局中断
SETB EX0 ;开INT0中断
SETB IT0 ;设下降沿触发
MOV P1,A ;输出
SJMP $INT0_R: RL A ;中断服务程序
MOV P1,A RETI ;中断返回7.351的中断处理过程(3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吸痰护理的跨学科合作模式
- 护理病历书写的基本格式与要求
- 护理诊断方法
- 旅游公司市场部负责人的岗位职责与要求
- 快消品行业市场部主管的求职攻略
- 基于自然环境特征的现代社区规划案例
- 基于分布式架构的数据快速高效迁徙方法研究
- 快递行业市场推广岗位面试技巧
- 智能仓储自动化作业系统集成建设方案
- 联想集团销售经理面试要点详解
- 湿巾工厂安全培训
- 核电行业防造假管理制度(3篇)
- 鼻咽癌护理个案
- 卡皮巴拉介绍
- 2025食品广告元宇宙营销场景构建与虚拟技术应用研究报告
- 中小学课程顾问培训
- 期货投资分析报告范文(常用版)3
- 2025广东深圳龙岗区产服集团“春雨”-第三批招聘拟聘用人选笔试历年常考点试题专练附带答案详解2卷
- 手部伤害工厂安全培训课件
- 2025年消防党组织谈心谈话记录范文
- 基于PLC的立体仓库堆垛机智能控制系统设计
评论
0/150
提交评论