收藏 分销(赏)

第五章80C51单片机的程序设计.ppt

上传人:s4****5z 文档编号:14013685 上传时间:2026-05-27 格式:PPT 页数:67 大小:227.50KB 下载积分:10 金币
下载 相关
第五章80C51单片机的程序设计.ppt_第1页
第1页 / 共67页
第五章80C51单片机的程序设计.ppt_第2页
第2页 / 共67页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五章,80C51,单片机的程序设计,5.1,概述,一、计算机语言,程序是计算机为完成某一工作而执行的若干指令的有序集合。,这一指令序列称为程序。为计算机准备这一指令序列的过程称为程序设计。程序设计所用的语言大致分为三种:,机器语言、汇编语言、高级语言,机器语言,:所有的指令、数字、符号都是用二进制代码表示,能为机器直接识别,简称机器语言。,汇编语言,:在程序设计自动化的第一阶段,用英文字符来代替机器语言,这些英文字符称为助记符。用这种助记符表示的指令系统的语言称为汇编语言或符号语言。,高级语言,:语句指令近似于人们的日常用语语言,格式参照数学语言而设计的语言,其特点是直观、易学、易懂,且通用性强,易于移植,但不能被计算机直接识别和执行。,二、汇编语言,1.,汇编语言的语句的种类和格式,汇编语言的语句有三种基本类型:指令语句、伪指令语句和宏指令语句。,指令语句如:,MOV A,,,R0,宏指令语句:用以代替汇编语言源程序中重复使用的程序段的一种语句,由汇编程序在汇编时产生相应的目标代码。,伪操作指令,:,汇编程序对汇编语言编写的源程序进行汇编时,还要提供一些汇编用的控制指令,如要指定程序或数据存放的起始位置,定义常数表等,这些指令汇编时不产生目标代码,不影响程序的执行,所以称为伪指令。,如:,1.ORG,(,Origin,)定义程序的起始地址,org,xxxxh,ORG 0000H,LJMP START,ORG 0100H,START:MOV A,#30H,END,2.,END,程序结束标志,用以通知汇编程序,该程序段结束。,3.EQU,(,Equate,)等值伪指令,(,变量标号赋值,),标号,EQU,表达式,其含义是标号等值于表达式,这里的标号和表达式是不可少的。如,TTY EQU 1008H,又如:,LOOP EQU TTY,TTY,已经赋值,那么,LOOP=TTY,他们可以互换,用,EQU,给一个标号赋值后,在整个程序中该标号的值固定不变,若需改变需用伪指令,DL,重新定义。,4.,定义标号值伪指令,DL,DL,和,EQU,虽都是将表达式值赋予标号,,但两者有区别,,就是,DL,可在同一源程序中给同一标号赋予不同的值,而,EQU,不能。,5.,数据说明伪指令,数据说明伪指令的作用是把数据存入指定的存储单元。,定义字节伪指令,DB,标号,DB,表达式或表达式表,其含义是将表达式或表达式表表示的数据或数据串存入从标号开始的连续存储单元中,如:,ORG 5000H,DATA1:DB 73,04,53,45,00,DATA2:DB 02,34,26,58,11,44,定义字伪指令,DW,标号,DW,表达式或表达式表,如,ORG 5000H,DATA1:DW 7304,0C53,45CB,00AB,DATA2:DW 0B02,340A,26CC,5D44,MATH EQU 03H,ORG 0000H,MAIN:CLR C,LOOP:MOV A,R0,MOV R1,#MATH,;,相当于,MOV R1,#03H,NEXT:SJMP$,ORG 1100H,DB 01H,04H,09H,05H,;,DW 1000H,3456H,END,ROM,中,地址 数据,1100 01,1101 04,1102 09,1103 05,6.DS,:定义存储区,从指定的地址单元开始,保留一定数量存储单元。,ORG 1000H,DS 07H,7,BIT,:位定义,确定字符名为确定的位地址值。,A1 BIT 30H,汇编语言的格式,标号:操作码操作数;注释,START,:,MOVA,,,30H,;,A,(,30H,),ORG 0000H,;整个程序起始地址,AJMP MAIN,;跳向主程序,ORG 0030H,;主程序起始地址,MAIN,:CLR C,;,MAIN,为程序标号,LOOP,:MOV A,R0,ADDC A,R1,INC R0,DJNZ R1,LOOP,;相对转移,SJMP NEXT,MOV R1,#03H,NEXT,:DEC R0,SJMP$,;相当于,LOOP1:SJMP LOOP1,END,;,结束标记,汇编语言格式:,地址 机器码 源程序 注释,ORG 0000H,;,整个程序起始地址,0000 20 00 30 LJMP MAIN,;,跳向主程序,ORG 0030H,;,主程序起始地址,0030 C3 MAIN:CLR C,;,MAIN,为程序标号,0031 E6 LOOP:MOV A,R0,0032 37 ADDC A,R1,0033 08 INC R0,0034 DA FB DJNZ R1,LOOP,;,相对转移,0036 80 03 SJMP NEXT,0038 78 03 MOV R0,#03H,003A 18 NEXT:DEC R0,003B 80FE SJMP$,;,HERE:SJMP HERE,END,;,结束标记,5.2,汇编语言程序设计,1.,明确课题的任务,对程序功能等方面的要求。,2.,把复杂问题分解为若干个模块,确定各模块的处理方法,确定方案和计算方法。,3.,了解应用系统的硬件配置、性能指标,确定好资源分配。,4.,画程序流程图,确定程序的流向,5.,编制源程序,1,)合理分配存储器单元和了解,I/O,接口地址。,2,)按功能设计程序,明确各程序之间的相互关系。,3,)用注释行说明程序,便于阅读和修改调试和修改。,6.,对程序进行汇编、调试和修改,一、顺序结构,顺序结构程序,其特点是按逻辑操作的顺序,从某条指令开始逐条执行。,数据传送和交换,例如,,在程序初始化时需对某些数据单元设置初值。假设工作寄存器,R0R3,、,P1,口、片内,RAM,的,30H,、,40H,清零,,R4,、,R5,置,1,。,ORG 1000H,START,:,MOV A,#00H,MOV R0,A,MOV R1,A,MOV R2,A,MOV R3,A,MOV P1,A,MOV 30H,A,MOV 40H,A,MOV R4,#0FFH,MOV R5,#0FFH,END,请用,MCS-51,汇编指令编写程序,将片内,RAM 68H,、,69H,单元中的内容分别传送到片外数据存储器,104H,、,105H,单元中。,分析:应注意片内和片外的寻址指令不同,ORG 1000H,MOV R0,,,#68H,MOV DPTR,,,#0104H,MOV A,,,R0 ;,片内,RAM68H,单元内容送累加器,MOVX DPTR,,,A ;,完成片内,RAM68,单元内容送片,;,外,104H,单元中,INC R0,MOV A,,,R0 ;,片内,RAM69H,单元内容送累加器,INC DPTR,MOVX DPTR,,,A ;,完成片内,RAM69,单元内容送片,;,外,105H,单元中,SJMP$,END,2.,简单运算程序,例:两个无符号双字节数相加。,设被加数在内部,RAM,的,41H,(,高位字节,)和,40H,(,低位字节,)单元中,加数在内部,RAM,的,51H,(,高位字节,)和,50H,(,低位字节,)单元中,结果放在,40H,、,41H,单元中。,如:,01001010 10010011,、,10010111 01100110,注意:多字节数相加先从低位开始,基本思路是,:,先取出两个数的低位字节相加,将和存入,40H,,,进位位在,CY,中,然后再取出两个数的高位字节,两个高字节数和低位字节的进位相加,和存入,41H,单元。,由于在两次取数和存结果时都要变化地址,且地址是连续的,用地址指针比较方便。所以用,R0,指示被加数地址、,R1,指示加数地址,开始,C 0,R0 40H,R1 50H,取低位字节数,相加并保存结果,变换指针,取高位字节数,相加并保存结果,结束,ORG 0000H,Start:,clr,c,;,将,Cy,清零,mov,r0,#40h,;,将被加数地址送指针,R0,mov,r1,#50h,;,将加数地址送指针,R1,Ad1:,mov,a,r0,;,将被加数送累加器,A,add a,r1,;,两个低字节数相加,mov,r0,a,;,将结果存入被加数低字节中,inc r0,;,修改指针,指向被加数高字节,inc r1,mov,a,r0,addc,a,r1,;,带进位的加,mov,r0,a,ret,END,数制转换程序设计,例:,8,位二进制转换成,BCD,码。,(,用十进制表达的二进制码),;程序名:,BINBCD1,;功能:,0,FFH,内的二进制数转换为,BCD,数,;入口:,A,存要转换的二进制数,;出口,:,R0,存放,BCD,数百、十、个位数的,地址,BINBCD1:MOV R0,#40H,MOV B,#100,DIV AB ;,商在,A,中,余数在,B,中,MOV R0,A,;将百位数保存,INC R0,MOV A,B,MOV B,#10,;,(A),原(,B,),,(B)=10,DIV AB,;十位数在,A,中,个位在,B,中,MOV R0,A,;保存十位,INC R0,XCH A,B,MOV R0,A,;保存个位,RET,3.,查表程序,用,DPTR,查表(查,0,9,平方表),1000 C083 TA:PUSH DPH,1002 C082 PUSH DPL,1004 902000 MOV DPTR,#TAB,1007 93 MOVC A,A+DPTR,1008 D082 POP DPL,100A D083 POP DPH,100C 22 RET,ORG 2000H,TAB:DB 00H,01H,04H,09H,2000 00 DB 10H,19H,24H,31H,2001 01,2002 04,MOVC A,,,A+DPTR,2003 09,MOVC A,,,A+PC,用,PC,查表(查,0,9,平方表),ORG 1000H,1000 C083 TA:MOV A,#01H,;#01H,为偏移量,1002 83 MOVC A,A+PC,1003 22 RET,00 DB 00H,01H,04H,09H,DB 10H,19H,24H,31H,1005 01 END,1006 04,1007 09,偏移量表首地址(查表指令下一条指令地址),1004H,1003H,01H,例,:,有一巡回检测报警装置,需对,16,路输入进行控制,每路有一个最大额定值,,为双字节的数,。控制时需根据检测的路数,找出该路对应的最大额定值进行比较,检查输入量是否大于最大值,如超出则报警。,下面是其查表程序段,,R2,用于寄存检测路号,取出的值放在,31H,和,32H,单元中。,1,1000 ORG 1000H,2,1000,7A00,TBPC1:MOV R2,#00H,3,1002,EA,MOV A,R2,4,1003,2A,ADD A,R2,5,1004,F531,MOV 31H,A,6,1006,2408,ADD A,#08H,7,1008,83,MOVC A,A+PC,8,1009,C531,XCH A,31H,9,100B,2404,ADD A,#04H,10,100D,83,MOVC A,A+PC,11,100E,F532,MOV 32H,A,12,1010,22,RET,13,1011,CE 04,TBPC2,:DW 1230,1540,2345,3456,1013,04 06,1015,29 09,1017,80 0D,14 1019 END,例:,片内,RAM,的,EGA,单元中有一个大写的,英文字母,,要求将此字母在英文字母表中的位置送入片内的,COUNT,单元中,如,EGA,单元中字母为,I,时,则,COUNT,单元中需送入数字,9,。,如果将,26,个英文字母按照顺序编成一个表,通过查表法得到一个字母与,EGA,单元中的字母比较,若不相等再查,同时记录查表的次数。查完后,将记录次数送,COUNT,单元。,用,MOVC A,A+DPTR,指令实现,ORG 1000H,EGA EQU 50H,COUNT EQU 60H,MOV COUNT,,,#00H,MOV A,#00H ;,调整地址,MOV DPTR,#ALPT,LOOP:,PUST A,MOVC A,A+DPRT ;,查表,CJNE A,EGA,NF ;,所查字母与,EGA,中字母比较,SJMP LAST ;,相等则转到,LAST,NF:,POP A,INC A ;,调整地址,INC COUNT ;,记数值加,1,SJMP LOOP ;,继续查,LAST:INC COUNT ;,记数值加,1,RET,END,ORG 1100H,ALPT,:,DBA,B,Y,,,Z,用,MOVC A,A+PC,指令实现,ORG 1000H,EGA EQU 50H,COUNT EQU 60H,MOV COUNT,,,#00H,MOV A,#13H,;,调整地址,LOOP:PUSH A,MOVC A,A+PC ;,查表,CJNE A,EGA,NF ;,所查字母与,EGA,中字母比较,SJMP LAST ;,相等则转到,LAST,NF:POP A,INC A ;,调整地址,INC COUNT ;,记数值加,1,SJMP LOOP ;,继续查,LAST:INC COUNT ;,记数值加,1,SJMP$;,等待,ALPT:,DBA,B,Y,,,Z,二、分支结构程序,1.,单分支程序,条件满足?,A,Y,N,(a),条件满足?,A,B,N,Y,(b),条件满足?,A,段,B,段,(c),例:已知片内,RAM FIRST,开始的两个单元中各存放有一个,8,位无符号二进制数,要求找出其中的大数并存入片内,RAM,的,SECOND,单元中。,分析:只要将两数进行比较,用比较的结果作为分支转移的条件就很容易地找出其中的大数。,比较方法是将两个数相减,看有没有借位,确定那个数大,将大数存入,SECOND,单元中,开始,C,清零,R0,做间址,取数,A,AB,?,将大数保存,结束,Y,N,调整,R0,ORG 1000H,FIRST EQU 30H,SECOND EQU 40H,CLR C,MOV R0,#FIRST ;,第一个数地址送,R0,中,MOV A,R0,;,取第一个数,INC R0 ;R0,指向第二个数地址,SUBB A,R0 ;,两数比较,JC BIG ;,第二个数大转,BIG,DEC R0 ;R0,指向第一个数地址,BIG:MOV SECOND,R0 ;,存大数,SJMP$,END,2,双向分支程序设计举例,例,:,设,X,存在,30H,单元中,根据下式,X+2X0,Y=100 X=0,求出,Y,值,将,Y,值存入,31H,单元。,XX0,解:根据数据的符号位判别该数的正负,若最高位为,0,,再判别该数是否为,0,。程序流程如图所示。,A,为负数?,取数,,A,(,30H,),开始,结束,A=0?,Y,N,N,A,|X|,A64H,A,X+2,存数,(,31H,),A,(,3,0H,),参考程序如下:,ORG1000H,MOVA,,,30H,;,取数,JBACC.7,,,NEG,;负数,转,NEG,JZZER0,;,为零,转,ZER0,ADDA,,,#02H,;,为正数,求,X+2,AJMP SAVE,;转到,SAVE,,,保存数据,ZER0,:,MOVA,,,#64H,;,数据为零,,Y=100,AJMP SAVE,;转到,SAVE,,,保存数据,NEG,:,DEC A,;,CPLA,;求,X,SAVE,:,MOV31H,,,A,;,保存数据,SJMP,;暂停,END,FRT,:,MOV A,,,40H,;,取行李重量,G,放在,40H,MOV R3,,,A,MOV B,,,#03H,;,M=G3,MUL AB,MOV R2,,,A,;,暂存,3 G,在,R2,MOV A,,,R3,;,取回,G,CJNE A,,,#06H,,,L1,;,G5?,L1,:,JC WETC,;是,转至,WETC,SUBB A,,,#05H,;,否则,M=3G+2(G-5),RL A,ADD A,,,R2,SJMP OUT,WETC,:,MOV A,,,R2,OUT,:,MOV 41H,,,A,;,最后结果,M,存,41H,end,例:行李计价:当,G5,,,M=G3,;,当,G,5,,,M=G3+(G-5)(5-3),指出本程序的条件限制,假设压力传感器测试的行李重量存入,40H,单元,3,多向分支程序设计举例,【,例,】,根据,R0,的值转向,7,个分支程序。,R010,,,转向,SUB0,;,R020,,,转向,SUB1,;,R060,,,转向,SUB6,;,解:利用,JMP A+DPTR,指令直接给,PC,赋值,使程序实现转移。程序流程如图所示。,多向分支程序流程图,K=?,转SUB0,转SUB1,转SUB6,K=0 K=1 K=6,开始,R0,除,10,,商为,K,参考程序如下:,ORG 2000H,MOV DPTR,,,#TAB,;转移指令表首地址,MOV A,,,R0,;取数,MOV B,,,#10,DIV AB,;,A/10,,商在,A,中,CLRC,RLC A,;,A2A,JMP A+DPTR,;,PC A+DPTR,TAB:,AJMPSUB0,;转移指令表,AJMP SUB1,AJMPSUB2,AJMP SUB5,AJMPSUB6,三、循环程序,1,循环程序的结构(,如下图,1,所示),循环程序一般包括如下四个部分:,(,1,)初始化 (,2,)循环体,(,3,)循环控制 (,4,)结束,循环程序按结构形式,有单重循环与多重循环。,在多重循环中,只允许外重循环嵌套内重循环。,不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部(如下图,2,所示)。,(,a,),当型循环结构,(,b,),直到型循环结构,循环结束?,循环体,Y,N,初始化,修改循环参数,结束部分,开始,结束,循环结束?,循环体,Y,初始化,修改循环参数,结束部分,开始,N,结束,图,1,循环结构程序流程图,外循环,中循环,内循环,外循环,内循环,外循环,内循环,内循环,(,a,),嵌套正确,(,b,),嵌套正确,(,c,),交叉不正确,图,2,多重循环示意图,例,1,:,50ms,延时子程序。设晶振频率为,12MHz,,则机器周期为,1us,。,DEL:MOV R7,#200 ;1MC,DEL1:MOV R6,#123 ;2MC,DJNZ R6,$;2MC,DJNZ R7,DEL1 ;2MC,RET ;2MC,延时时间:,t=1+200(2+2*123)+2+2,50000us=50ms,例,2,:,对内部,RAM 50h,开始的,10,个无符号数求和。,ADD1:MOV R7,#10,;,循环次数,n,10,MOV R3,#0,;,存放结果的高,8,位,MOV R4,#0,;,存放结果的低,8,位,MOV R0,#50H,;,求和的数据存放在从内部,RAM 50h,开始的,;单元中,。注意:(,50h,)?,不知道,LOOP:MOV A,R4,;,ADD A,R0,;(,R4)+(50H)A,MOV R4,A ;,结果送回,R4,CLR A ;,ADDC A,R3,;,把进位位,C,加到高,8,位去,MOV R3,A,INC R0,;,为下一轮循环作准备,DJNZ R7,LOOP,END,源程序:,例,3,:设,MCS-51,单片机内部,RAM,从,40H,开始的连续,16,个单元中,每个单元中分别存放有单字节的带符号数。要求将其中的正数存入,50H,开始的连续单元中,负数存入,60H,开始的连续单元中,并将正数、负数和零的个数分别存入,70H,、,71H,、,72H,单元中。,分析,1,)带符号数的最高位为符号位,可通过最高位来判断正负。,2,)程序中需要从,40H,单元开始取源数,并将正数和负数分别存放,50H,和,60H,单元中,,故需要,三个,地址指针来指向对应的内存单元;设对应的地址指针分别为,R0,、,R1,和,R2,,由于,R2,不能用间接寻址方式,故,R2,需要同,R1,或,R0,进行交换后,才能进行负数的存放。,参考程序:,ORG 1000H,CLR A,MOV 70H,A ;,存放正数的个数单元清,0,MOV 71H,A ;,存放负数的个数单元清,0,MOV 72H,A ;,存放零的个数单元清,0,MOV R3,#10H ;,设循环计数器初值,MOV R0,#40H ;,设源数地址指针,MOV R1,#50H ;,设正数地址指针,MOV R2,#60H ;,设负数地址指针,LOOP:MOV A,R0 ;,取源数,JZ ZERO ;,源数为,0,,转,ZER0,JNB ACC.7,POSI ;,源数为正,转,POSI,INC 71H ;,负数个数加,1,MOV R4,A ;,暂存,源,数,MOV A,R2,XCH A,R1 ;R1,与,R2,中的内容交换,XCH A,R4,MOV R1,A ;,存负数,XCH A,R4,XCH A,R1 ;R1,与,R2,中的内容交换,INC R2 ;,调整负数地址指针,SJMP LOOP1 ;,转循坏控制,POSI:INC 70H;,正数个数加,1,MOV R1,A ;,存正数,INC R1 ;,调整正数地址指针,SJMP LOOP1,ZERO:INC 72H ;,零的个数加,1,LOOP1:INC R0 ;,调整源数地址指针,DJNZ R3,LOOP ;,未送完,继续,SJMP$,END,四、子程序,1.,子程序及其调用,在实际的程序设计中,将那些需要多次应用的、完成相同的某种基本运算或操作的程序段从整个程序中独立出来,单独编制一个程序段,尽量使其标准化,并存放于某一存储区域。需要时通过指令进行调用,这样的程序段,称为子程序。,调用子程序的程序称为主程序或调用程序,。,调用子程序的指令如,ACALL,、,LCALL,子程序的特点及编写子程序应注意的问题,A.,子程序的第一条指令之前必须有标号;,B.,子程序的末尾用,RET,返回指令结束。,C.,子程序中需要保护现场;,D.,主程序和子程序之间的参数传递。,E.,子程序的嵌套和递归,参数传递,:在子程序调用时,主程序把有关参数预先存入约定的位置,子程序调用后取得这些参数进行处理,子程序执行完后,再将结果存入约定的位置,主程序再从约定的位置取回所需的结果,这就是参数传递。,子程序的对现场的保护是,调用前保护、调用后恢复,如:,PUSH PSW,PUSH ACC,PUSH B,MOV PSW,#10H,ACALL addr11,POP B,POP ACC,POP PSW,也可在子程序内进行保护和恢复,ACALL addr11,Addr,:PUSH,PSW,PUSH ACC,PUSH B,MOV PSW,#10H,POP B,POP ACC,POP PSW,子程序的调用示意图,RET,LCALL SUB,子程序的调用与返回,LCALL A,RET,RET,LCALL B,子程序的嵌套调用与返回,编一程序在实现在,P1.0,输出,1HZ,的方波。,ORG 0030H,MAIN,:,CPL P1.0,ACALL,yanshi,SJMP MAIN,END,P1.0,0.5S,的延时子程序,ORG 0100H,Yanshi,:MOV R5,#10,DEL0:MOV R7,#200,DEL1:MOV R6,#125,DEL2:DJNZ R6,DEL2,DJNZ R7,DEL1,DJNZ R5,DEL0,RET,0.5S,的延时子程序,例:双字节无符号数乘法子程序,MUL1,设:被乘数在,R7R6,中,乘数在,R5R4,中,结果:,存在以,R0,做间址指向的连续,4,个存储单元中,用,R3,、,R2,存放中间结果,R,7,R,6,R,5,R,4,R,6,R,4,h,R,6,R,4,L,R,7,R,4,h,R,7,R,4,L,R,6,R,5,h,R,6,R,5,L,R,7,R,5,h,R,7,R,5,L,R1,R2,R3,MUL1:MOV A,R6 ;,取被乘数低位,R6,MOV B,R4 ;,取乘数低位,R4,MUL AB ;R6*R4,MOV R0,A ;,保存,R6*R4,的低位,MOV R3,B,;,保存,R6*R4,的高位,MOV A,R7,MOV B,R4,MUL AB,;,R7*R4,ADD A,R3,MOV R3,A,MOV A,B,ADDC A,#00 ;R7*R4,H,加进位位,MOV R2,A,;保存,R7*R4,H,加进位位,MOV A,R6,MOV B,R5,MUL AB,;,R6*R5,ADD A,R3 ;,与前面的相加,INC R0 ;,修改指针,MOV R0,A,;保存,R6*R4,h,+R7*R4,L,+R6*R5,L,MOV A,B,ADDC A,R2 ;R6*R5,H+,R7*R4,H,加进位位,MOV R2,A ;,保存,MOV A,#00,MOV R1,#00,ADDC A,R1,;保存进位位,MOV R1,A,MOV A,R7,MOV B,R5,MUL AB,;,R7*R5,ADD A,R2 ;R7*R5,h,+,前面的结果,INC R0,MOV R0,A,MOV A,B,ADDC A,R1,;,R7*R5,L,+,前面的进位,INC R0,MOV R0,A,;保存,R7*R5,L,+,前面的进位,RET,例,:,把一个十六进制数转换成,ASCII,码,结果存入,R6,,,R7,中。,(用子程序来实现),我们用,RAM,中的,77H,、,78H,作参数传递空间:,ORG 0000H,MAIN,:,MOV A,,,#XXH,MOV 78H,,,A,ACALL ASCII,MOV R6,,,77H,MOV R7,,,78H,END,ORG 0100H,ASCII,:,MOV A,,,78H,SWAP A,ANL A,,,#0FH,ADD A,,,#,12,MOVC A,,,A+PC,MOV 77H,,,A,XCH A,,,78H,ANL A,,,#0FH,ADD A,,,#,3,MOVC A,,,A+PC,MOV 78H,,,A,RET,TAB,:,DB 30H,,,31H,,,32H,,,二进制数与,ASCII,码的对应关系,:,四位二进制,ASCII,0000,(,0,),30H,0001,(,1,),31H,1001,(,9,),39H,1010,(,A,),41H,1111,(,F,),46H,位操作程序,编写一程序,,实现下图中的逻辑运算电路,。其中,P,3.1,、,P,1.1,、,P,1.0,分别是单片机端口线上的信息,,RS,0,、,RS,1,是,PSW,寄存器中的两个标志位,,30H,、,31H,是两个位地址,运算结果由,P,1.0,输出。,P,3.1,P,1.1,30H,31H,RS,1,RS,0,&,1,&,&,P,1.0,硬件逻辑硬件电路图,程序如下:,P10OUT:ORG0000H,MOVC,,,P3.1,ANLC,,,P1.1,CPLC,MOV20H,,,C,;暂存数据,MOVC,,,30H,ORLC,,,/31H,ANLC,,,RS1,ANLC,,,20H,ANLC,,,RS0,MOVP1.0,,,C,;输出结果,SJMP$,RET,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服