di2884l1.txt ;******************************************************************************************* ; ; LISTING 1 - ROUTINE FOR PHOTOTIMER-LOAD CONTROLLER ; ; "Simple phototimer controls load," EDN, April 18, 2002, pg 93 ; ;******************************************************************************************* 1 0000 2 $list 0000 3 $PAGEWIDTH 160 07F1 4 org MOR; resistor osc and input pulldown 07F1 20 5 fcb %00100000; 6 ****** I/O PORT BITS ***************************** 07F2 7 LED equ pA0 07F2 8 g equ pA1 07F2 9 f equ pA2 07F2 10 e equ pA3 07F2 11 d equ pA4 07F2 12 c equ pA5 07F2 13 b equ pA6 07F2 14 a equ pA7 07F2 15 Photo equ pB2 07F2 16 Load equ pB3 17 ********** VARIABLES ***************************** 00C0 18 org RAM 00C0 19 Treg rmb 1 ;Time register 00C1 20 Tcnt rmb 1 ;Time counter 00C2 21 cnt1h rmb 1 ;counter for 1 hour 00C3 22 cnt30s rmb 1 ;counter for 30 sec 00C4 23 cnt1s rmb 1 ;counter for 1 sec 24 ****** 7-segment CODE TABLE address ************* 00C5 25 adr7s equ ROMend+1-$0b ;for 11 constants 26 ****** INITIALIZATION *********************** 0300 27 org ROM 0300 [02] A6FF 28 init lda #$ff ;set prtA as output 0302 [04] B704 29 sta ddrA 0304 [05] 3F00 30 clr prtA ; 0306 [05] 1605 31 bset 3,ddrB ;set pB3 as output 0308 [05] 1701 32 bclr Load,prtB ;set Load off 030A [05] 3FC0 33 clr Treg ;clear 030C [05] 3FC1 34 clr Tcnt ; all 030E [05] 3FC2 35 clr cnt1h ; registers 0310 [05] 3FC3 36 clr cnt30s ; used 0312 [05] 3FC4 37 clr cnt1s 0314 [02] 9A 38 cli ;Interrupt enable PhotoTimer.asm Assembled with CASMW 01/04/2002 11:24:29 AM PAGE 2 0315 [03] BEC0 39 main ldx Treg ;Treg --> X 0317 [06] CD0363 40 jsr display ;Time --> display 031A [06] CD03A8 41 jsr dly30s ;delay 30 sec 031D [04] 3DC0 42 mode tst Treg ; Treg = 0? 031F [03] 274D 43 beq manual 0321 [05] 1100 44 bclr LED,prtA ;LED off 0323 [05] 1701 45 bclr Load,prtB ;Load off 0325 [05] 050130 46 Auto brclr photo,prtB,blink;is it a day? 0328 [05] 1100 47 bclr LED,prtA ;LED off 032A [06] CD03A8 48 jsr dly30s ;delay for 30 sec 032D [05] 050128 49 brclr photo,prtB,blink;is it a day? 0330 [05] 1601 50 bset Load,prtB ;Load on 0332 [05] 1000 51 bset LED,prtA ;LED on 0334 [03] B6C0 52 lda Treg ;Treg --> Tcnt 0336 [04] B7C1 53 sta Tcnt 0338 [06] CD03B4 54 work jsr dly1h ;delay for 1 hour 033B [05] 3AC1 55 dec Tcnt ;decrement Tcnt 033D [03] 2707 56 beq TimeEnd ;time is expired 033F [03] BEC1 57 ldx Tcnt ;Tcnt --> X 0341 [06] CD0363 58 jsr display ;new Time --> display 0344 [03] 20F2 59 bra work 0346 [05] 1701 60 timeEnd bclr Load,prtB ;Load off 0348 [02] AE0A 61 ldx #$a ;"E" --> display 034A [06] CD0363 62 jsr display 034D [05] 0401FD 63 night brset photo,prtB,night;wait for a dawn 0350 [06] CD03B4 64 jsr dly1h ;delay for 1 hour 0353 [05] 0401F7 65 brset photo,prtB,night;wait for a dawn 0356 [03] 20BD 66 bra main 67 ************************************************* 0358 [06] CD039C 68 blink jsr dly1s ;delay 1 sec 035B [03] B600 69 lda prtA 035D [02] A801 70 eor #%00000001 035F [04] B700 71 sta prtA 0361 [03] 20C2 72 bra Auto 73 ************************************************* 0363 [05] D607C5 74 display lda adr7S,x ;code,x --> Acc 0366 [04] B700 75 sta prtA ;Acc --> prtA 0368 [05] 070102 76 brclr Load,prtB,disEnd ;is Load off? 036B [05] 1000 77 bset LED,prtA ;LED on 036D [06] 81 78 disEnd rts ;return from display 79 ************************************************* 036E [05] 1000 80 manual bset LED,prtA ;LED on 0370 [05] 1601 81 bset Load,prtB ;Load on 0372 [03] 20A9 82 bra mode PhotoTimer.asm Assembled with CASMW 01/04/2002 11:24:29 AM PAGE 3 0374 [06] CD0392 83 ExtInt jsr dly01s ;debouncing delay 100 ms 0377 [03] 2F12 84 bih m3 ;if IRQ=1,end of Interrupt 0379 [03] BEC0 85 m0 ldx Treg ;Treg -->X 037B [02] A309 86 cpx #9 ;Treg > 9? 037D [03] 240F 87 bhs m1 037F [05] 3CC0 88 inc Treg ;Treg + 1 0381 [03] BEC0 89 m2 ldx Treg ;Treg --> X 0383 [06] CD0363 90 jsr display ;Treg --> display 0386 [06] CD039C 91 jsr dly1s ;delay 1 sec 0389 [03] 2EEE 92 bil m0 ;is IRQ-pin still low ? 038B [05] 120A 93 m3 bset IRQR,ISCR ;IRQ reset 038D [09] 80 94 rti ;return from ExtInt 038E [05] 3FC0 95 m1 clr Treg ;0 --> Treg 0390 [03] 20EF 96 bra m2 PhotoTimer.asm Assembled with CASMW 01/04/2002 11:24:29 AM PAGE 4 0392 [02] A680 97 dly01s lda #128T ;100 ms delay 0394 [03] 5F 98 lp1 clrx 0395 [03] 5A 99 lp2 decx 0396 [03] 26FD 100 bne lp2 0398 [03] 4A 101 deca 0399 [03] 26F9 102 bne lp1 039B [06] 81 103 rts 104 ************************************** 039C [02] A60A 105 dly1s lda #10T ;0,1s x10=1sec delay 039E [04] B7C4 106 sta cnt1s 03A0 [06] CD0392 107 d1s jsr dly01s 03A3 [05] 3AC4 108 dec cnt1s 03A5 [03] 26F9 109 bne d1s 03A7 [06] 81 110 rts 111 ************************************** 03A8 [02] A61E 112 dly30s lda #30T ;1s x30=30sec delay 03AA [04] B7C3 113 sta cnt30s 03AC [06] CD039C 114 d30s jsr dly1s 03AF [05] 3AC3 115 dec cnt30s 03B1 [03] 26F9 116 bne d30s 03B3 [06] 81 117 rts 118 ************************************** 03B4 [02] A678 119 dly1h lda #120T ;30s x120=1 hour 03B6 [04] B7C2 120 sta cnt1h 03B8 [06] CD03A8 121 d1h jsr dly30s 03BB [05] 3AC2 122 dec cnt1h 03BD [03] 26F9 123 bne d1h 03BF [06] 81 124 rts 125 *************************************** 07C5 126 org adr7s 07C5 9C60DAF2 127 fcb $9c,$60,$da,$f2,$66 66 07CA B63EE0FE 128 fcb $b6,$3e,$e0,$fe,$e6,$9e E69E 129 *************************************** 07FA 130 org VECTORS+2 07FA 0374 131 fdb ExtInt 07FE 132 org VECTORS+6 07FE 0300 133 fdb init