;----------------------------------------------------------- ; ; Cyber Kendang : October 2006 ; ;----------------------------------------------------------- ;##### Port Defines ##### p1ddr .equ h'0fffc0 p1dr .equ h'0fffc2 p2ddr .equ h'0fffc1 p2dr .equ h'0fffc3 p3ddr .equ h'0fffc4 p3dr .equ h'0fffc6 p4ddr .equ h'0fffc5 p4dr .equ h'0fffc7 paddr .equ h'0fffd1 padr .equ h'0fffd3 pbddr .equ h'0fffd4 pbdr .equ h'0fffd6 addrah .equ h'0fffe0 adcsr .equ h'0fffe8 adcr .equ h'0fffe9 ;##### Vector Defines ##### .section vector,data,locate=h'000000 .data.l start ;##### Work RAM Data Defines ##### .section ram,data,locate=h'0fef10 timer1 .res.w 1 timer2 .res.w 1 led .res.b 1 flag .res.b 1 ad_data .res.b 1 peak .res.b 1 half .res.b 1 halfctr .res.b 1 ;***** Constant Table Defines ***** .section rom,data,locate=h'001000 table: .data.b 255,255,255,255,255,255,255,255 ; (8) .data.b 255,255,255,255,255,255,255,255 ; (8) .data.b 255,255,255,255,255,255,255,255 ; (8) .data.b 255 ; (1) 25 .data.b 127,127 ; (2) .data.b 63,63,63 ; (3) .data.b 31,31,31,31 ; (4) .data.b 15,15,15,15,15 ; (5) .data.b 7,7,7,7,7,7 ; (6) .data.b 3,3,3,3,3,3,3 ; (7) .data.b 1,1,1,1,1,1,1,1 ; (8) 35 .data.b 0,0,0,0,0,0,0,0 ; (8) 68 .data.b 0,0,0,0,0,0,0,0,0,0 ; (10) .data.b 0,0,0,0,0,0,0,0,0,0 ; (10) .data.b 0,0,0,0,0,0,0,0,0,0 ; (10) .data.b 0,0,0,0,0,0,0,0,0,0 ; (10) .data.b 0,0,0,0,0,0,0,0,0,0 ; (10) .data.b 0,0,0,0,0,0,0,0,0,0 ; (10) pat_table: .data.b h'90,h'38,h'7c,h'fe ; 0- .data.b h'7c,h'38,h'10,h'1e ; 4- .data.b h'3c,h'78,h'f0,h'f0 ; 8- .data.b h'78,h'3c,h'1e,h'0e ; 12- .data.b h'86,h'c0,h'e0,h'f0 ; 16- .data.b h'78,h'3c,h'1e,h'0e ; 20 .data.b h'06,h'04,h'fe,h'fc ; 24- .data.b h'f8,h'f0,h'e0,h'c0 ; 28- .data.b h'90,h'38,h'7c,h'fe ; 0- .data.b h'7c,h'38,h'10,h'1e ; 4- .data.b h'3c,h'78,h'f0,h'f0 ; 8- .data.b h'78,h'3c,h'1e,h'0e ; 12- .data.b h'86,h'c0,h'e0,h'f0 ; 16- .data.b h'78,h'3c,h'1e,h'0e ; 20 .data.b h'06,h'04,h'fe,h'fc ; 24- .data.b h'f8,h'f0,h'e0,h'c0 ; 28- .data.b h'90,h'38,h'7c,h'fe ; 0- .data.b h'7c,h'38,h'10,h'1e ; 4- .data.b h'3c,h'78,h'f0,h'f0 ; 8- .data.b h'78,h'3c,h'1e,h'0e ; 12- .data.b h'86,h'c0,h'e0,h'f0 ; 16- .data.b h'78,h'3c,h'1e,h'0e ; 20 .data.b h'06,h'04,h'fe,h'fc ; 24- .data.b h'f8,h'f0,h'e0,h'c0 ; 28- ;***** Reset --> Initialize --> Main Loop ***** .section program,code,locate=h'002000 start: mov.l #h'0fff0f,er7 ; stack pointer set mov.l #h'0fef10,er2 mov.w #h'0fe0,r1 mov.b #0,r0l _ram_clear: mov.b r0l,@er2 inc.l #1,er2 dec.w #1,r1 bne _ram_clear mov.b #b'00000000,r0l mov.b r0l,@adcsr ; A/D setting bclr.b #7,@adcr ; TRGE = 0 mov.b #b'11111111,r0l mov.b r0l,@p1ddr ; set : Port[1] = output mov.b r0l,@p2ddr ; set : Port[2] = output mov.b r0l,@p3ddr ; set : Port[3] = output mov.b r0l,@p4ddr ; set : Port[4] = output mov.b r0l,@paddr ; set : Port[A] = output mov.b r0l,@pbddr ; set : Port[B] = output mov.b r0l,@p1dr ; LP = High mov.b r0l,@p2dr ; LP = High mov.b r0l,@p3dr ; LP = High mov.b r0l,@p4dr ; LP = High mov.b r0l,@padr ; LP = High mov.b #b'00000000,r0l mov.b r0l,@led jsr @write_all jsr @wait_500msec bset.b #5,@adcsr ; A/D start ! loop: jsr @ad_check jsr @led_check jsr @half_display jmp @loop ;***** Timer / Counter Routines ***** wait_500msec: mov.l #500,er1 _wait_1: jsr @wait_1msec sub.l #1,er1 bne _wait_1 rts wait_1msec: mov.l #2048,er2 _wait_2: sub.l #1,er2 bne _wait_2 rts write_all: mov.b @led,r0l mov.b r0l,@pbdr mov.b #b'00000000,r0l mov.b r0l,@p1dr mov.b r0l,@p2dr mov.b r0l,@p3dr mov.b r0l,@p4dr mov.b r0l,@padr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p2dr mov.b r0l,@p3dr mov.b r0l,@p4dr mov.b r0l,@padr rts led_check: mov.w @timer2,r0 inc.w #1,r0 mov.w r0,@timer2 cmp.w #1000,r0 beq led_event rts led_event: mov.w #0,r0 mov.w r0,@timer2 mov.w @timer1,r0 inc.w #1,r0 mov.w r0,@timer1 cmp.w #100,r0 beq t1sec rts t1sec: mov.w #0,r0 mov.w r0,@timer1 mov.b @led,r0l inc.b r0l and.b #b'00111111,r0l mov.b r0l,@led rts ;***** A/D Check Routine ***** ad_check: btst.b #7,@adcsr ; A/D conv end ? bne _ad_go rts _ad_go: mov.b @addrah,r3h bclr.b #7,@adcsr ; ADF clear bset.b #5,@adcsr ; A/D start ! shlr.b r3h ; R3H = now mov.b r3h,r0l mov.b #0,r0h mov.w #0,e0 mov.l #table,er1 add.l er0,er1 mov.b @er1,r3h ; --> (table) --> r3h mov.b @ad_data,r2h ; R2H = old cmp.b r2h,r3h ; r3h-r2h bne _ad_ok rts _ad_ok: mov.b r3h,@ad_data ; now -> old mov.b r3h,@pbdr mov.b #b'00001111,r0l mov.b r0l,@padr mov.b #b'11111111,r0l mov.b r0l,@padr mov.b r3h,r2h and.b #b'11000000,r2h cmp.b #b'11000000,r2h beq _peak mov.b #0,r0l bra _peak_mix _peak: mov.b #1,r0l _peak_mix: mov.b r0l,@peak ; 127 or 255 cmp.b #0,r3h beq _ad_00 cmp.b #255,r3h beq _ad_ff cmp.b #1,r3h beq _ad_80 cmp.b #3,r3h beq _ad_c0 cmp.b #7,r3h beq _ad_e0 cmp.b #15,r3h beq _ad_f0 cmp.b #31,r3h beq _ad_f8 cmp.b #63,r3h beq _ad_fc cmp.b #127,r3h beq _ad_fe _ad_00: mov.b #1,r4l mov.b #0,r3h bra _ad_mix _ad_ff: mov.b #120,r4l mov.b #255,r3h bra _ad_mix _ad_80: mov.b #2,r4l mov.b #h'80,r3h bra _ad_mix _ad_c0: mov.b #4,r4l mov.b #h'c0,r3h bra _ad_mix _ad_e0: mov.b #8,r4l mov.b #h'e0,r3h bra _ad_mix _ad_f0: mov.b #15,r4l mov.b #h'f0,r3h bra _ad_mix _ad_f8: mov.b #30,r4l mov.b #h'f8,r3h bra _ad_mix _ad_fc: mov.b #60,r4l mov.b #h'fc,r3h bra _ad_mix _ad_fe: mov.b #90,r4l mov.b #h'fe,r3h _ad_mix: mov.b r4l,@half mov.b r3h,@pbdr mov.b #b'11110000,r0l mov.b r0l,@padr mov.b #b'11111111,r0l mov.b r0l,@padr rts half_display: mov.b @halfctr,r0l inc.b r0l and.b #b'01111111,r0l mov.b r0l,@halfctr cmp.b #0,r0l bne _half_01 jsr @write_white rts _half_01: mov.b @half,r1h cmp.b r0l,r1h beq _half_02 rts _half_02: jsr @clear_white rts clear_white: mov.b #0,r0l mov.b r0l,@pbdr mov.b #b'00000000,r0l mov.b r0l,@p1dr mov.b r0l,@p2dr mov.b r0l,@p3dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p2dr mov.b r0l,@p3dr mov.b r0l,@p4dr rts write_white: mov.b @peak,r2h mov.b @led,r0l mov.b #0,r0h mov.w #0,e0 mov.l #pat_table,er1 add.l er0,er1 mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11111110,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11111101,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11111011,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11110111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11101111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11011111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'10111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'01111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr mov.b #b'11111111,r0l mov.b r0l,@p1dr mov.b r0l,@p3dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11111110,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11111101,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11111011,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11110111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11101111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'11011111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'10111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr inc.b r1l mov.b @er1,r3h ; --> (table) --> r3h or.b r2h,r3h mov.b r3h,@pbdr mov.b #b'01111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr mov.b #b'11111111,r0l mov.b r0l,@p2dr mov.b r0l,@p4dr rts .end