收藏 分销(赏)

单片机原理例题及习题.doc

上传人:仙人****88 文档编号:7390004 上传时间:2025-01-02 格式:DOC 页数:5 大小:116.50KB
下载 相关 举报
单片机原理例题及习题.doc_第1页
第1页 / 共5页
单片机原理例题及习题.doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述
例4.1(顺序结构)被加数存于片内RAM的32H、31H、30H单元,加数存于片内RAM的35H、34H、33H单元相加之和存于片内RAM的32H、31H、30H单元,进位存于片内RAM的00H单元。程序如下: START: MOV R0, #30H MOV R1, #33H MOV A, @R0 ADD A, @R1 MOV @R0, A INC R0 INC R1 MOV A, @R0 ADDC A, @R1 MOV @R0, A INC R0 INC R1 MOV A, @R0 ADDC A, @R1 MOV @R0, A CLR A ADDC A, #00H MOV 00H, A RET 例4.2(分支结构)假定在片外RAM的2000H、2001H、2002H这3个连续单元中,2000H和2001H单元存放着两个无符号数。要求找出两个无符号数中较大者,并存放于2002H单元。程序如下: ORG 0100H START: CLR C MOV DPTR, #2000H MOVX A, @DPTR MOV R2, A INC DPTR MOVX A, @DPTR SUBB A, R2 JNC LOOP1 XCH A, R2 LOOP0: INC DPTR MOVX @DPTR, A RET LOOP1: MOVX A, @DPTR SJMP LOOP0 例4.5两个多字节数的减法。 设有2个n字节无符号数,分别存放在片内的ram单元中,低字节在前,高字节在后。 CLR C MOV R2,#N LOOP:MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,LOOP RET 例4.3(循环结构)将片内RAM的20H单元为起始地址的数据串(最长为32 Bytes),传送到外部RAM的2000H单元为首地址的区域,直到发现“$”字符的ASCⅡ码为止。程序如下: START: MOV R0, #20H MOV DPTR, #2000H MOV R7, #32 LOOP0: MOV A, @R0 XRL A, #24H JZ LOOP1 MOV A, @R0 MOVX @DPTR, A INC R0 INC DPTR DJNZ R7, LOOP0 LOOP1: RET 例4.7假设被乘数放在r6和r7中,乘数放在r4和r5中,求乘积放于40H~43H单元中,低字节在前。 ORG 30H MUL16:MOV R0,#40H MOV A,R6 MOV B,R4 MUL AB MOV @R0,A MOV R3,B MOV A,R7 MOV B, R4 MUL AB ADD A,R3 MOV R3,A MOV A,#0 ADDC A,B MOV R2,A MOV A,R6 MOV B,R5 MUL AB ADD A,R3 INC R0 MOV @R0,A MOV R1,#0 MOV A,.R2 ADDC A,B MOV R2,A JNC NEXT INC R1 NEXT: MOV A,R7 MOV B,R5 MUL AB ADD A,R2 INC R0 MOV A,B ADDC A,R1 INC R0 MOV @R0,A RET 例5.5将89s51的P1口设置成数据输入口,外围设备每准备好一个数据时,发出一个选通信号,经D触发器74LS74送给单片机引脚INT1,通知cpu进行处理。编写主程序和中断服务程序。 主程序: ORG 0000H LJMP MAIN ORG 0013H LJMP INT1 ORG 0030H MAIN: CLR IT1 SETB EA SETB EX1 MOV DPTR,#1000H …… 终端服务程序: ORG 0200H INT1:PUSH PSW PUSH ACC CLR P3.0 NOP NOP SETB P3.0 MOV A, P1 MOVX @DPTR, A INC DPTR …… POP ACC POP PSW TETI 中断和查询相结合的多外部中断源系统 主程序: ORG 0000H AJMP MAIN ORG 0003H AJMP INSER MAIN:MOV R1,#0FFH SETB IT0 SETB EX0 SETB EA HERE:AJMP HERE 外部中断0的中断服务程序: INSER:JNB P1.1 ,L1 CLR P1.0 L1: JNB P1.3 ,L2 CLR P1.2 L2: JNB P1.5 ,L3 CLR P1.4 L3: JNB P1.7 ,L4 CLR P1.6 L4: RETI 例4.4(加法)设有两个4字节的二进制数,分别存放在片内以30H和50H为起始地址的单元中(先存放低字节)。求两个数的和,并将结果存入以30H为起始地址的单元中。如下: ORG 800H JAZ: MOV R0, #30H MOV R1, #50H MOV R2, #4 LCALL JAFA JC OVER MOV 34H, #00H SJMP HERE OVER: MOV 34H,#01H HERE: SJMP HERE ORG 1000H JAFA: CLR C JAADD:MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,JAADD RET 定时程序: 单循环定时程序: MOV R7, #time LOOP: NOP NOP DJNZ R7, LOOP RET NOP指令的机器周期为1,DJNZ指令的机器周期为2,则一次循环共4个机器周期。如果单片机的晶振频率为6MHz,则一个机器周期是2μS,所以一次循环的延迟时间为8μS。定时程序的延迟时间是循环程序段执行时间的整数倍,该程序的延迟时间为8×time(μS)。这个程序的最长延迟时间为2048μS。 较长时间的定时程序: MOV R7, #time1 LOOP1:MOV R6, #time2 LOOP2: NOP NOP DJNZ R6, LOOP2 DJNZ R7, LOOP1 RET 为了加长定时时间,通常采用多重循环的方法。如下面的双重循环定时程序,最长可延时262914个机器周期,即525828μS或大约526mS(设晶振频率为6MHz)。 例4.8(除法运算程序:采用“左移被除数相除法”)假设被除数存放于40H、41H单元中,除数存放于44H、45H单元中,要求将商存放于40H、41H单元中,余数存放于42H、43H单元中,低字节在前。48H、49H作为暂存单元。双字节除法程序如下: DIV16: MOV R0,#40H MOV A,@R0 JNZ LOOP0 INC R0 MOV A, @R0 JNZ LOOP0 CLR A MOV 42H,A MOV 43H,A RET LOOP0: MOV R0,#44H MOV A, @R0 JNZ LOOP1 INC R0 MOV A, @R0 JNZ LOOP1 RET LOOP1: CLR A MOV 42H, A MOV 43H, A MOV R6, #16 LOOP2: CLR C MOV R3. #4 MOV R0, #40H LOOP3: MOV A, @R0 RLC A MOV @R0, A INC R0 DJNZ R3, LOOP3 MOV R0, #42H MOV R1, #44H MOV A, @R0 CLR C SUBB A, @R1 MOV 48H, A INC R0 INC R1 MOV A, @R0 SUBB A, @R1 MOV 49H, A JC LOOP4 MOV R0, #42H MOV R1, #48H MOV A, @R1 MOV @R0, A INC R0 INC R1 MOV A, @R1 MOV @R0, A MOV A, 40H INC A MOV 40H, A LOOP4: DJNZ R2, LOOP2 RET 十六进制数转换成ASCII码的程序 例4.9 在片内RAM 20H单元中,存放有2位十六进制数,将其转换成ASCII码,并存放于21H和22H两个单元中。程序如下。 MOV SP, #3FH TRAN: PUSH 20H LCALL HASC POP 21H SWAP A PUSH ACC LCALL HASC ; POP 22H RET HASC: DEC SP DEC SP POP ACC ANL A, #0FH ADD A, #7 MOVC A, @A+PC PUSH ACC INC SP INC SP RET ASCTAB: DB '0123456789ABCDEF’ ASCII码转换十六进制数的程序 例4.10 将片外RAM 30H~3FH单元中的ASCII码依次转换成十六进制数,并存入片内RAM的60H~67H单元中。 程序如下: TRANST: MOV R0, #30H MOV R1, #60H MOV R7, #8 LOOP1: LCALL TRAN SWAP A MOV @R1, A INC R0 LCALL TRAN XCHD A, @R1 INC R0 INC R1 DJNZ R7, LOOP1 RET TRAN: CLR C MOVX A, @R0 SUBB A, #30H CJNE A, #10 SJMP LOOP3 LOOP2: JC DONE LOOP3: SUBB A, #7 DONE: RET 已知单片机 的 fosc =12MHz,分别设计延时0.1s、1s、1min的子程序。 设晶振频率为12MHz,一个机器周期为1µs, 延时0.1秒 DELAY:MOV R7,#250 LOOP1:MOV R6,#100 LOOP2:NOP NOP NOP DJNZ R6,LOOP2 DJNZ R7,LOOP1 RET 延时1秒 DELAY1: MOV R5,#10 DL: ACALL DELAY DJNZ R5,DL RET 延时1分钟 DELAY2: MOV R4,60 DL1: ACALL DELAY1 DJNZ R4,DL1 RET 定时器计数器T0对外部脉冲信号计数,每100个脉冲后T0转为定时器工作模式。定时1ms,又转为计数器工作模式,如此循环。假定单片机的晶振频率6MHz,请使用工作方式1实现。 ORG 0000H AJMP MAIN ORG 000BH LJMP PTOJ ORG 0100H MAIN:MOV TMOD,#05H MOV TH0,#FFH MOV TL0,#9CH CLR F0 SETB TR0 SETB ET0 SETB EA HERE:AJMP HERE PTOJ:JB F0,PTOD MOV TMOD,#01H MOV TH0,#FEH MOV TL0,#0CH SETB F0 RETI PTOD:CLR 0 MOV TMOD,#05H MOV TH0,#FFH MOV TL0,#9CH RETI END RAM内以data开始区域存放10个单字节的十进制数,求其累加和,并将结果存入sum和sum+1单元 ORG 2000H START: MOV R0,#DATA MOV R2,#10 MOV SUM+1,#00H CLR C CLR A LOOP: ADDC A,@R0 DA A MOV SUM ,A JNC NEXT MOV A,SUM+1 ADD A,#1 DA A MOV SUM+1,A NEXT: INC R0 DJNZ R2, LOOP SJMP 某系统有3个外部中断源,分别为中断源1,中断源2,中断源3。当某一中断源变低电平时即要求cpu处理,优先级顺序高到底是3,2,1,中断源服务程序入口地址为2100h,2200h,2300h,编写主程序和中断服务程序。 ORG 0000H AJMP MAIN ORG 0003H LJMP PINT0 ORG 0100H MAIN: SETB IT0 SETB EX0 SETB EA HERE: SJMP HERE PINT0: PUSH PSW PUSH A JNB P1.3 , IR3 JNB P1.2 , IR2 JNB P1.1 , IR1 PINTIR: POP A POP PSW RET I IR3: LJMP IR3INT IR2: LJMP IR2INT IR1: LJMP IR1INT ORG 2100H IR3INT: LJMP PINTIR ORG 2200H IR2INT: LJMP PINTIR ORG 2300H IR1INT: LJMP PINTIR END 89S51和ADC0809接口电路。假如我们要从A/D芯片模拟通道IN0~0N7每隔1秒读入一个数据,并将数据存入地址0080H~0087H的外部数据存储器。是设计程序。 MOV R0 , #A0H MOV R2 , #0FH MOV DPTR , #FEF8H MOV R, #08H LOOP1: MOVX @DPTR, A CALL DELAY MOVX A ,@DPTR MOVX @R0,A INC DPTR INC R0 DEC R2 CJNE R2,#00H,LOOP1 MOV DPTR , #0087H LOOP2: MOVX A,@R0 MOVX @DPTR A DEC DPTR DEC R1 DEC R0 CJNE R1,#00H,LOOP2 编写汇编程序使内存ram的20H~4fH单元的数据按降序排列。 ORG 1000H SUB: MOV R7,#30H DEC R7 LP0: CLR F0 MOV R0,#20H MOV R1,#21H MOV A,R7 MOV R6,A LP1: MOV B,@R0 MOV A,@R1 CJNE A,B NEXT SJMP NCH NEXT: JC NCH SETB F0 MOV @R0,A MOV @R1,B NVH:INC R0 INC R1 DJNZ R6 ,LP1 JNB F0,EXIT DJNE,R0,LP0 EXIT:RET 例6.1 设单片机的晶振频率为=12MHz,要求在P1.0引脚上输出周期为2ms的方波。 (1) 用定时器/计数器T1的定时工作方式1编程,采用中断方式。 ORG 0000H AJMP START ORG 001BH AJMP T1INT ORG 0030H START: MOV SP, #60H MOV TMOD, #10H MOV TH1, #0FCH MOV TL1, #18H SETB TR1 SETB ET1 SETB EA MAIN: AJMP MAIN T1INT: CPL P1.0 MOV TH1, #0FCH MOV TL1, #18H RETI (1)锯齿波的D/A转换程序: ORG 2000H START:MOV DPTR,#7FFFH MOV A,#00H LOOP: MOVX @DPTR,A ACALL DELAY2ms INC A SJMP LOOP (2)三角波 START: MOV DPTR, #7FFFH STR1: MOV R6, #00H STR2: MOV A, R6 MOVXX @DPTR,A INC R6 CJNE R6, #0FFH,STR2 STR3: DEC R6 MOV A,R6 MOVX @DPTR, A CJNE R6, #00H,STR3 AJMP STR1 (3)矩形波 START: MOV DPTR,#7FFFH LOOP1: MOV A,#DATAL MOVX @DPTR, A ACALL DELAYL MOV AA, #DATAH MOVX @DPTR, A ACALL DELAYH AJMP LOOP1 (4)梯形波 START: MOV DPTR,#7FFFH L1: MOV A, #DATAL-1 UP: INC A MOVX @DPTR, A CJNE A,#DATAH, L3 L3: JC UP L2 LCALL DELAY DOWN: DEC A MOVX @DPTR, A CJNE A, #DATAL,L4 L4: JNC DOWN SJMP L1 例7.1 用并行输入8位移位寄存器74HC165扩展16位并行输入口。编程实现从16位扩展口读入20个字节数据,并把它们转存到内部RAM的50H~63H中。 MOV R7,#20 MOV R0,#50H SETB F0 RCV0: CLR P1.0 SETB P1.0 RCV1: MOV SCON,#10H JNB RI,$ CLR RI MOV A,SBUF INC R0 CPL F0 JB F0,RCV2 DEC R7 SJMP RCV1 RCV2: DJNZ R7,RCV0 … … … … 例3 单片机串行口按双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验方式,要求传送的波特率为1200bps,编写有关的通信程序。 解: 主程序: MOV TMOD,#20H MOV TL1,#0F3H MOV TH1, #0F3H SETB TR1 MOV SCON,#50H MOV R0,#20H MOV R1,#40H ACALL SOUT SETB ES SETB EA LOOP:SJMP $ 主程序: MOV TMOD,#20H MOV TL1,#0F3H MOV TH1, #0F3H SETB TR1 MOV SCON,#50H MOV R0,#20H MOV R1,#40H ACALL SOUT SETB ES SETB EA LOOP:SJMP $ 中断服务程序如下: ORG 0023H AJMP SBR1 ORG 0100H SBR1: JNB RI,SEND ACALL SIN SJMP NEXT SEND:ACALL SOUT NEXT:RETI 发送子程序: SOUT: CLR TI MOV A,@R0 MOV C,P CPL C MOV ACC.7,C INC R0 MOV SBUF,A RET 接收子程序: SIN: CLR RI MOV A,SBUF MOV C,P CPL C ANL A,#7FH MOV @R1,A INC R1 RET
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

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

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

关于我们      便捷服务       自信AI       AI导航        抽奖活动

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

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服