0
|
1 RoundResult SET 0 ; Rounding function. RoundResult = Round(aa/bb)
|
|
2 Round macro aa,bb
|
|
3 LOCAL rr = aa/bb
|
|
4 LOCAL d1 = aa - rr*bb
|
|
5 LOCAL d2 = (rr+1)*bb - aa
|
|
6 RoundResult = rr
|
|
7 if d1 >= d2
|
|
8 RoundResult++
|
|
9 endif
|
|
10 endm
|
|
11
|
|
12 AbsResult SET 0
|
|
13 Abs macro nr
|
|
14 if nr>=0
|
|
15 AbsResult = nr
|
|
16 else
|
|
17 AbsResult = -nr
|
|
18 endif
|
|
19 endm
|
|
20
|
|
21 Round xtal,(16*baud)
|
|
22 spbrg_value EQU RoundResult-1
|
|
23
|
|
24 Round xtal,(16*(spbrg_value+1))
|
|
25 baud_real EQU RoundResult
|
|
26 Abs(baud_real-baud)
|
|
27 errpercent EQU AbsResult*100/baud
|
|
28 if errpercent > 4
|
|
29 ERROR big error in baudrate: #v(errpercent)%
|
|
30 endif
|
|
31 if errpercent >= 2
|
|
32 messg baudrate not exact: #v(errpercent)%
|
|
33 endif |