1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,2,章 作业,P40,2,,,3,,,4,,,6,,,7,第,3,章 作业,1,1.,将寄存器,R2,中的内容传送到寄存器,R1,中(,R2R1,);,2.,片外,RAM(0030H)R1,;,3.,片外,RAM(0030H),片内,RAM(30H),;,4.,片内,RAM(30H),片外,RAM(2000H),;,5.ROM(1000H)R0,;,6.ROM(1000H),片外,RAM(0020H),;,7.ROM(1000H),片内,RAM(20H),;,8.,片外,RAM(1000H),片外
2、RAM(2000H),;,1.,将寄存器,R2,中的内容传送到寄存器,R1,中(,R2R1,),MOV A,R2,MOV R1,A,作业中的错误:,MOV R1,R2,指令格式错误:,1),操作码内不能有空格;,2),操作码和目的操作数之间,必须有空格;,3),目的操作数和源操作数之,间逗号隔开;,4),一行只能写一条指令;,5),每个指令一般不用;结束。,2.,片外,RAM(0030H)R1,MOV DPTR,#,0030H,MOV R0,#30H,MOVX A,DPTR,MOVX A,R0,MOV R1,A,MOV R1,A,作业中的错误:,1),表示立即数的,”,#,”,漏写;,2)M
3、OV DPTR,#0030H,和,MOV DPTR,#30H,的区别,3)MOVX R1,A,的错误,4)DPTR-DPRT,5)MOVX R1,DPTR,3.,片外,RAM(0030H),片内,RAM(30H),MOV DPTR,#,0030H,MOVX A,DPTR,MOV 30H,A,作业中的错误:,1),表示立即数的,”,#,”,漏写;,2)MOV DPTR,#0030H,和,MOV DPTR,#30H,的区别,3)DPTR-DPRT,4)MOV A,30H,MOVX A,DPTR,4.,片内,RAM(30H),片外,RAM(2000H),MOV A,30H,MOVX DPTR,#,2
4、000H,MOV,DPTR,A,作业中的错误:,1),表示立即数的,”,#,”,漏写;,2),间接寻址的,“,”,漏写,3)DPTR-DPRT,5.ROM(1000H)R0,MOV A,#00H,MOV DPTR,#1000H,MOVC A,A+DPTR,MOV R0,A,作业中的错误:,1)MOV R0,,,1000H?,;,2),漏写,MOV A,#00H,3)MOV R0,,,A?,6.ROM(1000H),片外,RAM(0020H),MOV A,#00H,MOV DPTR,#1000H,MOVC A,A+DPTR,MOV DPTR,#,0020H,MOVX,DPTR,A,作业中的错误:
5、1),”,#,”,;,2),”,”,7.ROM(1000H),片内,RAM(20H),MOV A,#00H,MOV DPTR,#1000H,MOVC A,A+DPTR,MOV 20H,A,作业中的错误:,1)MOV 20H,1000H,8.,片外,RAM(1000H),片外,RAM(2000H),MOV DPTR,#1000H,MOVX A,DPTR,MOV DPTR,#2000H,MOVX DPTR,A,第,3,章 作业,2,1.,试编一程序对外部,RAM2000H,单元的第,0,位清零,第,7,位置,1,其余各位保持不变。,2.,试编一程序对外部,RAM3000H,单元的第,0,位置,1
6、第,7,位清零其余各位求反。,第三章 作业,2,讲解,1.,试编一程序对外部,RAM2000H,单元的第,0,位清零,第,7,位置,1,其余各位保持不变。,涉及的知识点:,1,)片外,RAM,单元中数据的传输指令,2,)利用逻辑与进行位清零,和,0,与结果是,0,,和,1,与结果是自己,3,)利用逻辑或进行位置,1,和,1,或结果是,1,,和,0,或结果是自己,第三章 作业,2,讲解(续),1.,试编一程序对外部,RAM2000H,单元的第,0,位清零,第,7,位置,1,其余各位保持不变。,MOV DPTR,#2000H xxxxxxxx,MOVX A,DPTR,11111110,ANL A
7、FEH xxxxxxx0,ORL A,#80H,10000000,MOVX DPTR,A 1xxxxxx0,第三章 作业,2,讲解(续),2.,试编一程序对外部,RAM3000H,单元的第,0,位置,1,第,7,位清零其余各位求反。,涉及的知识点:,1,)片外,RAM,单元中数据的传输指令,2,)利用逻辑与进行位清零,和,0,与结果是,0,,和,1,与结果是自己,3,)利用逻辑或进行位置,1,和,1,或结果是,1,,和,0,或结果是自己,4,)利用逻辑异或进行位求反,和,1,异或结果求反,和,0,异或结果是自己,(或利用累加器,A,的求反指令,CPL A,),第三章 作业,2,讲解(续),
8、2.,试编一程序对外部,RAM3000H,单元的第,0,位置,1,第,7,位清零其余各位求反。,MOV DPTR,#2000H xxxxxxxx,MOVX A,DPTR,00000001,ORL A,#01H xxxxxxx1,ARL A,#7FH,01111111,XRL A,#7EH,0 xxxxxx1,MOVX DPTR,A,01111110,0 1,第三章 作业,2,讲解(续),2.,试编一程序对外部,RAM3000H,单元的第,0,位置,1,第,7,位清零其余各位求反。,MOV DPTR,#2000H xxxxxxxx,MOVX A,DPTR,CPL A,00000001,ORL A
9、01H,ARL A,#7FH,01111111,MOVX DPTR,A,第三章 作业,2,讲解(续),2.,试编一程序对外部,RAM3000H,单元的第,0,位置,1,第,7,位清零其余各位求反。,MOV DPTR,#2000H xxxxxxxx,MOVX A,DPTR,00000001,ORL A,#01H xxxxxxx1,ARL A,#7FH,01111111,CPL A,MOVX DPTR,A,18,第四章 作业,1,)设有,100,个单字节数组成的数据块,存放在外部,RAM,中其起始地址为,1000H,,试编一程序,将这一数据块传送至,6000H,为起始地址的区域中去。,2,)设
10、有两个长度均为,10,的数组,分别存放在,6000H,和,8000H,为起始地址的外部,RAM,中,试编一程序求其对应项之和,结果存放在第一数组区域中。,3,)设有,100,个带符号的单字节数组成的数组,存放在以,2800H,为起始地址的存储区域中,试编一程序找出它们中的最小数,并存放到,2000H,单元中。,4),试编一程序若累加器,A,中内容分别满足一下条件,则程序转至标号为,COMP,的存储单元。设,A,中为无符号数,1,),A 20;2,),A 20;3,),A20;4)A20;3,),A20;4)A20;2,),A 20;,CLR C CLR C,SUBB A,#14H(#20)CJ
11、NE A,#14H,L0,JNC COMP SJMP FINISH,COMP:XXXXXXXX L0,:,JNC COMP,COMP:XXXXXXX,FINISH:XXXXXXX,第四章 作业讲解,1.,试编一程序若累加器,A,中内容分别满足一下条件,则程序转至标号为,COMP,的存储单元。设,A,中为无符号数,3,),A 20;3,),A 20;,CLR C CLR C,SUBB A,#14H(#20)CJNE A,#14H,L0,JC COMP SJMP COMP,JZ COMP L0,:,JC COMP,COMP:XXXXXXXX COMP:XXXXXXX,FINISH:XXXXXXX,
12、第四章 作业讲解,1.,试编一程序若累加器,A,中内容分别满足一下条件,则程序转至标号为,COMP,的存储单元。设,A,中为无符号数,4,),A 20;4,),A 20;,CLR C CLR C,SUBB A,#14H(#20)CJNE A,#14H,L0,JC COMP SJMP FINISH,COMP:XXXXXXXX L0,:,JC COMP,COMP:XXXXXXX,FINISH:XXXXXXX,第四章 作业讲解,1,)设有,100,个单字节数组成的数据块,存放在外部,RAM,中其起始地址为,1000H,,试编一程序,将这一数据块传送至,6000H,为起始地址的区域中去。,1,)设有,
13、100,个单字节数组成的数据块,存放在外部,RAM,中其起始地址为,1000H,,将数据块传送至,6000H,为起始地址的区域中。,程序:,ORG 0000H,MOV R0,#64H DJNZ R0,,,LOOP,MOV DPL,#00H SJMP$,LOOP:MOV DPH,#10H END,MOVX A,DPTR,MOV DPH,#60H,MOVX DPTR,A,INC DPL,1,)设有,100,个单字节数组成的数据块,存放在外部,RAM,中其起始地址为,1000H,,将数据块传送至,6000H,为起始地址的区域中。,程序:,ORG 0000H MOV DPL,R2,MOV R0,#64
14、H MOVX DPTR,A,MOV R1,#60H INC DPRT,MOV R2,#00H MOV DPH,R1,MOV DPTR,#1000H MOV DHL,R2,LOOP:MOVX A,DPTR POP DPL,INC DPTR POP DPH,PUSH DPH DJNZ R0,,,LOOP,PUSH DPL SJMP$,MOV DPH,#R1 END,MOV DPH,R1,第四章 作业讲解,2,)设有两个长度均为,10,的数组,分别存放在,6000H,和,8000H,为起始地址的外部,RAM,中,试编一程序求其对应项之和,结果存放在第一数组区域中。,2,)两个长度为,10,的数组,放
15、在,6000H,和,8000H,为起始地址的外部,RAM,中,对应项之和,结果放在第一数组中。,程序:,ORG 0000H,MOV R2,#0AH INC DHL,MOV DPL,#00H,LOOP:MOV DHP,,,#80H DJNZ R2,,,LOOP,MOVX A,DPTR SJMP$,MOV R5,A END,MOV DHP,#60,MOVX A,DPTR,ADD A,R5,程序:,ORG 0000H MOV DPL,R2,MOV R0,#10 MOVX A,DPTR,MOV R1,#60H ADD A,R5,MOV R2,#00H MOVX DPTR,A,MOV DPTR,#800
16、0H INC DPRT,LOOP:MOVX A ,DPTR MOV DPH,R1,MOV R5,A MOV DHL,R2,INC DPTR POP DPL,PUSH DPH POP DPH,PUSH DPL DJNZ R0,,,LOOP,MOV DPH,#R1 SJMP$,END,第四章 作业讲解,3,)设有,100,个带符号的单字节数组成的数组,存放在以,2800H,为起始地址的存储区域中,试编一程序找出它们中的最小数,并存放到,2000H,单元中。,程序:,ORG 0000H,MOV R2,#64H,MOV DPTR,#2800H,DEC R2,LOOP:MOVX A,DPTR,MOV R
17、3,A,INC DPTR,MOVX A,DPTR,MOV R4,A,程序:,MOV A,R3 SJMP LOOP2,CLR C LOOP1:MOV A,R3,XRL A,R4 LOOP2:DJNZ R2,LOOP,JB ACC.7,NEXT1,MOV DPTR,#2000H,MOV A,R3 MOVX DPTR,A,SUBB A,R4,JC LOOP1,MOV A,R4,SJMP LOOP2,NEXT1:MOV A,R3,JB ACC.7,LOOP1,MOV A,R4,33,第六章 作业,1.,以,T0,为定时器,在,P1.1,引脚上产生频率为,1HZ,的方波。,2.,利用定时器,/,计数器实
18、现数字频率计的功能,将,T0,设置为定时器,,T1,设置为计数器,把测得信号接,T1,引脚,(P3.5),,启动定时,/,计数器工作后,在,1S,到达时,读取,T1,的内容作为频率值,存放于,21H(F_HIGH),和,20H(L_HIGH),fosc=12MHZ,33,第六章 作业讲解,1.,以,T0,为定时器,在,P1.1,引脚上产生频率为,1HZ,的方波。,1.,确定功能,以十六进制形式写入,TMOD,1,)定时还是计数?,2,)是否用中断?,3,)工作方式?,4,)启动方式。,2.,设置初值,将其写入,TH,和,TL,,并清零,TF,。,3.,用位操作指令,SETB TR0(TR1),
19、完成启动设置。,1.,以,T0,为定时器,在,P1.1,引脚上产生频率为,1HZ,的方波。,分析:,1,)周期,1,秒,定时时间为,0.5,秒,,由于,T0,要重复定时计数,因此选择工作方式,2,或,1,,,C/T=1,与,INT1,无关,则,GATE=0,2,)方式,2,的最大定时间:,12M-256us;6M-512us,方式,1,的最大定时时间:,12M-65.536ms;6m-131.072ms,需要嵌套循环,循环次数,X,定时时间,=0.5s,。方式,1,定时时间,100ms,循环次数,5,。,(,方式,2 500us,1000),TMOD=01H(TMOD=02H),3,),(2,
20、16,-X)x2x10,-6,=0.1 X=15536=3CB0 2,16,=65536,TH0=3CH,THL=B0H,源程序,:(,查询方式,),ORG 2000H LOOP:JBC TF0,,,LQ,MOV TMOD,#01H SJMP LOOP,LQ:CLR TF0,MOV TH0,,,#3CH MOV TH0,,,#3CH,MOV TL0,,,#,0B0H,MOV TL0,#0B0H,MOV R5,,,#5 DJNZ R5,,,LOOP,CLR TF0 MOV R5,,,#5,CLR EA QF:CPL P1.0,SETB TR0 SJMP LOOP,END,源程序,:(,中断方式,
21、),ORG 0000H SETB TR0,LJMP MAIN HERE:SJMP HERE,ORG 0003H INT0:MOV TH0,,,#3CH,LJMP INT0 MOV TL0,,,#0B0H,MAIN:MOV TMOD,#01H DJNZ R5,,,RTURN,MOV TH0,,,#3CH QF:CPL P1.0,MOV TL0,,,#,0B0H,RTURN:,RETI,MOV R5,,,#5 END,SETB EA,SETB ETO,38,2.,将,T0,设置为定时器,,T1,设置为计数器,把测得信号接,T1,引脚,(P3.5),,启动定时,/,计数器工作后,在,1S,到达时,读
22、取,T1,的内容作为频率值,存放于,21H(F_HIGH),和,20H(L_HIGH),fosc=12MH,分析:,1,)由于,T1,要重复计数计数,因此选择工作方式,1,,,C/T=1,与,INT1,无关,则,GATE=0,2,),T0,作为定时器,每隔,50ms,溢出一次,选择方式,1,,与软件一起实现定时,1,秒钟,则,M1M0=01,,,C/T=0,与,INT1,无关,则,GATE=0,。,所以:,TMOD=0101 0001=51H,3,)定时器,T1,的初值:,X1=0000H,定时器,T0,的初值:,38,39,源程序:,ORG 2000H LOOP:JBC TF0,,,LQ,M
23、OV TMOD,#16H SJMP LOOP,MOV TH1,,,#00H LQ:MOV TH0,,,#3CH,MOV TL1,,,#,00H,MOV TL0,#0B0H,MOV TH0,,,#3CH DJNZ R7,,,LOOP,MOV TL0,,,#0B0H MOV R7,,,#20,MOV R7,,,#20,MOV 21H,TH1,CLR EA MOV 20H,TL1,SETB TR1 SJMP LOOP,SETB TR0 END,39,40,第五章 作业,1.AT89S51,单片机的引脚,INT1,接入如图所示电路。要求每按一下按钮,B,,单片机就将,P1,寄存器中的,第,0,位置,1
24、第,7,位清零,第,1,位和第,6,位互换,其余各位求反。,试利用外部中断,0,编写实现这一功能的程序。,40,第五章 作业讲解,中断程序设计需考虑的问题:,一、,中断初始化设置,1.,设置堆栈指针,SP,设置适宜的堆栈深度。,(1),深度要求不高且工作寄存器组,1,3,不用时,,可维持复位时状态:,SP=07H,,深度为,24B(20H,2FH,为位寻址区,),。,(2),要求有一定深度时,可设,SP=60H,或,50H,,,这时深度分别为,32B,和,48B,。,第五章 作业讲解,中断程序设计需考虑的问题:,2.,定义中断优先级,根据中断源的轻重缓急,划分高优先级和低优先级。,3.,定义
25、外部中断触发方式,一般情况下,应定义,边沿触发方式,为宜。若外部中断必须采用电平触发方式时,应在硬件电路上和中断服务程序中采取撤除中断请求信号的措施。,4.,开放中断,由于,AT89C51,采用了二级中断控制方式,因此开放中断必须同时开放二级中断控制,即同时置位,EA,和需要开放中断的中断允许控制位。,二、,中断服务主程序,1.,在中断服务入口地址设置一条跳转指令,以便转移到中断服务程序的实际入口处,2.,数据需要保护现场。通常是保护,Acc,、,PSW,和,DPTR,等等特殊功能寄存器中的内容,3.,中断源请求中断服务要求的操作,这是 中断服务程序的主体。,4.,若是外部中断电平触发方式,应
26、有中断标志撤除操作。若是串行收发中断,应 有对,RI,、,TI,清,0,指令。,5.,恢复现场。与保护现场相对应,注意按“先进后出、后进先出”的原则操作。,6.,中断返回,最后一条指令必须是,RETI,。,第五章 作业讲解,常用的,主程序结构,如下:,ORG 0000H,LJMP MAIN,ORG,中断入口地址,LJMP INT,ORG XXXXH,MAIN:,主 程 序,INT:,中断服务程序,第五章 作业讲解,程序:,ORG 0000H,LJMP MAIN,ORG 0013H,;外部中断,1,的入口地址,LJMP INTT0,ORG 1000H,MAIN:SETB IT1 ;,设置外部中断
27、1,的触发方式为跳沿触发,SETB EX1,;允许外部中断,1,SETB EA,;总中断开关位开放,HERE:SJMP HERE,INTT0,:,MOV A,P1,ORL A,#01H;,或指令置,1,ANL A,#7FH,;与指令清零,XRL A,#3CH ;,异或指令取反,MOV C,Acc.1,MOV Acc.6,Acc.1,MOV Acc.1,C,RETI,END,第六章作业,1.,在,AT89S51,串行口的工作方式,1,中,定时器,T1,的定时常数直接影响波特率。若晶振频率是,11.0592MHz,,波特率为,2400B/s,。请问定时初值(常数)是多少?试编写在,AT89S51
28、串行口的发送程序,要求以工作方式,1,将存放在外部数据存储器中地址为,0010H,至,0030H,的单元中的的数据一一发送出去。,解:串行通讯中定时器以工作方式,2,工作,定时常数与波特率、晶振频率和,SMOD,(,0,或,1,)相关,计算公式(,7-3,),取,SMOD=0,,则,2400=(1/32)*11.0592*10,6,/(12(256-X)X=244=F4H,1.,串行发送(方式,1,2,3,)步骤,(,1,)设置,SCON(,工作模式和发送状态,),(,2,)设置,PCON,(,3,)(方式,1,和,3,)设置,TMOD(T1,工作方式,2),设置,TH1,,,THL1,初值
29、打开,TR1,启动计数器,(,4,)清零,TI,,设置,TB8,(方式,2,3,),(,5,)将数据由,A SBUF,(,6,)等待发送完,若还要发送返回(,4,),程序,(,查询方式,),ORG 0100H,MAIN:MOV DPTR,#0010H,MOV R7,#33H,MOV SCON,#40H;01000000,MOV PCON,#00H,MOV TMOD,#20H,MOV TH1,#0F4H,MOV TL1,#0F4H,SETB TR1,LOOP:CLR TI,MOV A,DPTR,MOV SBUF,A,HERE:JNB TI,HERE,CLR TI,INC DPTR,DJNZ R
30、7,LOOP,CLR TR1,SJMP$,END,2.,试编写在,AT89S51,串行口的接收程序,要求以工作方式,1,接收,32,个字节的数据,并将接收到的数据存放在外部数据存储器中地址为,0010H,至,0030H,的单元。已知晶振频率是,11.0592MHz,,波特率为,2400B/s,。,步骤:,1.,串行接收(方式,1,2,3,)步骤,(,1,)设置,SCON(,工作模式和发送状态,),(,2,)设置,PCON,(,3,)(方式,1,和,3,)设置,TMOD(T1,工作方式,2),设置,TH1,,,THL1,初值;打开,TR1,启动计数器,(,4,)清零,TI,,设置,TB8,(方式
31、2,3,),(,5,)等待接收结束,将数据由,A SBUF,,(在工作方式,2,3,时,由,RB8,取校验位),(,6,)若还要发送返回(,5,),否则关闭,REN,程序:,(,中断方式,),ORG 0000H,LJMP MAIN,ORG 0023H,LJMP SINT,ORG 1000H,MAIN:MOV DPTR,#0010H,MOV R7,#33H,MOV SCON,#40H,MOV PCON,#00H,MOV TMOD,#20H,MOV TH1,#0F4H,MOV TL1,#0F4H,53,SETB TR1,SETB REN,SETB ES,SETB EA,SJMP$,SINT:CLR RI,MOV A,SBUF,MOV DPTR,A,INC DPTR,DJNZ R7,NEXT,CLR RI,CLR TR1,NEXT:RETI,END,53,






