
江苏开放大学 JIANGSU OPEN UNIVERSITY 单片机技术及应用 (讲义) 100 0 http://www.jsou.edu.cn/ 顾筠编 2018年11月
单片机技术及应用 (讲义) 顾筠 编 2018 年 11 月


前言与目录 单片机面向控制,在各种机电、电子产品或机电技术中得到广泛应用。单片机课 程融合了数字电子技术、控制技术、软件编程等知识与技能。 本课程围绕MCS-51系列单片机进行学习,课程主要包括有关单片机的基本概念 和基本知识,单片机的组成结构,寻址方式、指令系统和程序设计方法,单片机内部 /O接口单元及应用,外围设备与接口等。 通过本课程的学习,要求: 1.理解单片机相关的基础知识,单片机最小系统: 2.掌握MCS-51的寻址方式和指令系统: 3.掌握单片机程序设计方法: 4.理解单片机接口应用方法:并行口、中断系统、定时计数器、串行口: 5.了解常用外设的接口方法和程序设计方法:AD和D/A接口、LED显示。 本讲义依据单片机的功能应用划分成单元,共有10个单元的学习内容。 第1单元单片机基础概述 第2单元单片机组成结构 第3单元单片机的存储器 第4单元单片机指令系统 第5单元单片机程序设计 第6单元并行接口 第7单元中断系统 第8单元定时器/计数器 第9单元串行接口 第10单元外围设备与接口 每个单元都设置有习题,供同学们思考练习,以巩固学习内容
单片机技术及应用 (讲义) 顾筠 编 2017 年 1 月 前言与目录 单片机面向控制,在各种机电、电子产品或机电技术中得到广泛应用。单片机课 程融合了数字电子技术、控制技术、软件编程等知识与技能。 本课程围绕 MCS-51 系列单片机进行学习,课程主要包括有关单片机的基本概念 和基本知识,单片机的组成结构,寻址方式、指令系统和程序设计方法,单片机内部 I/O 接口单元及应用,外围设备与接口等。 通过本课程的学习,要求: 1.理解单片机相关的基础知识,单片机最小系统; 2.掌握 MCS-51 的寻址方式和指令系统; 3.掌握单片机程序设计方法; 4.理解单片机接口应用方法:并行口、中断系统、定时计数器、串行口; 5.了解常用外设的接口方法和程序设计方法:A/D 和 D/A 接口、LED 显示。 本讲义依据单片机的功能应用划分成单元,共有 10 个单元的学习内容。 第 1 单元 单片机基础概述 第 2 单元 单片机组成结构 第 3 单元 单片机的存储器 第 4 单元 单片机指令系统 第 5 单元 单片机程序设计 第 6 单元 并行接口 第 7 单元 中断系统 第 8 单元 定时器/计数器 第 9 单元 串行接口 第 10 单元 外围设备与接口 每个单元都设置有习题,供同学们思考练习,以巩固学习内容

她片机技米及应用 第5单元单片机程序设计 【导言】 本学习单元主要讲述MCS-51汇编语言程序设计。学习单片机常用编程方法。学习汇编 语言程序设计要多读程序,多练习编程。 【学习目标】 掌握:程序设计的基本步骤,各种基本的程序设计方法。 常用伪指令。 顺序结构程序设计。 分支结构程序设计。 循环结构程序设计。 理解:子程序设计和参数传递。 【学习重点和难点】 1.重点:结构化程序设计基本结构及设计方法。 2.难点:程序设计。 【学习内容】 5.1常用伪指令 5.2顺序结构程序设计 5.3分支结构程序设计 5.4循环结构程序设计 5.5子程序设计和参数传递 5.6程序设计实例
单片机技术及应用 1 第 5 单元 单片机程序设计 【导言】 本学习单元主要讲述 MCS-51 汇编语言程序设计。学习单片机常用编程方法。学习汇编 语言程序设计要多读程序,多练习编程。 【学习目标】 掌 握:程序设计的基本步骤,各种基本的程序设计方法。 常用伪指令。 顺序结构程序设计。 分支结构程序设计。 循环结构程序设计。 理 解:子程序设计和参数传递。 【学习重点和难点】 1.重点:结构化程序设计基本结构及设计方法。 2.难点:程序设计。 【学习内容】 5.1 常用伪指令 5.2 顺序结构程序设计 5.3 分支结构程序设计 5.4 循环结构程序设计 5.5 子程序设计和参数传递 5.6 程序设计实例

