《安徽大学历次单片机作业与课程设计.doc》由会员分享,可在线阅读,更多相关《安徽大学历次单片机作业与课程设计.doc(37页珍藏版)》请在三一办公上搜索。
1、单片机原理与应用第一次作业学号: 姓名:目录一、题目二、软件三、硬件一、题目 题目:广告灯控制系统内容:做宣传广告时,为了使广告内容醒目,引人注意,往往用灯光闪烁或明暗对比等手段。设有8个广告字,每次亮一个字,亮10ms,依次左移,然后依次右移,循环不止。要求:以LED发光二极管代替广告字,程序延时。硬件:画出硬件电路原理图,考虑LED的驱动问题。软件:画出程序流程图,编写源程序。调试:记录调试过程,分析调试结果。 二、软件1.源程序:ORG 0000H ;定义起始地址 MOV A,#01111111B ;将二进制立即数01111111B放到累加器A中 LJMP START ;长转移到STAR
2、T函数 ORG 0100H ;定义START函数的起始地址START: MOV R0,#7 ;将十进制立即数7放到寄存器R0中 MOV R1,#7 ;将十进制立即数7放到寄存器R1中 LEFT: MOV P1,A ;将A中的内容送到P1口,只有P1.7为低电平,该处二极管被点亮 LCALL DEL10ms ;延时10ms RR A ;将A中的内容右移一位,相应地,低电平所处位置左移一位 DEC R0 ;将R0中的内容减1 CJNE R0,#0,LEFT ;判断R0是否为0,若不是则转移到LEFT函数起始位置,若是则程序顺序执行 RIGHT: MOV P1,A ;将A中的内容送到P1口,此时只有
3、P1.0为低电平,该处二极管被点亮 LCALL DEL10ms ;延时10ms RL A ;将A中的内容左移一位,相应地,低电平所处位置右移一位 DEC R1 ;将R1中的内容减1 CJNE R1,#0,RIGHT ;判断R1是否为0,若不是则转移到RIGHT函数起始位置,若是则程序顺序执行 LJMP START ;长转移到START函数DEL10ms: MOV R7,#25 ;将十进制立即数25放到寄存器R7中DEL1: MOV R6,#200 ;将十进制立即数200放到寄存器R6中DEL2: DJNZ R6,DEL2 ;将R6中的内容减1,判断R6是否为0,若否则转移到DEL2函数起始位置
4、,否则程序顺序执行 DJNZ R7,DEL1 ;将R7中的内容减1,判断R7是否为0,若否则转移到DEL1函数起始位置,否则程序顺序执行 RET ;返回到调用DEL10ms函数的语句的下一条语句END ;程序结束的标志,因为上述程序中有死循环,所以目标程序执行不到这一步注:上述程序已用Proteus 7.8中调试过,能满足题目要求。调试方法为设置执行指定时间分别为10ms,20ms,30ms等整十毫秒,看执行完毕后发光的那个二极管符不符合预期。2. 收获:(1)其实此次作业若在上完第四单元后布置会更好,因为第三章只教了一些指令,第四章教的才是单片机汇编语言程序设计,不过提前布置可以督促大家预习
5、第四单元。(2)写程序的过程中,我深切的感受到了汇编语言指令中的标号带来的便利,其功能实际上与C语言的函数名相同,是为了方便调用或转移。(3)51单片机所有I/O口上电之后全部默认为高电平,想让某一发光二极管发光,就要用程序来使其一端为高电平,另一端为低电平。 (4)上述程序中延时10ms的延时程序是由教材第65面例4-14的延时50ms的延时程序改编而来,我在照搬书上的延时程序,并下载到单片机中或用Proteus 7.8进行仿真时发现只有最右边的二极管发光。认真研究后知道SJMP $其实就是HERE;SJMP HERE的意思,是一个死循环,将其删除后才能正常调用延时函数。三、硬件1.原理图:
6、原理图如下图一所示:图一 用Proteus 7.8绘制的原理图2.考虑LED的驱动问题二极管选用的是红色超亮发光二极管(LED-RED),其参数如下图二所示:图中显示其完全驱动电流为10mA,正向导通压降为2.2V,反向击穿电压为4V,为保证发光二极管被完全驱动,上拉电阻的阻值应为(5-2.2)V/10mA=280,由于图中未给出发光二极管额定电流,故无法计算使发光二极管通过额定电流时的上拉电阻阻值。 图二 LED-RED的参数单片机原理与应用第二次作业学号: 姓名:目录 一、题目及解题思路 二、硬件电路原理图 三、程序流程图与源程序 四、编程时遇到的问题一、题目及解题思路1.题目:汽车方向灯
7、控制系统2.内容:汽车在行驶时,有左转弯、右转弯、刹车、警示、停靠等操作。左转弯时,应使左头灯、左尾灯、仪表板左转指示灯闪烁。右转弯时,应使右头灯、右尾灯、仪表板右转指示灯闪烁。刹车时,左右两个尾灯亮。警示时,头灯、尾灯、仪表板指示灯等6个灯全闪烁。汽车停靠时,左右头灯、左右尾灯高频闪烁。3.要求:用按键开关代表汽车的相关操作,以LED发光二极管代替汽车灯。高频闪烁频率为30Hz,其它闪烁频率为1Hz。4.解题思路: 题目只考虑了只按下某一个按键开关时头灯、尾灯、仪表板指示灯的工作状态。为将所有情况都考虑进去,需补上没有任何按键开关按下和同时有多个按键开关按下这两类情况。按照常理,没有任何按键
8、开关按下时,所有指示灯都应该处于熄灭状态。对于该题,同时有多个按键按下属于一种错误,这时应以某种方式提醒驾驶者,考虑到仪表板指示灯位于车内,可让仪表板左转指示灯和仪表板右转指示灯闪烁同时高频闪烁来提醒车内的驾驶者同时有多个按键被按下。频率是周期的倒数,闪烁频率为1Hz意为1s闪一次,30Hz为1s闪30次,即约33333us闪一次。为此,可设计一个500ms的延时子程序,使灯在1s内亮灭各一次,设置一个16640us的延时子程序,使灯在33280us内亮灭各一次(这里采取了近似的做法)。为满足题目中用按键开关控制LED发光二极管的要求,可以将所有按键开关的一端全部连在P2口,另一端全部接地,将
9、P2口作为输入端。将所有LED发光二极管的一端全部连在P1口,另一端全部接+5V高电平,将P1口作为输出端。这样便将按键开关控制LED发光二极管转化为输入端控制输出端。二、硬件电路原理图硬件电路原理图如下图一所示:图一 用Proteus 7.8绘制的硬件电路原理图 因为在电路图中插入太多汉字后再进行仿真会使Proteus 7.8卡住,从而无法仿真。所以上述原理图中未用汉字标注每一个元器件的含义。现说明如下:S1、S2、S3、S4、S5分别表示左转弯指示按键开关、右转弯指示按键开关、刹车指示开关、警示指示开关、停靠指示开关,D1、D2、D3、D4、D5、D6分别表示左尾灯、左头灯、仪表板左转指示
10、灯、仪表板右转指示灯、右头灯、右尾灯,R1R6均为上拉电阻。和上次交的作业一样,二极管选用的是红色超亮发光二极管(LED-RED),其参数如下图二所示,图中显示其完全驱动电流为10mA,正向导通压降为2.2V,反向击穿电压为4V,为保证发光二极管被完全驱动,上拉电阻的阻值应为(5-2.2)V/10mA=280,由于图中未给出发光二极管额定电流,故无法计算使发光二极管通过额定电流时的上拉电阻阻值。 图二 LED-RED的参数三、 程序流程图与源程序1. 流程图(用Edraw Mind Map 7.8制作): 2.源程序:ORG 0000H MOV R0,#1FH JMP STARTORG 010
11、0H START: MOV A,P2 CJNE A,#0FFH,NUM1 JMP NEXT1NUM1: CJNE A,#0FEH,NUM2 JMP NEXT2NUM2: CJNE A,#0FDH,NUM3 JMP NEXT3NUM3: CJNE A,#0FBH,NUM4 JMP NEXT4NUM4: CJNE A,#0F7H,NUM5 JMP NEXT5NUM5: CJNE A,#0EFH,ERROR JMP NEXT6NEXT1: MOV P1,#0FFH ;NEXT1在未按下任何按键时使用 JMP STARTNEXT2: MOV P1,#0F8H ;NEXT2为左转弯指示命令 CALL D
12、EL500ms MOV P1,#0FFH CALL DEL500ms JMP STARTNEXT3: MOV P1,#0C7H ;NEXT3为右转弯指示命令 CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JMP STARTNEXT4: MOV P1,#0DEH ;NEXT4为刹车指示命令 JMP START NEXT5: MOV P1,#0C0H ;NEXT5为警示指示命令 CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JMP STARTNEXT6: MOV P1,#0CCH ;NEXT6为停靠指示命令 CALL DEL1
13、6640us MOV P1,#0FFH CALL DEL16640us JMP STARTERROR: MOV P1,#0F3H ;ERROR在同时按下了两个及以上按键时使用 CALL DEL16640us MOV P1,#0FFH CALL DEL16640us JMP STARTDEL500ms: MOV R7,#25 ;延时500msDEL1: MOV R6,#200DEL2: MOV R5,#50DEL3: DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1 RETDEL16640us:MOV R7,#65 ;延时16640us DEL4: MOV R6,#1
14、28DEL5: DJNZ R6,DEL5 DJNZ R7,DEL4 RETEND四、 编程时遇到的问题以下是我编写的另一个程序,仿真结果表明它也满足题意,但其中有一个问题。ORG 0000H LJMP STARTORG 0100H START: MOV A,P2 MOV R1,A SUBB A,#0FFH JZ NEXT1 MOV A,R1 SUBB A,#0FDH JZ NEXT2 MOV A,R1 SUBB A,#0FCH JZ NEXT3 MOV A,R1 SUBB A,#0FAH JZ NEXT4 MOV A,R1 SUBB A,#0F6H JZ NEXT5 MOV A,R1 SUBB
15、 A,#0EEH JZ NEXT6 JMP ERRORNEXT1: MOV P1,#0FFH ;NEXT1在未按下任何按键时使用 JMP STARTNEXT2: MOV P1,#0F8H ;NEXT2为左转弯指示命令 CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JMP STARTNEXT3: MOV P1,#0C7H ;NEXT3为右转弯指示命令 CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JMP STARTNEXT4: MOV P1,#0DEH ;NEXT4为刹车指示命令 JMP START NEXT5: MOV P
16、1,#0C0H ;NEXT5为警示指示命令 CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JMP STARTNEXT6: MOV P1,#0CCH ;NEXT6为停靠指示命令 CALL DEL16640us MOV P1,#0FFH CALL DEL16640us JMP STARTERROR: MOV P1,#0F3H ;ERROR在同时按下了两个及以上按键时使用 CALL DEL16640us MOV P1,#0FFH CALL DEL16640us JMP STARTDEL500ms: MOV R7,#25 ;延时500msDEL1: MOV R6,#
17、200DEL2: MOV R5,#50DEL3: DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1 RETDEL16640us:MOV R7,#65 ;延时16640us DEL4: MOV R6,#128DEL5: DJNZ R6,DEL5 DJNZ R7,DEL4 RETEND该源程序的问题为:按照原理图和SUBB指令的定义(SUBB A,#data的功能为AA-data-CY),当未按下任何按键时,P2口输入的数据为0FFH。为判断是否有按键被按下,可以将P2口中的数值传送到累加器A中,再执行SUBB A,#0FEH,之后判断A的值是否为0,若是,则表明没有任
18、何按键被按下。但仿真结果表明,如果这样,则上述程序中画横线处的5条语句均无法按照所希望的那样被执行,而其他语句能够行使相应功能。但将SUBB A,#0FEH改为SUBB A,#0FFH,所有语句反而都能满足题目要求。 单片机原理与应用第三次作业学号: 姓名:目录 一、题目 二、硬件电路原理图 三、程序流程图与源程序一、题目及解题思路1.题目:8人抢答器。2.内容:在知识竞赛等场合,抢答器是经常用到的产品。用单片机设计一个具有优先权的8人抢答器,0号抢答器优先权最高,7号抢答器优先权最低。8位选手,8轮抢答,每位选手可以申请一次0号抢答器,1号抢答器,7号抢答器。也可以按照选手分数高低分配抢答器
19、优先级,如分数最低者用0号抢答器,一次类推。抢答成功者,对应的指示灯闪烁。3.要求:用按键开关代表抢答器按键操作,以LED发光二极管代替指示灯。闪烁频率为1Hz。(1)硬件:画出硬件电路原理图,考虑中断源扩展。 (2)软件:画出程序流程图,编写源程序,考虑优先级问题。 (3)调试:记录调试过程,分析调试结果。 二、硬件电路原理图硬件电路原理图如下图一所示:图一 用Proteus 7.8绘制的硬件电路原理图 因为在电路图中插入太多汉字后再进行仿真会使Proteus 7.8卡住,从而无法仿真。所以上述原理图中未用汉字标注每一个元器件的含义。现说明如下:START按键被按下表示允许抢答,END按键被
20、按下表示将所有发光二级管熄灭。START与END按键按下后不允许被自动弹开,按下其中一个按键前应将另一个断开,否则不起作用。为方便选手抢答,S0、S1、S2、S3、S4、S5、S6、S7按键按下后可被自动弹开(前提是按下的时间稍长,能被检测到,超过几个微秒即可),它们分别表示0、1、2、3、4、5、6、7号抢答器。若在规定的抢答时间内,同时被按下的所有按键中Si(i=0,1,2,3,4,5,6,7)的优先级最高,则发光二极管Di闪烁。若抢答时间结束且在规定时间内无任何抢答器对应的按键被按下,则D8亮。和上次交的作业一样,二极管选用的是红色超亮发光二极管(LED-RED),其参数如下图二所示,图
21、中显示其完全驱动电流为10mA,正向导通压降为2.2V,反向击穿电压为4V,为保证发光二极管被完全驱动,上拉电阻的阻值应为(5-2.2)V/10mA=280,由于图中未给出发光二极管额定电流,故无法计算使发光二极管通过额定电流时的上拉电阻阻值。 图二 LED-RED的参数五、 程序流程图与源程序2. 流程图(用Edraw Mind Map 7.8制作): 2.源程序:ORG 0000H JMP STARTORG 0003H JMP INT_0ORG 0013H JMP INT_1ORG 0100HSTART: MOV SP,#60H SETB EX0 SETB IT0 SETB EX1 SET
22、B IT0 SETB EA JMP INT_0ORG 0200HINT_0: JNB P3.1,INT_0 ;保证只有在END按键断开时START按键才起作用 JNB P3.0,INT_1 INT_1: MOV R7,#25 ;以下隐含了延时30s(实为30018075us)的延时程序DEL1: MOV R6,#240DEL2: MOV R5,#250DEL3: JB P3.0,INT_0 JNB P2.0,EXINT1 ;若S0被按下,则跳转到EXINT1 JNB P2.1,EXINT2 ;若S1被按下,则跳转到EXINT2 JNB P2.2,EXINT3 ;若S2被按下,则跳转到EXINT
23、3 JNB P2.3,EXINT4 ;若S3被按下,则跳转到EXINT4 JNB P2.4,EXINT5 ;若S4被按下,则跳转到EXINT4 JNB P2.5,EXINT6 ;若S5被按下,则跳转到EXINT5 JNB P2.6,JUMP2 ;若S6被按下,则跳转到EXINT6 JNB P2.7,JUMP3 ;若S7被按下,则跳转到EXINT8 DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1 JMP VOID ;若30s内无人抢答,则跳转到VOIDRECOV: MOV P0,#0FFH MOV P1,#0FFH JB P3.0,INT_0 ;若START按键被断
24、开,则跳转到INT_0 JMP RECOVEXINT1:MOV P1,#0FEH CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EXINT1 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,RECOV ;若END按键被按下,则跳转到RECOV JMP EXINT1EXINT2:MOV P1,#0FDH CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EXINT2 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,RECOV ;若END按键被按下,则
25、跳转到RECOV JMP EXINT2EXINT3:MOV P1,#0FBH CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EXINT3 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,RECOV ;若END按键被按下,则跳转到RECOV JMP EXINT3EXINT4:MOV P1,#0F7H CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EXINT4 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,RECOV ;若END按键被按下,则跳转
26、到RECOV JMP EXINT4JUMP1: JMP RECOV ;中继JUMP2: JMP EXINT7 ;中继JUMP3: JMP EXINT8 ;中继EXINT5:MOV P1,#0EFH CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EXINT5 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,RECOV ;若END按键被按下,则跳转到RECOV JMP EXINT5EXINT6:MOV P1,#0DFH CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EX
27、INT6 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,RECOV ;若END按键被按下,则跳转到RECOV JMP EXINT6EXINT7:MOV P1,#0BFH CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EXINT7 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,JUMP1 ;若END按键被按下,则跳转到JUMP1 JMP EXINT7EXINT8:MOV P1,#7FH CALL DEL500ms MOV P1,#0FFH CALL DEL500ms JNB P3.0,EXINT
28、8 ;保证只有在START按键断开时END按键才起作用 JNB P3.1,JUMP1 ;若END按键被按下,则跳转到JUMP1 JMP EXINT8VOID: MOV P0,#0FEH JNB P3.0,VOID ;保证只有在START按键断开时END按键才起作用 JNB P3.1,JUMP1 ;若END按键被按下,则跳转到JUMP1 JMP VOID DEL500ms: MOV R7,#25 ;延时500ms(实为498825us)DEL4: MOV R6,#50DEL5: MOV R5,#198DEL6: DJNZ R5,DEL6 DJNZ R6,DEL5 DJNZ R7,DEL4 RET
29、END 说明:1.上述源程序中的中断没有实际用途,只是迫于题目要求而加了进去。因为上述源程序的主体是两个中断INT_0与INT_1,其他子程序只是为其服务,所以源程序的中断不会对其他程序产生干扰,故没有进行现场保护与现场恢复。又因为两个中断之间形成了无限循环,所以没有加RETI指令;2.查附录B可知,执行一条JNB或JB或DJNZ指令需要24个晶振周期。则在已经选定晶振频率为12MHz的情况下(如下图三、图四所示),执行一条JNB或JB或DJNZ指令需要的时间为2us,由此可设计延时子程序DEL500ms和隐含在INT_1、DEL1、DEL2和DEL3中的30s延时程序;3.JNB位移控制转移
30、指令能转移的范围有限。JUMP1、JUMP2、JUMP3的作用是帮助相应的JNB指令转移到其想转移到却超出其转移范围的地方,相当于中继。Keil uVision2中的选项对话框 Proteus 7.8中的选项对话框单片机原理与应用第四次作业学号: 姓名:目录 一、题目 二、硬件电路原理图 三、程序流程图与源程序 四、按题目要求设计却不能实现相关功能的原理图及其源程序一、 题目及解题思路1.题目:双机通讯2.内容:单片机串行通讯,需要的数据线少,且适合远距离传送,因此,应用广泛。设计一个双机通讯系统。要求甲机将从内部RAM 40H开始的16个字节数据发送给乙机。乙机接收后将数据存放到内部RAM
31、60H开始的区域,采用奇校验验证数据传送的正确性。3.要求:用按键开关启动传送,也可以用按键开关停止传送,数据传送期间LED发光二极管闪烁,闪烁频率为1Hz。 (1)硬件:画出硬件电路原理图,考虑按键中断及双机传送数据线的连接。 (2)软件:画出程序流程图,编写源程序,考虑LED闪烁问题。 (3)调试:记录调试过程,分析调试结果。二、硬件电路原理图硬件电路原理图如下图一所示(未使用中断): 图一 用Proteus 7.8绘制的硬件电路原理图 因为在电路图中插入太多汉字后再进行仿真会使Proteus 7.8卡住,从而无法仿真。所以上述原理图中未用汉字标注每一个元器件的含义。现说明如下:U1为甲机
32、(发送数据),U2为乙机(接收数据)。按键开关闭合表示允许甲机发送数据,断开表示暂停甲机发送数据。甲机发送数据时,D1闪烁。和上次交的作业一样,二极管选用的是红色超亮发光二极管(LED-RED),其参数如下图二所示,图中显示其完全驱动电流为10mA,正向导通压降为2.2V,反向击穿电压为4V,为保证发光二极管被完全驱动,上拉电阻的阻值应为(5-2.2)V/10mA=280,由于图中未给出发光二极管额定电流,故无法计算使发光二极管通过额定电流时的上拉电阻阻值。 图二 LED-RED的参数六、 程序流程图与源程序3. 流程图(用Edraw Mind Map 7.8制作): 4. 源程序:由教材第1
33、09面例7-4改编,没有使用中断,若乙机接收数据后校验正确,则向甲机回复正确标志FFH;若发现错误,则向甲机发送错误标志00H,并等待重新接收。如下:甲机发送程序:ORG 0000H JMP STARTORG 0100H JMP TRLPSTART: MOV SCON,#80H ;置串行方式2,禁止接收 ORL PCON,#80H ;置SMOD=1 MOV R0,#40H ;置发送数据区首址TRLP: MOV A,R0 ;读数据 MOV C,PSW.0 ;奇偶标志送TB8 MOV TB8,CRE: MOV R1,#248 ;根据闪烁频率为1Hz计算得出 MOV R2,#2 MOV R3,#24
34、8 MOV R4,#2 JB P1.5,STOP ;判断按键是否按下,若是,顺序执行,否则跳转 MOV SBUF,A ;启动发送 JNB TI,$ ;等待一帧数据发送完毕 CLR TI ;清发送中断标志 SETB REN ;允许接收 CLR RI ;清接收中断标志 JNB RI,$ ;等待接收回复信号L1: CLR P1.0 CALL DEL JB P1.5,STOP DJNZ R1,L1 MOV R1,#248 DJNZ R2,L1L2: SETB P1.0 CALL DEL JB P1.5,STOP DJNZ R3,L2 MOV R3,#248 DJNZ R4,L2 MOV A,SBUF
35、;读回复信号 CPL A ;回复信号取反 JNZ TRLP ;非全0(回复信号FFH,错误),转重发 INC R0 ;全0(回复信号=FFH,正确),指向下一数据存储单元 CJNE R0,#50H,TRLP ;判16个数据发送完否-未完继续 SJMP $STOP: MOV P1,#0FFH JMP RE DEL: MOV R7,#25 ;延时1msDEL1: MOV R6,#20 DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1 RET END 乙机接收程序:ORG 0000H JMP RXD2ORG 0100HRXD2: MOV SCON,#80H ;置串行方式2,禁止接收 O
36、RL PCON,#80H ;置SMOD=1 MOV R0,#60H ;置发送数据区首址 SETB REN ;启动接收RWAP: JNB RI,$ ;等待一帧数据接收完毕 CLR RI ;清接收中断标志 MOV A,SBUF ;读接收数据,并在PSW中产生接收数据的奇偶值 JB PSW.0,ONE ;P=1,转另判 JB RB8,ERR ;P=0,RB8=1,接收有错;P=0,RB8=0,接收正确 ;继续接收RLOP: MOV R0,A ;存接收数据 INC R0 ;指向下一数据存储单元RIT: MOV A,#0FFH ;置回复信号正确 FDBK: MOV SBUF,A ;发送回复信号 CJNE R0,#70H,RWAP ;判16个数据接收完否-未完继续 CLR REN ;16个数据正确接收完毕,禁止接收 JMP $ONE: JNB RB8,ERR ;P=1,RB8=0,接收有错 JMP RIT ;P=1,RB8=1,接收正确,继续接收ERR: CLR A ;接收有错,置回复信号错误标志 JMP FDBK ;转发送回复信号END说明:已经选定晶振频率为12MHz,如下图三、图四所示: