DELAY_5ms2: mov R7,#70h ;设置R7初始计数值 DELAY_5ms3: djnz R7,DELAY_5ms3 ;延时时间为 Time=( ( (R7*2)+2+1 )*R6+2+1 )*R5+1 djnz R6,DELAY_5ms2 ; djnz R5,DELAY_5ms1 ; ret
SEGMENT7: DB 3Fh ;7段数码管字符0的abcdefg的值,a在最低位,最高位始终保留为0 DB 06h DB 5Bh DB 4Fh DB 66h DB 6Dh DB 7Dh DB 07h DB 7Fh DB 6Fh DISPLAY: mov DPTR,#0fEffh mov r1,#40h mov A,@r1 movx @DPTR,A setb C mov P1.4,C clr C mov P1.4,C call DELAY_5ms setb C mov P1.4,C inc r1 mov A,@r1 movx @DPTR,A setb C mov P1.5,C clr C mov P1.5,C call DELAY_5ms setb C mov P1.5,C inc r1 mov A,@r1 movx @DPTR,A setb C
;写第一位数码管 ;写第二位数码管 ;写第三位数码管
mov P1.6,C clr C mov P1.6,C call DELAY_5ms setb C mov P1.6,C inc r1 mov A,@r1 ;写第四位数码管 movx @DPTR,A setb C mov P1.7,C clr C mov P1.7,C call DELAY_5ms setb C mov P1.7,C ret
;双字节二进制无符号数乘法
;被乘数在R2(高位)、R3(低位)中,乘数在R6(高位)、R7(低位)中。 ;乘积在R2(高位)、R3、R4、R5(低位)中。 ;用到累加器A,B,PSW,R2~R7。 ;永远不会产生进位。 ;在出口时总是清除C。
;若结果超出2个字节范围则OV=1。 MULD2: MOV A,R3 MOV B,R7 MUL AB MOV R4,B MOV R5,A MOV A,R3 MOV B,R6 MUL AB ADD A,R4 MOV R4,A CLR A ADDC A,B MOV R3,A MOV A,R2 MOV B,R7 MUL AB ADD A,R4
MOV R4,A MOV A,R3 ADDC A,B MOV R3,A CLR A RLC A XCH A,R2 MOV B,R6 MUL AB ADD A,R3 MOV R3,A MOV A,R2 ADDC A,B MOV R2,A ORL A,R3 JZ MULD21 SETB OV RET MULD21: CLR OV RET
;四字节无符号数除法
;R0存放被除数,除数,商数的地址。
;从R0开始的连续四个字节为结果的余数,入口时可以为任意,但在出口时发生变化。 ;其后的连续4个字节在入口时是被除数,出口时是商数。 ;再其后的连续四个字节在入口时是除数,出口时保持不变。 ;用到累加器A,B,PSW,R0~R7。
;如果除数为零,则置OV=1标志,否则清零。 ;在出口时总是清除C。 DIVD4: MOV A,R0 MOV B,A ADD A,#08h MOV R1,A MOV A,#00h ORL A,@R1 INC R1 ORL A,@R1 INC R1 ORL A,@R1 INC R1
ORL A,@R1 JZ DIVD45 MOV R1,B MOV R2,#04h DIVD41: MOV @R1,#00h INC R1 DJNZ MOV DIVD42: MOV MOV MOV ADD MOV CLR C DIVD43: MOV RLC A MOV DEC DJNZ MOV ADD MOV MOV ADD MOV MOV SUBB MOV DEC DEC MOV SUBB MOV DEC DEC MOV SUBB MOV DEC DEC MOV
R2,DIVD41 R3,#20h R2,#08h A,B R0,A A,#07h R1,A A,@R1 @R1,A R1 R2,DIVD43 A,R0 A,#03h R1,A A,R0 A,#0Bh R0,A A,@R1 A,@R0 R4,A R1 R0 A,@R1 A,@R0 R5,A R1 R0 A,@R1 A,@R0 R6,A R1 R0 A,@R1
相关推荐: