di2747l1.txt ;*********************************************************************************************** ; LISTING 1 - MEMORY-BASED MINIMUM/MAXIMUM DETERMINATION ; ; "Microcontroller selects minimum/maximum value," EDN, Sept 20, 2001, pg 100 ; ************************************************************************************************** 1 ********* MIN VALUE SELECTION VAR 1 ************** 2 *nolist 0000 3 $include "std-j1a.asm" 4 *list 5 ****************************************** 0000 6 tabl equ ROMend-$07 ;for demo only ! 07C8 7 org tabl ;table of Data 07C8 03040502 8 fcb 3,4,5,2,8,14T,9,25T 080E0919 9 ****************************************** 00C0 10 org RAM 00C0 11 DATA rmb 8 00C8 12 DATAmin rmb 1 0300 13 org ROM 0300 [05] 3FC8 14 start clr DATAmin 0302 [03] 5F 15 clrx 16 ******************************************** 0303 [05] D607C8 17 m0 lda tabl,x ;put the set of data from 0306 [05] E7C0 18 sta DATA,x ;table to registers. This 0308 [03] 5C 19 incx ;part of program only for 0309 [02] A308 20 cpx #8 ;the idea demonstration. 030B [03] 26F6 21 bne m0 22 ******************************************** 030D [02] AE07 23 ldx #7 ;N-1 into X-register 030F [04] E6C0 24 lda DATA,x ;data8 into Acc. 0311 [04] B7C8 25 sta DATAmin;store data8 in DATAmin 0313 [03] 5A 26 mn0 decx ;go to the next data,x 0314 [04] E1C0 27 cmp DATA,x ;if DATAmin < DATA,x 0316 [03] 2504 28 blo mn1 ; then go to mn1 0318 [04] E6C0 29 lda DATA,x ;otherwise replace DATAmin 031A [04] B7C8 30 sta DATAmin; with new data value 031C [03] 5D 31 mn1 tstx ;if there are more data to be tested, 031D [03] 26F4 32 bne mn0 ; then repeat from mn0 031F [02] 8E 33 stop ;end of the program 34 ********************************************* 07FE 35 org VECTORS+6 07FE 0300 36 fdb start