单片机典型例题

上传人:公**** 文档编号:416980476 上传时间:2022-09-11 格式:DOC 页数:8 大小:20.50KB
返回 下载 相关 举报
单片机典型例题_第1页
第1页 / 共8页
单片机典型例题_第2页
第2页 / 共8页
单片机典型例题_第3页
第3页 / 共8页
单片机典型例题_第4页
第4页 / 共8页
单片机典型例题_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《单片机典型例题》由会员分享,可在线阅读,更多相关《单片机典型例题(8页珍藏版)》请在金锄头文库上搜索。

1、单片机典型例题 - 教育文库 例题 指出下列指令的寻址方式 MOV A,R1 ;A(R1) 寄存器寻址 ADD A,#05H ; A(A)+立即数 05H 立即寻址 MOV A,R1 ; A (R1) 寄存器间接寻址 MOV 30H,4AH ; 30H (4AH) 直接寻址 MOVC A,A+DPTR ;A(A)+(DPTR) 变址寻址 SJMP LP ; PC(PC)+ 2 + 偏移量 相对寻址 MOV C, 65H ; Cy (65H) 位寻址 【例】 MOV DPTR,#1234H ;(DPTR)=1234H 该指令也可以用两条8位数据传送指令实现: MOV DPH,#12H ;(DPH

2、)=12H MOV DPL,#34H ;(DPL)=34H,(DPTR)=1234H 例1:读下面程序,写出41H、42H单元内容 MOV R0, #40H MOV R1, #41H MOV A, #11H MOV 40H, #32H MOV R1, A MOV 42H , R0 解:(41H)=11H, (42H)=32H 例2:将片内RAM中30H3FH单元的内容复制到50H5FH单元中。 MOV R0,#30H ;30h R0 MOV R1,#50H ;50h R1 MOV R7,#10H ;10h R7 LOOP:MOV A,R0 ; ( (R0 ) A MOV R1,A ; A (R

3、1 ) INC R0 ; (R0 )+1 R0 INC R1 ; (R1 )+1 R1 DJNZ R7,LOOP ; R7内容不为零转LOOP RET 例1 :已知外部RAM的88H单元有一个数x,试编程将x送外部RAM的1818H单元。 【解】:外部RAM中的数据是不能直接传送的,因此必须使用两次 MOVX 指令完成此操作。 ORG 2000H MOV R0,#88H ;为8位指针赋值 MOVX A,R0 ;取 x 到累加器A MOV DPTR,#1818H ;为16位指针赋值 MOVX DPTR,A ;x 送RAM的1818h单元 ? 已知RAM50h单元有一个09的数,试编程将它变成相应

4、的ASCII码。 【解】:09的ASCII码是30h39h,两者相差30h。 方法一:对50h单元的数据高四位组装一个30h。 mov r0,#50h ;指针赋值 mov a,#30h ;30hA xchd a,r0 ;(A)30?(r0)30,在A中组成ASCII码 mov r0,a ;A中的ASCII送回50h单元 例:设(30H)=X,(40H)=Y,试利用堆栈区域实现30H和40H单元中的数据交换 MOV SP,#60H ;设栈底的地址为60H PUSH 40H ; Y (61H) PUSH 30H ; X (62H) POP 40H ; X (40H) POP 30H ; Y(30H

5、) 【例】编程将片内RAM中10H和20H单元的内容交换。 方法一:用交换指令。 XCH A,10H XCH A,20H XCH A,10H 方法二:用“MOV”指令。 MOV A,10H MOV 10H,20H MOV 20H,A 方法三:用堆栈。 PUSH 10H PUSH 20H POP 10H POP 20H 思考题:已知:(A)=A9H、(20H)= 98H,试问执行如下指令后累加器A和CY中的值是多少? CLR C MOV A,#0A9H MOV R0,#20H MOV 20H,#98H SUBB A,R0 执行结果: (A)= 11H,(PSW)=00H 【例】:已知M1、M2单

6、元中存有两个16位无符号数x1 、x2 (低位在前)。试编程求x1+x2,并将结果放入M1、M1+1单元 (低8位在M1单元)。设两数之和不会超过16位(65535)。 【解】: MOV R0,#M1 ;x1指针赋初值 MOV R1,#M2 ;x2指针赋初值 MOV A,R0 ;取x1低8位送A ADD A,R1 ;x1与x2低8位相加 MOV R0,a ;低8位和送m1单元 INC R0 INC R1 ;修改指针 MOV A,R0 ;取x1的高8位送A ADDC A,R1 ;x1与x2的高8位和Cy相加 MOV R0,A ;结果送M1+1单元 【例】:试将A中的二进制数转换为3位BCD码,其

