di3547l1.txt ;****************************************************************************************** ; ; LISTING 1 - SET PROGRAMMABLE CLOCK ; ; "Use a PC's parallel port to program a clock source," EDN, December 7, 2004, pg 102 ; ;****************************************************************************************** unit$ = "Hz" unit = 1 top: CLS PRINT "enter frequency units<"; unit$; ">"; IF unit$ = "Hz" THEN PRINT "khz,default"; ELSE PRINT "hz,default"; END IF INPUT A$ IF A$ = "khz" THEN unit$ = "KHz": unit = 1000 IF A$ = "hz" THEN unit$ = "Hz": unit = 1 PRINT "enter frequency "; unit$; INPUT f$ IF f$ = "" THEN END c1 = VAL(f$) * unit FOR I = 0 TO 15 a3 = (2078 * 2 ^ I) / unit IF (a3 / (2 - 1023 / 1024)) > c1 / unit THEN b1 = I: I = 16 END IF NEXT I a5 = 1024 * (2 - ((2 ^ b1) * 2078) / c1) DAT& = b1 * 4096 + 4 * INT(a5 + .5) + 2 PRINT "coeff(dec)="; b1, INT(a5 + .5) PRINT HEX$(b1 * 4096), HEX$(4 * INT(a5 + .5)) PRINT DAT&, HEX$(DAT&), "FREQ= "; (2 ^ b1) * (2078 / (2 - ((INT(a5 + .5) / 1024)))) P = &H378: N = 15 rep: OUT P, &H1C ' set enb GOSUB serdrv OUT P, &H1C ' set enb INPUT "eXit or continue"; A$ IF A$ = "X" OR A$ = "x" THEN END IF A$ = "C" THEN GOTO top ELSE GOTO rep END IF ' serdrv: 'dat has data to send, c has number of bits to send FOR I = N TO 0 STEP -1 ' send passed data, n number of times OUT P, &H18 ' clear enb GOSUB DELAY IF (DAT& AND (2 ^ I)) <> 0 THEN OUT P, &H19 GOSUB DELAY OUT P, &H1B ' set dat PRINT "1"; GOSUB DELAY OUT P, &H19 ' clear clk ELSE GOSUB DELAY OUT P, &H1A ' set clk PRINT "0"; END IF GOSUB DELAY OUT P, &H18 ' clear dat(clk) NEXT I PRINT RETURN DELAY: FOR j = 1 TO 100: NEXT j RETURN