AS V1.42 Beta [Bld 32] - source file ledtemp.asm - page 1 - 6/19/2006 20:52:51 1/ 0 : ; MCS-48 3-DIGIT DIGITAL TEMPERATURE MONITOR 2/ 0 : ; CPU 8048 (8748) 1KB ROM 64BYTE RAM 3/ 0 : ; DS18B20 (DS1822) 4/ 0 : ; 5/ 0 : ; $Id: ledtemp.asm,v 1.9 2006/06/19 11:52:48 runner Exp $ 6/ 0 : 7/ 0 : page 0 8/ 0 : cpu 8048 9/ 0 : 10/ 0 : =20H RAMTOP EQU 20h ;8048 Internal RAM Top Address 11/ 0 : =0H ROMTOP EQU 0 ;8048 ROM Start Address 12/ 0 : 13/ 0 : ; DELTA CHECK VALUE 14/ 0 : =1H DELTA1 EQU 1 ;fluctuation fudge factor > 1/16'C 15/ 0 : =FH DELTA2 EQU 15 ;fluctuation fudge factor > 15/16'C 16/ 0 : 17/ 0 : ; DS18B20 value 18/ 0 : =A0H M10 EQU (10 << 4) 19/ 0 : =640H M100 EQU (100 << 4) 20/ 0 : 21/ 20 : ORG RAMTOP 22/ 20 : TEMPDT ;for work area for getTemp(DS18B20/1822) 23/ 20 : ds 1 ; low byte 24/ 21 : ds 1 ; high byte 25/ 22 : ds 1 ; status byte 26/ 23 : LASTDT ;Last Updated value 27/ 23 : ds 1 ; low byte (copy of TEMPDT) 28/ 24 : ds 1 ; high byte (copy of TEMPDT) 29/ 25 : DSIGN ;DELTA sign plus or minus 30/ 25 : ds 1 ; delta sign 0=plus/ff=minus 31/ 26 : 32/ 0 : ORG ROMTOP 33/ 0 : _ROMTOP: 34/ 0 : 14 06 call diag 35/ 2 : 14 36 $$loop call main 36/ 4 : 04 02 jmp $$loop 37/ 6 : 38/ 6 : ; diag 39/ 6 : ; all led on -> beep -> all led off -> beep 40/ 6 : ; bit shift pattern digit#0 -> digit#1 -> digit#2 41/ 6 : diag: 42/ 6 : 27 clr a 43/ 7 : 39 outl p1,a 44/ 8 : 3A outl p2,a 45/ 9 : 02 outl bus,a 46/ A : 34 76 call tone 47/ C : 34 5C call delay 48/ E : 49/ E : 27 clr a 50/ F : 37 cpl a 51/ 10 : 39 outl p1,a 52/ 11 : 3A outl p2,a 53/ 12 : 02 outl bus,a 54/ 13 : 34 76 call tone 55/ 15 : 34 5C call delay 56/ 17 : 57/ 17 : 23 FE mov a,#0feh 58/ 19 : B8 08 mov R0,#8 59/ 1B : 02 $$loop1 outl BUS,a 60/ 1C : 34 69 call hdelay 61/ 1E : E7 rl a 62/ 1F : E8 1B djnz R0,$$loop1 63/ 21 : 64/ 21 : 23 FE mov a,#0feh 65/ 23 : B8 08 mov R0,#8 66/ 25 : 39 $$loop2 outl P1,a 67/ 26 : 34 69 call hdelay 68/ 28 : E7 rl a 69/ 29 : E8 25 djnz R0,$$loop2 70/ 2B : 71/ 2B : 23 FE mov a,#0feh 72/ 2D : B8 08 mov R0,#8 73/ 2F : 3A $$loop3 outl P2,a 74/ 30 : 34 69 call hdelay 75/ 32 : E7 rl a 76/ 33 : E8 2F djnz R0,$$loop3 77/ 35 : 83 ret 78/ 36 : 79/ 36 : ; examin DS18B20 and display LED 80/ 36 : main: 81/ 36 : 54 5E call getTemp 82/ 38 : 14 90 call display 83/ 3A : ; delta 2 check 84/ 3A : BE 0F $$chk2 mov R6,#(DELTA2) 85/ 3C : 14 6B call chkdelta 86/ 3E : E6 57 jnc $$chk1 ;skip non over DELTA 87/ 40 : 34 00 call savelast 88/ 42 : B8 25 mov R0,#DSIGN ;get sign of DELTA 89/ 44 : F0 mov a,@R0 90/ 45 : 96 4F jnz $$cold2 91/ 47 : 34 76 $$hot2 call tone 92/ 49 : 34 76 call tone 93/ 4B : 34 76 call tone 94/ 4D : 04 6A jmp $$ret 95/ 4F : 34 A4 $$cold2 call tonehl 96/ 51 : 34 A4 call tonehl 97/ 53 : 34 A4 call tonehl 98/ 55 : 04 6A jmp $$ret 99/ 57 : ; delta 1 check 100/ 57 : BE 01 $$chk1 mov R6,#(DELTA1) 101/ 59 : 14 6B call chkdelta 102/ 5B : E6 6A jnc $$ret ;skip non over DELTA 103/ 5D : 34 00 call savelast 104/ 5F : B8 25 mov R0,#DSIGN ;get sign of DELTA 105/ 61 : F0 mov a,@R0 106/ 62 : 96 68 jnz $$cold1 107/ 64 : 34 76 $$hot1 call tone 108/ 66 : 04 6A jmp $$ret 109/ 68 : 34 A4 $$cold1 call tonehl 110/ 6A : 83 $$ret ret 111/ 6B : 112/ 6B : ; delta check 113/ 6B : ; compare (TEMPDT) and (LASTDT) 114/ 6B : ; if |(TEMPDT) - (LASTDT)| > 00:R6 set C=1 115/ 6B : ; broken Acc,R0,R2,R3,R4,R5,R6,R7 116/ 6B : ; (DSIGN)=sign 0=plus/FF minus 117/ 6B : chkdelta: 118/ 6B : B8 20 mov R0,#TEMPDT ;(R3:R2) <-- (TEMPDT) 119/ 6D : F0 mov a,@R0 120/ 6E : AA mov R2,a 121/ 6F : 18 inc R0 122/ 70 : F0 mov a,@R0 123/ 71 : AB mov R3,a 124/ 72 : ; 125/ 72 : B8 23 mov R0,#LASTDT ;(R5:R4) <-- (LASTDT) 126/ 74 : F0 mov a,@R0 127/ 75 : AC mov R4,a 128/ 76 : 18 inc R0 129/ 77 : F0 mov a,@R0 130/ 78 : AD mov R5,a 131/ 79 : ; 132/ 79 : 74 4F call sub16 ;diff NOW and LAST 133/ 7B : 74 0F call abs16 134/ 7D : ; save sign to (DSIGN), (TEMPDT) < (LASTDT) minus 135/ 7D : 23 00 mov a,#0 136/ 7F : E6 82 jnc $$sign 137/ 81 : 37 cpl a 138/ 82 : B8 25 $$sign mov R0,#DSIGN 139/ 84 : A0 mov @R0,a ;save sign to (DSIGN) 140/ 85 : ; delta check 141/ 85 : 2A xch a,R2 ;R5:R4 <-- R3:R2 142/ 86 : 2C xch a,R4 143/ 87 : 2B xch a,R3 144/ 88 : 2D xch a,R5 145/ 89 : FE mov a,R6 ;(R3:R2) = 00:parameter 146/ 8A : AA mov R2,a 147/ 8B : BB 00 mov R3,#0 148/ 8D : 74 64 call cmp16 149/ 8F : 83 ret 150/ 90 : 151/ 90 : ; in R3:R2 = DS18B20 Original Data 152/ 90 : ; 153/ 90 : ; P2 P1 BUS 154/ 90 : ; - - - 155/ 90 : ; | | | | | | 156/ 90 : ; - - - 157/ 90 : ; | | | | | | 158/ 90 : ; - - . - 159/ 90 : ; 160/ 90 : display: 161/ 90 : FB mov a,R3 162/ 91 : 53 80 anl a,#80h 163/ 93 : C6 C5 jz $$plus ;grator than 0 164/ 95 : $$minus: 165/ 95 : 23 BF mov a,#10111111B ; '-' 166/ 97 : 3A outl P2,a 167/ 98 : ; normalization 168/ 98 : FA mov a,R2 169/ 99 : 37 cpl a 170/ 9A : 03 01 add a,#1 171/ 9C : AA mov R2,a 172/ 9D : FB mov a,R3 173/ 9E : 37 cpl a 174/ 9F : 13 00 addc a,#0 175/ A1 : AB mov R3,a 176/ A2 : ; check >= 10? 177/ A2 : BC A0 mov R4,#(M10 & 0ffh) 178/ A4 : BD 00 mov R5,#(M10 >> 8) 179/ A6 : 74 64 call cmp16 180/ A8 : E6 B9 jnc $$mover 181/ AA : C6 B9 jz $$mover 182/ AC : ; Display Pattern "-N.N" 183/ AC : FA mov a,R2 184/ AD : 53 0F anl a,#0fh 185/ AF : 34 18 call dotdisp ;dot part 186/ B1 : 34 0D call shiftR32 187/ B3 : 34 47 call getPtn 188/ B5 : 53 7F anl a,#01111111B ; . Dot Display 189/ B7 : 39 outl P1,a 190/ B8 : 83 ret 191/ B9 : ; Display Pattern "-NN" 192/ B9 : $$mover: 193/ B9 : 34 0D call shiftR32 194/ BB : 34 30 call a2bcd 195/ BD : 34 47 call getPtn 196/ BF : 02 outl BUS,a 197/ C0 : FE mov a,R6 198/ C1 : 34 47 call getPtn 199/ C3 : 39 outl P1,a 200/ C4 : 83 ret 201/ C5 : $$plus 202/ C5 : ; check >= 100? 203/ C5 : BC 40 mov R4,#(M100 & 0ffh) 204/ C7 : BD 06 mov R5,#(M100 >> 8) 205/ C9 : 74 64 call cmp16 206/ CB : E6 E7 jnc $$pover 207/ CD : C6 E7 jz $$pover 208/ CF : ; DISPLAY Pattern "NN.N" 209/ CF : FA mov a,R2 210/ D0 : 53 0F anl a,#0fh 211/ D2 : 34 18 call dotdisp ;dot part 212/ D4 : 34 0D call shiftR32 213/ D6 : 34 30 call a2bcd 214/ D8 : 34 47 call getPtn 215/ DA : 53 7F anl a,#01111111B ; . Dot Display 216/ DC : 39 outl P1,a 217/ DD : FE mov a,R6 218/ DE : C6 E4 jz $$zero 219/ E0 : 34 47 call getPtn 220/ E2 : 3A outl P2,a 221/ E3 : 83 ret 222/ E4 : 37 $$zero cpl a ;"0N.N" --> " N.N" zero suppress 223/ E5 : 3A outl P2,a 224/ E6 : 83 ret 225/ E7 : ; Display "NNN" 226/ E7 : $$pover 227/ E7 : 34 0D call shiftR32 228/ E9 : 34 30 call a2bcd 229/ EB : 34 47 call getPtn 230/ ED : 02 outl BUS,a 231/ EE : FE mov a,R6 232/ EF : 34 47 call getPtn 233/ F1 : 39 outl P1,a 234/ F2 : FD mov a,R5 235/ F3 : 34 47 call getPtn 236/ F5 : 3A outl P2,a 237/ F6 : 83 ret 238/ F7 : 239/ F7 : align 256 240/ 100 : 241/ 100 : ; save last temperature to (LASTDT) 242/ 100 : savelast: 243/ 100 : B8 20 mov R0,#TEMPDT 244/ 102 : B9 23 mov R1,#LASTDT 245/ 104 : BF 02 mov R7,#2 246/ 106 : F0 $$loop mov a,@R0 247/ 107 : A1 mov @R1,a 248/ 108 : 18 inc R0 249/ 109 : 19 inc R1 250/ 10A : EF 06 djnz R7,$$loop 251/ 10C : 83 ret 252/ 10D : 253/ 10D : ; (R3:R2) Shift Left 254/ 10D : ; cccc:bbbb,aaaa:nnnn --> bbbb:aaaa,nnnn:000 255/ 10D : ; broken Acc(=R3),R7 256/ 10D : shiftR32: 257/ 10D : BF 04 mov R7,#4 258/ 10F : FA $$shift mov a,R2 ; 4bit R3 <--- R2 bit-shift 259/ 110 : F7 rlc a 260/ 111 : AA mov R2,a 261/ 112 : FB mov a,R3 262/ 113 : F7 rlc a 263/ 114 : AB mov R3,a 264/ 115 : EF 0F djnz R7,$$shift 265/ 117 : 83 ret 266/ 118 : 267/ 118 : ; display acc to led with decimal convert 268/ 118 : ; in Acc 269/ 118 : ; broken R7 270/ 118 : dotdisp: 271/ 118 : BF 20 mov R7,#(dotPtn # 256) 272/ 11A : 6F add a,R7 273/ 11B : A3 movp a,@a 274/ 11C : 34 47 call getPtn 275/ 11E : 02 outl BUS,a 276/ 11F : 83 ret 277/ 120 : dotPtn: 278/ 120 : 00 db 0 279/ 121 : 01 db 1 280/ 122 : 01 db 1 281/ 123 : 02 db 2 282/ 124 : 03 db 3 283/ 125 : 03 db 3 284/ 126 : 04 db 4 285/ 127 : 04 db 4 286/ 128 : 05 db 5 287/ 129 : 06 db 6 288/ 12A : 06 db 6 289/ 12B : 07 db 7 290/ 12C : 08 db 8 291/ 12D : 08 db 8 292/ 12E : 09 db 9 293/ 12F : 09 db 9 294/ 130 : 295/ 130 : ; convert binary to BCD 296/ 130 : ; in Acc 297/ 130 : ; return R5:R6:A (R5: 100 prt, R6: 10 part, A: 1 part) 298/ 130 : a2bcd: 299/ 130 : BD 00 mov R5,#0 300/ 132 : 03 9C $$_100 add a,#(-100) ;100 counter 301/ 134 : E6 39 jnc $$_10 302/ 136 : 1D inc R5 303/ 137 : 24 32 jmp $$_100 304/ 139 : BE 00 $$_10 mov R6,#0 305/ 13B : 03 64 add a,#100 306/ 13D : 03 F6 $$l10 add a,#(-10) ;10 counter 307/ 13F : E6 44 jnc $$_1 308/ 141 : 1E inc R6 309/ 142 : 24 3D jmp $$l10 310/ 144 : 03 0A $$_1 add a,#10 311/ 146 : 83 ret 312/ 147 : 313/ 147 : ; get 0 to F 7SEG LED PATTERN 314/ 147 : ; in Acc 315/ 147 : ; broken R7 316/ 147 : ; out Acc 317/ 147 : getPtn: 318/ 147 : BF 4C mov R7,#(ledPtn # 256) 319/ 149 : 6F add a,R7 320/ 14A : A3 movp a,@a 321/ 14B : 83 ret 322/ 14C : ledPtn: 323/ 14C : C0 db 11000000B ;0 324/ 14D : F9 db 11111001B ;1 325/ 14E : A4 db 10100100B ;2 326/ 14F : B0 db 10110000B ;3 327/ 150 : 99 db 10011001B ;4 328/ 151 : 92 db 10010010B ;5 329/ 152 : 82 db 10000010B ;6 330/ 153 : D8 db 11011000B ;7 331/ 154 : 80 db 10000000B ;8 332/ 155 : 90 db 10010000B ;9 333/ 156 : 88 db 10001000B ;A 334/ 157 : 83 db 10000011B ;b 335/ 158 : C6 db 11000110B ;C 336/ 159 : A1 db 10100001B ;d 337/ 15A : 86 db 10000110B ;E 338/ 15B : 8E db 10001110B ;F 339/ 15C : 340/ 15C : ; delay time 977.9ms(with return) 341/ 15C : ; broken R6,R7 342/ 15C : delay: 343/ 15C : BE FF mov R6,#0ffh 344/ 15E : BF FF $$l1 mov R7,#0ffh 345/ 160 : 00 $$l2 nop 346/ 161 : 00 nop 347/ 162 : 00 nop 348/ 163 : 00 nop 349/ 164 : EF 60 djnz R7,$$l2 350/ 166 : EE 5E djnz R6,$$l1 351/ 168 : 83 ret 352/ 169 : 353/ 169 : ; delay time 486.7ms(with return) 354/ 169 : ; broken R6,R7 355/ 169 : hdelay: 356/ 169 : BE 7F mov R6,#07fh 357/ 16B : BF FF $$l1 mov R7,#0ffh 358/ 16D : 00 $$l2 nop 359/ 16E : 00 nop 360/ 16F : 00 nop 361/ 170 : 00 nop 362/ 171 : EF 6D djnz R7,$$l2 363/ 173 : EE 6B djnz R6,$$l1 364/ 175 : 83 ret 365/ 176 : 366/ 176 : =80H _BUS7ON equ (1<<7) ;BUS7=H(OR bit pattern) 367/ 176 : =7FH _BUS7OFF equ (0ffH ! _BUS7ON) 368/ 176 : tone: 369/ 176 : ; 1320Hz 370/ 176 : ; broken Acc,R5,R6,R7 371/ 176 : BD 03 mov R5,#3 372/ 178 : BE 84 $$loop mov R6,#132 ; 100ms 373/ 17A : 98 7F $$tone anl BUS,#_BUS7OFF ; BUS7=L 374/ 17C : BF 48 mov R7,#72 ; 372.5us 375/ 17E : EF 7E djnz R7,$ 376/ 180 : 88 80 orl BUS,#_BUS7ON ; BUS7=H 377/ 182 : BF 48 mov R7,#72 378/ 184 : EF 84 djnz R7,$ 379/ 186 : EE 7A djnz R6,$$tone 380/ 188 : ; delay 100ms 381/ 188 : BE 14 mov R6,#20 382/ 18A : BF 64 $$delay mov R7,#100 383/ 18C : EF 8C djnz R7,$ ;500us 384/ 18E : EE 8A djnz R6,$$delay 385/ 190 : ED 78 djnz R5,$$loop 386/ 192 : 83 ret 387/ 193 : 388/ 193 : tonelh: 389/ 193 : ; broken Acc,R6,R7 390/ 193 : BE C2 mov R6,#194 391/ 195 : 98 7F $$tone anl BUS,#_BUS7OFF ; BUS7=L 392/ 197 : FE mov a,R6 393/ 198 : AF mov R7,a 394/ 199 : EF 99 djnz R7,$ 395/ 19B : 88 80 orl BUS,#_BUS7ON ; BUS7=H 396/ 19D : FE mov a,R6 397/ 19E : AF mov R7,a 398/ 19F : EF 9F djnz R7,$ 399/ 1A1 : EE 95 djnz R6,$$tone 400/ 1A3 : 83 ret 401/ 1A4 : tonehl: 402/ 1A4 : ; broken Acc,R6,R7 403/ 1A4 : BE C2 mov R6,#194 404/ 1A6 : 98 7F $$tone anl BUS,#_BUS7OFF ; BUS7=L 405/ 1A8 : FE mov a,R6 406/ 1A9 : 37 cpl a 407/ 1AA : AF mov R7,a 408/ 1AB : EF AB djnz R7,$ 409/ 1AD : 88 80 orl BUS,#_BUS7ON ; BUS7=H 410/ 1AF : FE mov a,R6 411/ 1B0 : 37 cpl a 412/ 1B1 : AF mov R7,a 413/ 1B2 : EF B2 djnz R7,$ 414/ 1B4 : EE A6 djnz R6,$$tone 415/ 1B6 : 83 ret 416/ 1B7 : 417/ 1B7 : align 256 418/ 200 : 419/ 200 : =80H _OWon equ (1<<7) ;P27 DS1822 1-wire bus 420/ 200 : =7FH _OWoff equ (0ffh ! _OWon) 421/ 200 : ; 1 wire bus reset sequence 422/ 200 : ; broken A,R7 423/ 200 : ; return Acc=Slave Sample(Zero or not) 424/ 200 : OWreset: 425/ 200 : 8A 80 orl P2,#_OWon 426/ 202 : BF C8 mov R7,#200 ;1ms High 427/ 204 : EF 04 djnz R7,$ 428/ 206 : 9A 7F anl P2,#_OWoff 429/ 208 : BF 5F mov R7,#95 430/ 20A : EF 0A djnz R7,$ ;480us Low 431/ 20C : 8A 80 orl P2,#_OWon 432/ 20E : BF 0D mov R7,#13 ;70us High 433/ 210 : EF 10 djnz R7,$ 434/ 212 : 0A in a,P2 435/ 213 : BF 51 mov R7,#81 ;keep 410us 436/ 215 : EF 15 djnz R7,$ 437/ 217 : 53 80 anl a,#_OWon 438/ 219 : 83 ret ;Acc = 1-Wire Status 439/ 21A : 440/ 21A : ; 1 wire bus write bit 1 441/ 21A : ; broken A,R7 442/ 21A : ; return Acc=Slave Sample(Zero or not) 443/ 21A : OWfetch: 444/ 21A : 9A 7F anl P2,#_OWoff 445/ 21C : 00 nop 446/ 21D : 8A 80 orl P2,#_OWon ;7.5us Low 447/ 21F : 00 nop 448/ 220 : 00 nop 449/ 221 : 0A in a,P2 ;after 10us sample 450/ 222 : BF 0A mov R7,#10 ;and keep 54(64-10)us 451/ 224 : EF 24 djnz R7,$ 452/ 226 : 53 80 anl a,#_OWon 453/ 228 : 83 ret ;Acc = 1-Wire Status 454/ 229 : 455/ 229 : ; 1 wire bus write bit 1 456/ 229 : ; broken R7 457/ 229 : OWset1: 458/ 229 : 9A 7F anl P2,#_OWoff 459/ 22B : 00 nop 460/ 22C : 8A 80 orl P2,#_OWon ;7.5us Low 461/ 22E : BF 0C mov R7,#12 ;65us High 462/ 230 : EF 30 djnz R7,$ 463/ 232 : 83 ret 464/ 233 : 465/ 233 : ; 1 wire bus write bit 0 466/ 233 : ; broken R7 467/ 233 : OWset0: 468/ 233 : 9A 7F anl P2,#_OWoff 469/ 235 : BF 0B mov R7,#11 ;60us Low 470/ 237 : EF 37 djnz R7,$ 471/ 239 : 8A 80 orl P2,#_OWon ;10us High 472/ 23B : 00 nop 473/ 23C : 00 nop 474/ 23D : 00 nop 475/ 23E : 00 nop 476/ 23F : 83 ret 477/ 240 : 478/ 240 : ; 1 wire byte put 479/ 240 : ; in A 480/ 240 : ; broken R6,R7 481/ 240 : OWput: 482/ 240 : BE 08 mov R6,#8 ;loop counter 483/ 242 : 67 $$loop rrc a 484/ 243 : F6 49 jc $$high 485/ 245 : 54 33 call OWset0 486/ 247 : 44 4D jmp $$skip 487/ 249 : 54 29 $$high call OWset1 488/ 24B : 44 4D jmp $$skip 489/ 24D : EE 42 $$skip djnz R6,$$loop 490/ 24F : 83 ret 491/ 250 : 492/ 250 : ; 1 wire byte get 493/ 250 : ; broken A,R5,R6,R7 494/ 250 : ; return A(=R5) 495/ 250 : OWget: 496/ 250 : BE 08 mov R6,#8 ;loop counter 497/ 252 : 54 1A $$loop call OWfetch 498/ 254 : 97 clr c 499/ 255 : C6 58 jz $$zero 500/ 257 : A7 cpl c ;zero:CY=0, non zero:CY=1 501/ 258 : FD $$zero mov a,R5 502/ 259 : 67 rrc a 503/ 25A : AD mov R5,a ;save to R5 504/ 25B : EE 52 djnz R6,$$loop 505/ 25D : 83 ret 506/ 25E : 507/ 25E : ; get TEMP from OW device 508/ 25E : ; R0 = 3 Byte Internal RAM Address 509/ 25E : ; broken A,R0,R5,R6,R7 510/ 25E : ; return R0:Data Top Address R2:High-data R3:Low-data R7:status 511/ 25E : getTemp: 512/ 25E : ;1-wire get 513/ 25E : B8 20 mov R0,#TEMPDT 514/ 260 : 54 00 call OWreset 515/ 262 : 23 CC mov a,#0cch ;DS1822 ROM Skip 516/ 264 : 54 40 call OWput 517/ 266 : 23 44 mov a,#44h ;DS1822 Start Convert 518/ 268 : 54 40 call OWput 519/ 26A : 34 5C call delay 520/ 26C : 54 00 call OWreset 521/ 26E : 23 CC mov a,#0cch ;DS1822 ROM Skip 522/ 270 : 54 40 call OWput 523/ 272 : 23 BE mov a,#0beh ;DS1822 Send Data 524/ 274 : 54 40 call OWput 525/ 276 : 54 50 call OWget ;#0 526/ 278 : A0 mov @R0,a 527/ 279 : 18 inc R0 528/ 27A : 54 50 call OWget ;#1 529/ 27C : A0 mov @R0,a 530/ 27D : 18 inc R0 531/ 27E : 54 50 call OWget ;#2 532/ 280 : 54 50 call OWget ;#3 533/ 282 : 54 50 call OWget ;#4 534/ 284 : A0 mov @R0,a 535/ 285 : 54 50 call OWget ;#5 536/ 287 : 54 50 call OWget ;#6 537/ 289 : 54 50 call OWget ;#7 538/ 28B : 54 50 call OWget ;#8 539/ 28D : F0 mov a,@R0 ;get Status 540/ 28E : AF mov R7,a 541/ 28F : C8 dec R0 542/ 290 : F0 mov a,@R0 ;get High Byte (S S S S : S b6 b5 b4) 543/ 291 : AB mov R3,a 544/ 292 : C8 dec R0 545/ 293 : F0 mov a,@R0 ;get Lower Byte (b3 b2 b1 b0 : b-1 b-2 b-3 b-4) 546/ 294 : AA mov R2,a 547/ 295 : 83 ret 548/ 296 : 549/ 296 : align 256 550/ 300 : include mathlib.asm (1) 1/ 300 : cpu 8048 (1) 2/ 300 : (1) 3/ 300 : ; 8bit subtraction (1) 4/ 300 : ; Acc = Acc - R7; C=1 if borrow (1) 5/ 300 : sub8u: (1) 6/ 300 : 37 cpl a (1) 7/ 301 : 6F add a,R7 (1) 8/ 302 : 37 cpl a (1) 9/ 303 : 83 ret (1) 10/ 304 : (1) 11/ 304 : ; a = |a| (1) 12/ 304 : ; broken R7 (1) 13/ 304 : ; if a < 0; CY=1 (1) 14/ 304 : abs8: (1) 15/ 304 : 97 clr c (1) 16/ 305 : AF mov R7,a (1) 17/ 306 : 53 80 anl a,#80h (1) 18/ 308 : C6 0E jz $$ret (1) 19/ 30A : FF mov a,R7 (1) 20/ 30B : 37 cpl a (1) 21/ 30C : 17 inc a (1) 22/ 30D : A7 cpl c (1) 23/ 30E : 83 $$ret ret (1) 24/ 30F : (1) 25/ 30F : ; abs R3:R2=(Sbbb:bbbb bbbb:bbbb) (1) 26/ 30F : ; R3:R2 = |R3:R2| (1) 27/ 30F : ; if R3:R2 < 0; CY=1 (1) 28/ 30F : ; notice -32768(8000H) --> 0 (1) 29/ 30F : ; broken Acc (1) 30/ 30F : 97 abs16: clr c (1) 31/ 310 : FB mov a,R3 (1) 32/ 311 : 53 80 anl a,#80h (1) 33/ 313 : C6 26 jz $$ret (1) 34/ 315 : FA mov a,R2 (1) 35/ 316 : 37 cpl a (1) 36/ 317 : 03 01 add a,#1 (1) 37/ 319 : AA mov R2,a (1) 38/ 31A : FB mov a,R3 (1) 39/ 31B : 37 cpl a (1) 40/ 31C : 13 00 addc a,#0 (1) 41/ 31E : AB mov R3,a (1) 42/ 31F : A7 cpl c (1) 43/ 320 : 53 80 anl a,#80h ;if 8000H; change to 0 (1) 44/ 322 : C6 26 jz $$ret (1) 45/ 324 : 27 clr a (1) 46/ 325 : AB mov R3,a (1) 47/ 326 : 83 $$ret ret (1) 48/ 327 : (1) 49/ 327 : ; 16bit incremental (1) 50/ 327 : ; (R3:R2) = (R3:R2) + 1; C=1 if over flow (1) 51/ 327 : ; broken Acc (1) 52/ 327 : inc16: (1) 53/ 327 : 23 01 mov a,#1 (1) 54/ 329 : 6A add a,R2 (1) 55/ 32A : AA mov R2,a (1) 56/ 32B : 27 clr a (1) 57/ 32C : 7B addc a,R3 (1) 58/ 32D : AB mov R3,a (1) 59/ 32E : 83 ret (1) 60/ 32F : (1) 61/ 32F : ; 16bit decrement (1) 62/ 32F : ; (R3:R2) = (R3:R2) - 1; C=1 if borrow (1) 63/ 32F : ; broken Acc (1) 64/ 32F : dec16: (1) 65/ 32F : FA mov a,R2 (1) 66/ 330 : 37 cpl a (1) 67/ 331 : 03 01 add a,#1 (1) 68/ 333 : 37 cpl a (1) 69/ 334 : AA mov R2,a (1) 70/ 335 : FB mov a,R3 (1) 71/ 336 : 37 cpl a (1) 72/ 337 : 13 00 addc a,#0 (1) 73/ 339 : 37 cpl a (1) 74/ 33A : AB mov R3,a (1) 75/ 33B : 83 ret (1) 76/ 33C : (1) 77/ 33C : (1) 78/ 33C : ; 16bit unsigned addition (1) 79/ 33C : ; (R3:R2) = (R3:R2) + (R5:R4) (1) 80/ 33C : ; C=1 Over flow (1) 81/ 33C : ; broken Acc (1) 82/ 33C : add16u: (1) 83/ 33C : FA mov a,R2 (1) 84/ 33D : 6C add a,R4 (1) 85/ 33E : AA mov R2,a (1) 86/ 33F : FB mov a,R3 (1) 87/ 340 : 7D addc a,R5 (1) 88/ 341 : AB mov R3,a (1) 89/ 342 : 83 ret (1) 90/ 343 : (1) 91/ 343 : ; 16bit unsigned subtraction (1) 92/ 343 : ; (R3:R2) = (R3:R2)-(R5:R4) (1) 93/ 343 : ; (R3:R2) < (R5:R4); C=1 (1) 94/ 343 : ; (R3:R2) = (R5:R4); Acc=zero (1) 95/ 343 : ; broken Acc (1) 96/ 343 : sub16u: (1) 97/ 343 : FA mov a,R2 (1) 98/ 344 : 37 cpl a (1) 99/ 345 : 6C add a,R4 (1) 100/ 346 : 37 cpl a (1) 101/ 347 : AA mov R2,a (1) 102/ 348 : FB mov a,R3 (1) 103/ 349 : 37 cpl a (1) 104/ 34A : 7D addc a,R5 (1) 105/ 34B : 37 cpl a (1) 106/ 34C : AB mov R3,a (1) 107/ 34D : 4A orl a,R2 (1) 108/ 34E : 83 ret (1) 109/ 34F : (1) 110/ 34F : ; 符号付き演算のオーバーフローは (1) 111/ 34F : ; 以下の場合に発生したと定義される (1) 112/ 34F : ; (1) 113/ 34F : ; 足し算の場合 (1) 114/ 34F : ; 正 + 正 = 負 (1) 115/ 34F : ; 負 + 負 = 正 (1) 116/ 34F : ; (1) 117/ 34F : ; 引き算の場合 (1) 118/ 34F : ; 正 - 負 = 負 (1) 119/ 34F : ; 負 - 正 = 正 (1) 120/ 34F : ; (1) 121/ 34F : ; 16bit signed subtraction (1) 122/ 34F : ; (R3:R2) = (R3:R2)-(R5:R4) (1) 123/ 34F : ; (R3:R2) < (R5:R4); C=1 (1) 124/ 34F : ; (R3:R2) = (R5:R4); Acc=zero (1) 125/ 34F : ; broken Acc,R7 (1) 126/ 34F : sub16: (1) 127/ 34F : FB mov a,R3 (1) 128/ 350 : AF mov R7,a (1) 129/ 351 : 74 43 call sub16u (1) 130/ 353 : ; check over flow. (1) 131/ 353 : FF mov a,R7 (1) 132/ 354 : DD xrl a,R5 (1) 133/ 355 : 53 80 anl a,#80h (1) 134/ 357 : C6 61 jz $$ret ;sign equal (1) 135/ 359 : 97 clr c (1) 136/ 35A : FF mov a,R7 (1) 137/ 35B : DB xrl a,R3 (1) 138/ 35C : 53 80 anl a,#80h (1) 139/ 35E : C6 61 jz $$ret (1) 140/ 360 : A7 cpl c (1) 141/ 361 : $$ret ; check zero (1) 142/ 361 : FB mov a,R3 (1) 143/ 362 : 4A orl a,R2 (1) 144/ 363 : 83 ret (1) 145/ 364 : (1) 146/ 364 : ; 符号付きの比較はオフセット 8000H を両者に (1) 147/ 364 : ; 足すことでその差は求められる (1) 148/ 364 : ; 8000Hを足すという事は上位ビットを反転させると同意 (1) 149/ 364 : (1) 150/ 364 : ; 16bit signed compare (1) 151/ 364 : ; (R3:R2) < (R5:R4); C=1 (1) 152/ 364 : ; (R3:R2) = (R5:R4); Acc=zero (1) 153/ 364 : ; broken Acc,R6,R7 (1) 154/ 364 : cmp16: (1) 155/ 364 : FA mov a,R2 (1) 156/ 365 : 37 cpl a (1) 157/ 366 : 6C add a,R4 (1) 158/ 367 : 37 cpl a (1) 159/ 368 : AE mov R6,a (1) 160/ 369 : FD mov a,R5 (1) 161/ 36A : D3 80 xrl a,#80h (1) 162/ 36C : AF mov R7,a (1) 163/ 36D : FB mov a,R3 (1) 164/ 36E : D3 80 xrl a,#80h (1) 165/ 370 : 37 cpl a (1) 166/ 371 : 7F addc a,R7 (1) 167/ 372 : 37 cpl a (1) 168/ 373 : 4E orl a,R6 (1) 169/ 374 : 83 ret (1) 170/ 375 : (1) 171/ 375 : 551/ 375 : 552/ 375 : AS V1.42 Beta [Bld 32] - source file ledtemp.asm - page 2 - 6/19/2006 20:52:51 symbol table (* = unused): ------------------------ A2BCD : 130 C | ABS16 : 30F C | *ABS8 : 304 C | *ADD16U : 33C C | *ARCHITECTURE : i386-unknown-freebsd - | *BIGENDIAN : 0 - | *BRANCHEXT : 0 - | *CASESENSITIVE : 0 - | CHK114 : 57 C | *CHK214 : 3A C | CHKDELTA : 6B C | CMP16 : 364 C | COLD114 : 68 C | COLD214 : 4F C | *CONSTPI : 3.141592653589793 - | *DATE : 6/19/2006 - | *DEC16 : 32F C | DELAY : 15C C | DELAY28 : 18A C | DELTA1 : 1 - | DELTA2 : F - | DIAG : 6 C | DISPLAY : 90 C | DOTDISP : 118 C | DOTPTN : 120 C | DSIGN : 25 C | *FALSE : 0 - | *FULLPMMU : 1 - | GETPTN : 147 C | GETTEMP : 25E C | *HAS64 : 1 - | *HASDSP : 0 - | *HASFPU : 0 - | *HASPMMU : 0 - | HDELAY : 169 C | HIGH37 : 249 C | *HOT114 : 64 C | *HOT214 : 47 C | *INC16 : 327 C | *INEXTMODE : 0 - | *INLWORDMODE : 0 - | *INMAXMODE : 0 - | *INSRCMODE : 0 - | *INSUPMODE : 0 - | L1021 : 13D C | L124 : 15E C | L125 : 16B C | L224 : 160 C | L225 : 16D C | LASTDT : 23 C | LEDPTN : 14C C | *LISTON : 1 - | LOOP113 : 1B C | LOOP12 : 2 C | LOOP17 : 106 C | LOOP213 : 25 C | LOOP28 : 178 C | LOOP313 : 2F C | LOOP37 : 242 C | LOOP38 : 252 C | M10 : A0 - | M100 : 640 - | *MACEXP : 1 - | MAIN : 36 C | *MINUS16 : 95 C | *MOMCPU : 8048 - | *MOMCPUNAME : 8048 - | MOVER16 : B9 C | *NESTMAX : 100 - | OWFETCH : 21A C | OWGET : 250 C | OWPUT : 240 C | OWRESET : 200 C | OWSET0 : 233 C | OWSET1 : 229 C | *PACKING : 0 - | *PADDING : 1 - | PLUS16 : C5 C | POVER16 : E7 C | RAMTOP : 20 - | *RELAXED : 0 - | RET14 : 6A C | RET43 : 30E C | RET44 : 326 C | RET49 : 361 C | ROMTOP : 0 - | SAVELAST : 100 C | SHIFT18 : 10F C | SHIFTR32 : 10D C | SIGN15 : 82 C | SKIP37 : 24D C | SUB16 : 34F C | SUB16U : 343 C | *SUB8U : 300 C | TEMPDT : 20 C | *TIME : 20:52:51 - | TONE : 176 C | TONE28 : 17A C | TONE29 : 195 C | TONE30 : 1A6 C | TONEHL : 1A4 C | *TONELH : 193 C | *TRUE : 1 - | *VERSION : 142F - | ZERO16 : E4 C | ZERO38 : 258 C | _10021 : 132 C | _1021 : 139 C | _121 : 144 C | _BUS7OFF : 7F - | _BUS7ON : 80 - | _OWOFF : 7F - | _OWON : 80 - | *_ROMTOP : 0 C | 114 symbols 39 unused symbols AS V1.42 Beta [Bld 32] - source file ledtemp.asm - page 3 - 6/19/2006 20:52:51 codepages: ---------- STANDARD (0 changed characters) 0.24 seconds assembly time 723 lines source file 2 passes 0 errors 0 warnings