五、程序框图 设置块起始地址
设置被除数、除数 (R2R3)>=(R6R7) 是 ?
否 1 送 F0 设置移位次数 被除数左移一位
被除数高位和除数相减差送AR1
是 (F0)=1?
否 是 (C) =1?
否 (AR1)送R2R3 上商1,(R5)+1送R5
否 (B)—1=0?
是 0 送 F0
结束 24 实验二 二进制到BCD码转换程序实验
一、实验要求
将给定的一个二进制数,转换成二十进制(BCD)码
二、实验目的
1.掌握简单的数值转换算法 2.基本了解数值的各种表达方法
三、实验说明
计算机中的数值有各种表达方式,这是计算机的基础。掌握各种数制之间的转换是一种基本功。有兴趣的同学可以试试将BCD转换成二进制码。
四、程序框图
给出要转换的二进制数 将数除以100,得百位数 保存百位数 将余数再除以10,得十位数 保存十位数 余数为个位数,将其保存 结束
25
五、程序清单
;将A拆为三个BCD码,并存入Result开始的三个单元
Result equ 30h org 0 0000 020015 ljmp Start BinToBCD:
0003 75F064 mov b, #100 0006 84 0007 F530 0009 E5F0 000B 75F00A 000E 84 000F F531 0011 85F032 0014 22 Start:
0015 758140 0018 747B 001A 1103 001C 02001C
div ab
mov Result, a mov a, b mov b, #10 div ab
mov Result+1, a mov Result+2, b ret mov sp, #40h mov a, #123 call BinToBCD ljmp $ End
26
; 除以 100, 得百位数 ; 余数除以 10, 得十位数; 余数为个位数
实验三 P1口输入、输出实验
一、实验要求
1、P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
2、P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二极管,编写程序读取开关状态,将此状态,在发光二极管上显示出来。编程时应注意P1.0,P1.1作为输入口时应先置1,才能正确读入值。
二、实验目的
1、学习P1口的使用方法。
2、学习延时子程序的编写和使用。
三、实验电路及连线
实验1: P1口循环点灯 实验2: P1口输入输出
四、实验说明
1、P1口是准双向口。它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。
2、延时子程序的延时计算问题 对于程序 Delay:
MOV R6,#0H MOV R7, #0H DelayLoop:
DJNZ R6,DelayLoop DJNZ R7,DelayLoop RET
查指令表可知MOV,DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6MHZ,所以该段程序执行时间为:
(256×255+2)×2×12÷6 ≈ 261ms
27
五、实验框图
开始 设置初始值 设移位次数 数据输出 左移一位 延时 是 否 移位次数完成? (A) P1口循环点灯程序框图
六、程序清单
; 实验1: P1口循环点灯 Loop:
0000 7401 mov a, #01h 0002 7A08 mov r2, #8 Output:
0004 F590 mov P1, a 0006 23 rl a 0007 12000F call Delay
000A DAF8 djnz r2, Output 000C 020000 ljmp Loop
Delay:
000F 7E00 mov r6, #0 0011 7F00 mov r7, #0 DelayLoop:
28
开始 P1.0,P1.1置1 读入P1.0口值 将读入的值输出到P1.2 读入P1.1口值 将读入的值输出到P1.3 (B) P1口输入输出程序框图