7、中,百位数存放于31H单元,十位数和个位数压缩后存于30H单元中。 【解】: MOV B,#100 DIV AB MOV 31H,A MOV A,#10 XCH A,B DIV AB SWAP A ADD A,B MOV 30H,A 已知:外部RAM的30H单元中有一个数AAH,现要将其高4位不变,低4位取反,试编程。 解1,利用MOVX A,Ri指令: MOV R0,#30H 1 0 1 0 1 0 1 0 MOVX A,R0 0 0 0 0 1 1 1 1 XRL A,#0FH 1 0 1 0 0 1 0 1 MOVX R0,A 解2,利用MOVX A,DPTR MOV DPTR,#003

8、0H MOVX A,DPTR XRL A,#0FH MOVX DPTR,A 已知:在M1和M1+1单元有一个16位数(M1存低8位),试编程将其扩大2倍(设结果小于65535)。 解:扩大2倍可以用左移一位来实现。 CLR C ;清除Cy位 MOV R1,#M1 ;指针赋值 MOV A,R1 ;取低8位数据 RLC A ;循环左移,Cy进低位,高位进Cy MOV R1,A ;移位后数据回送 INC R1 ;指针加一 MOV A,R1 ;取高8位数据 RLC A ;循环左移Cy进低位 MOV R1,A ;数据回送 例:试将00H位和7FH位中的内容互换。 【解】:两个位互换必须找一个位作为缓冲位

9、。 MOV C,00H MOV 01H,C MOV C,7FH MOV 00H,C MOV C,01H MOV 7FH,C 已知:内部RAM 的M1、M2单元各有两个无符号的8位数。试编程比较其大小,并将大数送MAX单元。 【解】: MOV A,M1 ;操作数1送累加器A CJNE A,M2,LOOP ;两个数相比较 LOOP: JNC LOOP1 ;M1=M2时转LOOP1 MOV A,M2 ;M1M2时,取M2到A LOOP1: MOV MAX,A ;A中数据送MAX单元 【说明】: 1,第2条指令作为比较指令使用,不论结果多少都转LOOP 2,第3条指令是一条位控转移指令,根据Cy的状态

10、控制转移。 【例】 已知16位二进制负数存放在R1R0中,试求 其补码,并将结果存在R3R2中。 CONT: CLR A MOV A,R0 ;读低8位 CPL A ;取反 ADD A,#01H ;加1 MOV R2,A ;存低8位 MOV A,R1 ;读高8位 CPL A ;取反 ADDC A,#80H ;加进位及符号位 MOV R3,A ;存高8位 RET 例:将R2中BCD码数转为二进制数存进R2 ORG 2000H BCD2B:MOV A, R2 ;取入口数据 ANL A, #0F0H ;取出十位 SWAP A ;高4位 低4位 MOV B, #0AH MUL AB ;十位乘10 MOV

11、 R3,A ;积暂存进R3 MOV A, R2;再取入口数据 ANL A, #0FH ;取出个位 ADD A, R3 例:软件循环延时100mS(晶振12MHz) 1Tm =1uS 100mS = 100000 uS MOV Rn #data 和 NOP 是单机器周期指令 DJNZ Rn,rel 是双机器周期指令 200 = 0C8H ; 248 = 0F8H ORG 1000H DELAY: MOV R6,#200 ; 1Tm LOOP1: MOV R7,#248 ; 1Tm NOP ; 1Tm LOOP2: DJNZ R7,LOOP2 ; 2Tm DJNZ R6,LOOP1 ; 2Tm RET ; 2Tm 例:软件循环延时1S(晶振12MHz) 1Tm =1uS 1S = 1000000 uS MOV Rn #data 是单机器周期指令 DJNZ Rn,rel 是双机器周期指令 ORG 1000H DL1S:MOV R7,#10 DL1: MOV R6,#200 DL2: MOV R5, #250 DL3: DJNZ R5, DL3 DJNZ R6,DL2 第 页 共 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号