第5单元单片机程序设计 用计算机的高级语言或汇编语言将要解决的问题描述出来编制成程序,就是程序设计。 用汇编语言进行程序设计的过程和用高级语言进行程序设计类似。对于比较复杂的问 题,首先要分析问题,找出合理的算法和适当的数据结构:其次,就是用操作框、带箭头的 流程线、框内外必要的文字说明所组成的流程图描述算法:最后是根据流程图用程序设计语 言来编制程序、上机调试程序。 汇编语言是面向机器的语言。单片机汇编语言程序设计与所使用的机器的内部结构有密 切的关系,必须充分了解所使用机器的硬件环境,才能着手进行汇编语言程序设计,特别是 在编制I/O接口程序时,还需了解I/O接口电路及外设的外特性。 为了设计一个高质量的程序,必须掌握程序设计的一般方法。在汇编语言程序设计中, 普遍采用结构化程序设计方法。这种设计方法的主要依据是:任何复杂的程序都可由顺序结 构、分支结构及循环结构等构成。每种结构只有一个入口和出口,整个程序也只有一个入口 和出口。结构化程序设计的特点是程序的结构清晰、易于读写、易于验证、可靠性高。 本章介绍MCS-51的一些常用伪指令,介绍顺序结构程序设计、分支结构程序设计、循 环结构程序设计和子程序的设计。介绍MCS-51常用的程序设计实例,如二进制运算、数码 转换、查表程序、布尔处理程序、定时器/计数器应用程序以及串行口应用程序等。 5.1常用伪指令 汇编语言编制的源程序,必须汇编为机器语言程序,才能在计算机上运行。汇编可以在 计算机上由相应的汇编程序完成,或者手工汇编完成。标准的MCS-51汇编程序(如Intel 公司的ASM51)定义了许多伪指令供用户使用。 伪指令也称为汇编命令,大多数伪指令汇编时不产生机器语言指令,仅提供汇编信息。 最常用的伪指令有七条。 以下伪指令介绍中有些字段用[]括起来表示这个字段可以选择,也可以不选择。 1,ORG定位汇编起始地址 格式: ORGm:确定指令存放位置 m为十进制数或十六进制数。m指出在该伪指令后的第一条指令的起始地址,即在此伪 指令之下的指令的机器码在存储器中的起始存放地址。在一个汇编语言源程序中允许多次使 用定位伪指令,但其值应和前面生成的机器指令存放地址不重叠。 例如: ORG 0100H RESET:MOV A,#00H 2
第 5 单元 单片机程序设计 2 用计算机的高级语言或汇编语言将要解决的问题描述出来编制成程序,就是程序设计。 用汇编语言进行程序设计的过程和用高级语言进行程序设计类似。对于比较复杂的问 题,首先要分析问题,找出合理的算法和适当的数据结构;其次,就是用操作框、带箭头的 流程线、框内外必要的文字说明所组成的流程图描述算法;最后是根据流程图用程序设计语 言来编制程序、上机调试程序。 汇编语言是面向机器的语言。单片机汇编语言程序设计与所使用的机器的内部结构有密 切的关系,必须充分了解所使用机器的硬件环境,才能着手进行汇编语言程序设计,特别是 在编制 I/O 接口程序时,还需了解 I/O 接口电路及外设的外特性。 为了设计一个高质量的程序,必须掌握程序设计的一般方法。在汇编语言程序设计中, 普遍采用结构化程序设计方法。这种设计方法的主要依据是:任何复杂的程序都可由顺序结 构、分支结构及循环结构等构成。每种结构只有一个入口和出口,整个程序也只有一个入口 和出口。结构化程序设计的特点是程序的结构清晰、易于读写、易于验证、可靠性高。 本章介绍 MCS-51 的一些常用伪指令,介绍顺序结构程序设计、分支结构程序设计、循 环结构程序设计和子程序的设计。介绍 MCS-51 常用的程序设计实例,如二进制运算、数码 转换、查表程序、布尔处理程序、定时器/计数器应用程序以及串行口应用程序等。 5.1 常用伪指令 汇编语言编制的源程序,必须汇编为机器语言程序,才能在计算机上运行。汇编可以在 计算机上由相应的汇编程序完成,或者手工汇编完成。标准的 MCS-51 汇编程序(如 Intel 公司的 ASM51)定义了许多伪指令供用户使用。 伪指令也称为汇编命令,大多数伪指令汇编时不产生机器语言指令,仅提供汇编信息。 最常用的伪指令有七条。 以下伪指令介绍中有些字段用[ ]括起来表示这个字段可以选择,也可以不选择。 1.ORG 定位汇编起始地址 格式: ORG m ;确定指令存放位置 m 为十进制数或十六进制数。m 指出在该伪指令后的第一条指令的起始地址,即在此伪 指令之下的指令的机器码在存储器中的起始存放地址。在一个汇编语言源程序中允许多次使 用定位伪指令,但其值 m 应和前面生成的机器指令存放地址不重叠。 例如: ORG 0100H RESET:MOV A,#00H

