采用移位减法的算法。源码如下:
 1 ;//////////////////////////////////////////////////////////////////////////////
 2 ;函数:    div_u16_u8
 3 ;描述:    无符号双字节除以单字节
 4 ;入口:    (R6,R7)/(R0)
 5 ;出口:    (R6,R7).(R5)
 6 ;注意:    余数在R5;OV=1时表示溢出
 7 ;影响:    A,B,R0,R5,R6,R7
 8 div_u16_u8:    mov    r5,#0
 9         mov    b,#16
10 #ifdef __SPEED_P__
11         mov    a,r6        ;高字节小于除数的时候,只要移位8次
12         jz    _du168_line_03
13         clr    c
14         subb    a,r0        
15         jnc    _du168_loop_00
16         
17         mov    b,#8
18         clr    a        
19         xch    a,r7
20         xch    a,r6
21         xch    a,r5
22         sjmp    _du168_loop_00
23 
24 _du168_line_03:    mov    a,r7
25         mov    b,r0
26         div    ab
27         mov    r7,a
28         mov    r5,b
29         sjmp    _du168_line_04
30 #endif
31 _du168_loop_00:    clr    c
32 
33         mov    a,r7        ;向左移位
34         rlc    a
35         mov    r7,a
36         
37         mov    a,r6
38         rlc    a
39         mov    r6,a
40         
41         mov    a,r5
42         rlc    a
43         mov    r5,a
44         
45         mov    F0,c               ;移出位=1,或者高字节够减的时候,商+1
46         clr    c
47         subb    a,r0
48         anl    c,/F0
49         jc    _du168_line_01
50         mov    r5,a
51         inc    r7
52 _du168_line_01:    djnz    b,_du168_loop_00
53 
54 _du168_line_04:    mov    a,r5        ;四舍五入
55         add    a,r5
56         jc    _du168_line_02
57         subb    a,r0
58         jc    return_du168
59 _du168_line_02:    clr    c
60         mov    a,#1
61         add    a,r7
62         mov    r7,a
63         clr    a
64         addc    a,r6
65         mov    r6,a
66 
67 return_du168:    mov    OV,C
68         ret
 
点这里下载asm文件:下载。