简单 单片机编程!~!~~~

2025-02-23 15:42:08
推荐回答(2个)
回答1:

1.
mov a,#0 ;将A清零
clr c ;清进位标志位
mov a,r1 ;取低字节数据
add a,r7 ;低字节数据相加
mov 60h,a ;存低位结果
mov a,r0 ;取高位字字
addc a,r6 ;未高位和并加上低位的进位

mov 61h,a ;存高位结果

2.80C52 内部12分频,故将 6M/12 = 0.5M 得到频率,然后将频率换为
一个机器周期的时间 T = 1/ (0.5M) = 2 * e -6
即为2us,一个机器周期的时间 为2 us;

DELAY:MOV R7,#0F6H ; 该指令执行为 2 T 设标号为 A指令
LP: MOV R6,#0FAH ;该指令执行为 2 T 设标号为 B指令
DJNZ R6,$ ;该指令执行为 2 T 设标号为 C指令
DJNZ R7,LP ;该指令执行为 2 T 设标号为 D指令
RET
B指令将 250 传给 R6, C 指令中 的 "$" 表示本条指令的地址,所以一直在执行 C指令,
该所用时间 为 2T ,共为 250次, 250* 2T为C指令所执行的时间 ,
D指令中R7为 246,他会执行 B ,C ,D 三条指令,所以,每次要 2T + 250* 2T +2T 的时间 ,
共为 246 *( 2T + 250* 2T +2T ) 再加上A指令的2T 时间 所以共为:
246 *( 2T + 250* 2T +2T ) + 2T = 247972 us 在单片机中记为 250 ms的延时

3.
个人感觉 题目有些问题,51在做16位除法的时候 比较复杂一点
虽然可以做出来,我简单的将其最8位处理
mov r0,#50h
mov r7,#10
mov a,#0
loop: add a,@r0
inc r0
djnz r7,loop
mov b ,#10
div ab
mov 5ah,a

4.

MOV R6,#0FAH
mov r7,#10
lp: DJNZ R6,$ ; 1 ms延时
DJNZ R7,LP ; 10 次
RET
约为,10ms,一般情况,十几us的偏差是正常的。
注意,这是在你的刚说的 晶振6MHZ 的前提下的。

回答2:

题目集中了点。