片机技术及应用 表示MOVA,00H这条指令的机器码在存储器中的起始地址为0100H,即 RESET=0100H,后面指令依次存放。 2.EQU赋值 格式: 变量名/标号EQU m:给变量或标号赋予一个确定的值 当给变量赋值时,m是一个确定的数值:当给标号赋值时,m是一个四位16进制数, 即程序存储器的地址值。 例如: DATE EQU 4BH STAT EQU 1200H 第一条伪指令使变量DATE=4BH,第二条伪指令使标号STAT=1200H 3.DB定义数据字节 格式: [变量名:]DB X1,X2,X3,…Xn:定义字节数据 X为单字节数据,可为十进制数或十六进制数或一个表达式。Xⅰ也可以为由两个引号 “”所括起来的一个ASCI码字符串,这时X定义的字节长度等于字符串的长度,每一个 字符为一个ASCII码。 该伪指令把字节数据X1、X2、·、X存放在程序存储器中,通常用于定义一个常数字 节表,表的首地址为变量名所在的地址。 例如: DB 34H,50H,3FH TABL:DB “THIS IS EXAMPLE!” 第一条伪指令表示存储器中有三字节数据为34H、50H、3FH。第二条伪指令表示在存 储器中TABL开始的存储单元中存放着ASCI码字符串“THIS IS EXAMPLE!”。 4.DW定义数据字 格式: [变量名:]DW X1,X2,…,Xn :定义字数据 此处X为双字节数据,可以为十进制数或十六进 制数,也可以为一个表达式。 ADL 02 TABI ADL+1 00 该伪指令把X1、X2、·、Xn存放在程序存储器中, ADL+2 02 高位字节存放在低地址单元,低位字节存放在高地址单 -TAB2 ADL+3 2F 元,经常用于定义一个地址表。 ADL+4 02 -TAB3 ADL+5 E0 例如:ADL:DW TAB1,TAB2,TAB3 其中TAB1、TAB2、TAB3为符号地址。 图5-1伪指令DW存放格式示意图 若TAB1、TAB2、TAB3为0200H,022FH,02E0H, 则其在存储器中的存放格式如图5-1所示。 5.DS定义存储区 2
单片机技术及应用 3 表示 MOV A,#00H 这条指令的机器码在存储器中的起始地址为 0100H,即 RESET=0100H,后面指令依次存放。 2.EQU 赋值 格式: 变量名/标号 EQU m ;给变量或标号赋予一个确定的值 当给变量赋值时,m 是一个确定的数值;当给标号赋值时,m 是一个四位 16 进制数, 即程序存储器的地址值。 例如: DATE EQU 4BH STAT EQU 1200H 第一条伪指令使变量 DATE = 4BH,第二条伪指令使标号 STAT = 1200H 3.DB 定义数据字节 格式: [变量名:] DB X1,X2,X3,…Xn ;定义字节数据 Xi 为单字节数据,可为十进制数或十六进制数或一个表达式。Xi 也可以为由两个引号 “ ”所括起来的一个 ASCII 码字符串,这时 Xi 定义的字节长度等于字符串的长度,每一个 字符为一个 ASCII 码。 该伪指令把字节数据 X1、X2、…、Xn 存放在程序存储器中,通常用于定义一个常数字 节表,表的首地址为变量名所在的地址。 例如: DB 34H,50H,3FH TABL: DB “THIS IS EXAMPLE!” 第一条伪指令表示存储器中有三字节数据为 34H、50H、3FH。第二条伪指令表示在存 储器中 TABL 开始的存储单元中存放着 ASCII 码字符串“THIS IS EXAMPLE!”。 4.DW 定义数据字 格式: [变量名:] DW X1,X2,…,Xn ;定义字数据 此处 Xi 为双字节数据,可以为十进制数或十六进 制数,也可以为一个表达式。 该伪指令把 X1、X2、…、Xn 存放在程序存储器中, 高位字节存放在低地址单元,低位字节存放在高地址单 元,经常用于定义一个地址表。 例如: ADL: DW TAB1,TAB2,TAB3 其中 TAB1、TAB2、TAB3 为符号地址。 若 TAB1、TAB2、TAB3 为 0200H,022FH,02E0H, 则其在存储器中的存放格式如图 5-1 所示。 5.DS 定义存储区 图 5-1 伪指令 DW 存放格式示意图 ADL E0 TAB1 02 00 02 2F 02 TAB2 TAB3 ADL+1 ADL+2 ADL+3 ADL+4 ADL+5

第5单元单片机程序设计 格式: [变量名:】DS n:保留n字节的存储单元 例如:ORG 0120H DS 该伪指令表示从0120H地址开始,预留出5个字节的存储单元来,以便为程序所用。 6.BT定义位地址 格式: 字符名BT m:确定字符名为确定的位地址m 例如: BTNM BIT 04H 该伪指令定义BTNM为位地址04H。 7.END汇编结束 格式 END :结束汇编 该伪指令指出结束汇编,即使后面还有指令,汇编程序也不作处理。 不同的汇编程序所支持的伪指令不尽相同,具体使用时需注意。 5.2顺序结构程序设计 顺序结构是最简单的一种基本结构。如果某一个需要解决的问题可以分解成若干个简单 的操作步骤,并且可以由这些操作按一定的顺序构成一种解决问题的算法,则可用简单的顺 序结构来进行程序设计。 5.2.1顺序程序的结构 入,▣ 顺序程序又称为直线程序,在执行程序时,从第一条指 操作步骤A 令开始,顺序执行直到最后一条指令为止。用程序流程图表 示时,是一个处理框紧接着一个处理框,如图5-2所示。 操作步骤B 操作步骤C 出口 图5-2顺序程序的结构形式
第 5 单元 单片机程序设计 4 格式: [变量名:] DS n ;保留 n 字节的存储单元 例如: ORG 0120H DS 5 该伪指令表示从 0120H 地址开始,预留出 5 个字节的存储单元来,以便为程序所用。 6.BIT 定义位地址 格式: 字符名 BIT m;确定字符名为确定的位地址 m 例如: BTNM BIT 04H 该伪指令定义 BTNM 为位地址 04H。 7.END 汇编结束 格式: END ;结束汇编 该伪指令指出结束汇编,即使后面还有指令,汇编程序也不作处理。 不同的汇编程序所支持的伪指令不尽相同,具体使用时需注意。 5.2 顺序结构程序设计 顺序结构是最简单的一种基本结构。如果某一个需要解决的问题可以分解成若干个简单 的操作步骤,并且可以由这些操作按一定的顺序构成一种解决问题的算法,则可用简单的顺 序结构来进行程序设计。 5.2.1 顺序程序的结构 顺序程序又称为直线程序,在执行程序时,从第一条指 令开始,顺序执行直到最后一条指令为止。用程序流程图表 示时,是一个处理框紧接着一个处理框,如图 5-2 所示。 图 5-2 顺序程序的结构形式 操作步骤 A 操作步骤 B 操作步骤 C 入 口 出 口

片机技术及应用 5.2.2顺序程序设计方法 例5-1:16位二进制数的“求补”操作。设有16位二进制数存放在R4R3中(R4中存 放高位,R3中存放低位),试编写一程序段实现16位二进制数“求补”操作。 分析:16位二进制数的“求补”操作可通过求反加1实现。求反指令CPL的执行不影 响标志位,故低位求反后加1,如果有进位CY将保持。注意高位求反后要加进位CY。 源程序如下: CPS16: MOV A,R3 CPL A :低位求反 ADD A,#01 :低位加1 MOV R3,A MOV A,R4 CPL A :高位求反 ADDC A,#00 :高位加进位位CY MOV R4,A 例5-2:BCD码转换成ASCI码。内部RAM的50H单元,存放着一个2位的BCD码, 将其转换成相应的ASCⅡ码,存放在51H和52H单元,转换结果高位存于51H单元。 分析:一个字节的2位BCD码要转换成ASCⅡ码,首先需将此2位BCD码拆开并放在 另二个单元的低4位。可使用XCHD指令通过半字节交换,实现将2位的BCD码拆开,低 位BCD码在52H单元低半字节,高半字节为0:高位BCD码在A中高半字节,低半字节为 0。再通过SWAP指令将A中高位BCD码调整到低半字节,A中高半字节为0。数字09 的ASCI码为30H~39H。已经拆开并放在单元低4位的BCD码,因其高4位为0,故用立 即数30H进行或(ORL)运算即可将其高4位赋以0011,从而完成BCD码到ASCⅡ码的转 换。其流程图如图5-3所示。 开始 将50H中2位BCD码拆成两个1位BCD 高位BCD码转换成ASCI码→51H 低位BCD码转换成ASCI码→52H 结束 图5-3BCD码转换成ASCII码
单片机技术及应用 5 5.2.2 顺序程序设计方法 例 5-1:16 位二进制数的“求补”操作。设有 16 位二进制数存放在 R4R3 中(R4 中存 放高位,R3 中存放低位),试编写一程序段实现 16 位二进制数“求补”操作。 分析:16 位二进制数的“求补”操作可通过求反加 1 实现。求反指令 CPL 的执行不影 响标志位,故低位求反后加 1,如果有进位 CY 将保持。注意高位求反后要加进位 CY。 源程序如下: CPS16: MOV A,R3 CPL A ;低位求反 ADD A,#01 ;低位加 1 MOV R3,A MOV A,R4 CPL A ;高位求反 ADDC A,#00 ;高位加进位位 CY MOV R4,A 例 5-2:BCD 码转换成 ASCII 码。内部 RAM 的 50H 单元,存放着一个 2 位的 BCD 码, 将其转换成相应的 ASCII 码,存放在 51H 和 52H 单元,转换结果高位存于 51H 单元。 分析:一个字节的 2 位 BCD 码要转换成 ASCII 码,首先需将此 2 位 BCD 码拆开并放在 另二个单元的低 4 位。可使用 XCHD 指令通过半字节交换,实现将 2 位的 BCD 码拆开,低 位 BCD 码在 52H 单元低半字节,高半字节为 0;高位 BCD 码在 A 中高半字节,低半字节为 0。再通过 SWAP 指令将 A 中高位 BCD 码调整到低半字节,A 中高半字节为 0。数字 0~9 的 ASCII 码为 30H~39H。已经拆开并放在单元低 4 位的 BCD 码,因其高 4 位为 0,故用立 即数 30H 进行或(ORL)运算即可将其高 4 位赋以 0011,从而完成 BCD 码到 ASCII 码的转 换。其流程图如图 5-3 所示。 图 5-3 BCD 码转换成 ASCII 码 将50H中2位BCD码拆成两个1位BCD 结 束 开 始 高位 BCD 码转换成 ASCII 码→51H 低位 BCD 码转换成 ASCII 码→52H

第5单元单片机程序设计 源程序如下: MOV R0,#52H :R0=52H MOV @R0,#00H :52H单元清0 MOV A,50H :BCD码送A XCHD A,@R0 :低位BCD码在52H,高位BCD码在A中 ORL 52H,#30H :低位BCD码转换成ASCI码 SWAP A ;高位BCD码调整到低位 ORL A,#30H :高位BCD码转换成ASCI码 MOV 51H,A :高位BCD码的ASCI码送51H 5.3分支结构程序设计 顺序结构程序设计是最基本的程序设计技术。但在实际的程序设计中,有很多情况还需 要程序按照不同的条件进行相应的处理。这时须对某一个变量所处的状态进行判断,根据判 断结果来决定程序的流向,这就是分支结构程序设计。 在编写分支程序时,关键是如何判断分支的条件。在MCS-51单片机指令系统中,有JZ (NZ)、JC(JNC)、JB(JNB)及CNE等控制转移指令,它们是分支结构程序设计的基 础,可以完成各种各样的条件判断分支。 5.3.1分支程序的结构 分支程序的结构可以有两种形式,如图5-4所示。 N 判断条件 判断条件 分支1 分支2 分支 分支2 分支n t (a)IF-THEN-ELSE结构 (b)CASE结构 图5-4 分支程序的结构形式 这两种结构分别相当于高级语言中的IF-THEN-ELSE语句和CASE语句,适用于根据 不同条件作不同处理的情况。F-THEN-ELSE结构可以引出两个分支,CASE结构可以引出 6
第 5 单元 单片机程序设计 6 源程序如下: MOV R0,#52H ;R0=52H MOV @R0,#00H ;52H 单元清 0 MOV A,50H ;BCD 码送 A XCHD A,@R0 ;低位 BCD 码在 52H,高位 BCD 码在 A 中 ORL 52H,#30H ;低位 BCD 码转换成 ASCII 码 SWAP A ;高位 BCD 码调整到低位 ORL A,#30H ;高位 BCD 码转换成 ASCII 码 MOV 51H,A ;高位 BCD 码的 ASCII 码送 51H 5.3 分支结构程序设计 顺序结构程序设计是最基本的程序设计技术。但在实际的程序设计中,有很多情况还需 要程序按照不同的条件进行相应的处理。这时须对某一个变量所处的状态进行判断,根据判 断结果来决定程序的流向,这就是分支结构程序设计。 在编写分支程序时,关键是如何判断分支的条件。在 MCS-51 单片机指令系统中,有 JZ (JNZ)、JC(JNC)、JB(JNB)及 CJNE 等控制转移指令,它们是分支结构程序设计的基 础,可以完成各种各样的条件判断分支。 5.3.1 分支程序的结构 分支程序的结构可以有两种形式,如图 5-4 所示。 这两种结构分别相当于高级语言中的 IF-THEN-ELSE 语句和 CASE 语句,适用于根据 不同条件作不同处理的情况。IF-THEN-ELSE 结构可以引出两个分支,CASE 结构可以引出 图 5-4 分支程序的结构形式 (a) IF-THEN-ELSE 结构 判断条件 分支 1 分支 2 Y N (b) CASE 结构 判断条件 分支 1 分支 2 … 分支 n

片机技术及应用 多个分支,不论哪一种形式,它们的共同特点是:运行方向是向前的,在某一种确定条件下, 只能执行多个分支中的一个分支。 在MCS-51中,所谓的多分支(CASE)结构,主要是指散转指令与查表指令结合,可 以使程序根据不同的条件转移到多个分支去。 5.3.2分支程序设计方法 例5-3:符号函数赋值。设x值在R2中,试编制一程序,根据R2中数值为正、为负或 为0,给符号函数y赋值,y值存放在内部RAM的30H单元中。 +1 (x>0) y=- 0 (x=0) -1 (x0? (30HD+-0 30H)- (30HD 结束 图5-5 符号函数赋值流程图 源程序如下: SIGN:MOV A,R2 :取出x送A JZ PEND :x=O转PEND JNB ACC.7,PLUS :x>0正数,转到PLUS MOV A,#OFFH ;x
单片机技术及应用 7 多个分支,不论哪一种形式,它们的共同特点是:运行方向是向前的,在某一种确定条件下, 只能执行多个分支中的一个分支。 在 MCS-51 中,所谓的多分支(CASE)结构,主要是指散转指令与查表指令结合,可 以使程序根据不同的条件转移到多个分支去。 5.3.2 分支程序设计方法 例 5-3:符号函数赋值。设 x 值在 R2 中,试编制一程序,根据 R2 中数值为正、为负或 为 0,给符号函数 y 赋值,y 值存放在内部 RAM 的 30H 单元中。 分析:由于 x 为有符号数,因此可以根据它的符号位来决定其正负。可用 JB 或 JNB 指 令判别符号位是否为 1,用累加器判零指令来判别 x 是否为 0。此例为最典型的分支程序, 是由顺序结构+分支结构组成的,并且在分支结构中又嵌套了另一个分支结构。每一次条件 判断形成二个分支,共有三个分支,对于 R2 中的一个数,只能是三个分支中的某一个。 程序流程图如图 5-5 所示 。 源程序如下: SIGN: MOV A,R2 ;取出 x 送 A JZ PEND ;x=0 转 PEND JNB ACC.7, PLUS ;x>0 正数,转到 PLUS MOV A,#0FFH ;x0) y = 0 (x=0) -1 (x 0 ? 结 束