;*********************************************************************** ; LISTING 1 -- uC ASSEMBLY CODE FOR FREQUENCY GENERATOR ; ; "uC forms FM oscillator," EDN, October 28, 1999, pg 158. ; http://www.ednmag.com/ednmag/reg/1999/102899/designideas.htm#22di5 ; ;*********************************************************************** FMOSC.ASM Assembled with IASM 07/30/1999 12:40 PAGE 1 1 * Quasy FM Oscillator 2 * range 200 Hz - 400 Hz, 3 * period discretion - 0.02 ms 4 * number of frequencies - 125 5 ************************************************** 6 *nolist 0000 7 $include "std-j1a.asm" 8 *list 9 *I/O PORTS 0000 10 out equ 7;prtA pin11 11 *CONSTANTS 0000 12 HPmax equ 250T; frequency = 200 Hz 13 *VARIABLES 00C0 14 org RAM 00C0 15 k1 rmb 1 ;sound duration counter 00C1 16 k2 rmb 1 ;frequency number counter 00C2 17 HPER rmb 1 ;Half of Period register 00C3 18 flag rmb 1 ;flag register 19 *INITIALIZATION 07F1 20 org MOR 07F1 20 21 fcb %00100000 ;Osc.parall.resitor 0300 22 org ROM 0300 A6FF 23 init lda #$ff 0302 B704 24 sta ddrA ;set prtA for output 0304 3FC0 25 clr k1 ;0 -> k1 0306 3FC1 26 clr k2 ;0 -> k2 0308 3FC3 27 clr flag 030A A6FA 28 lda #HPmax 030C B7C2 29 sta HPER ;set T = 5 ms, f = 200 kHz 030E CD032D 30 main jsr burst; generate 256 cycles 0311 3DC3 31 tst flag 0313 2714 32 beq m1 0315 3CC2 33 inc HPER ; HPER + 1 0317 3CC1 34 m2 inc k2 ; k2 + 1 0319 B6C1 35 lda k2 ; k2 -> ACC 031B A17D 36 cmp #125T; k2 < 125? 031D 25EF 37 blo main 031F B6C3 38 lda flag ;inverting flag 0321 A801 39 eor #1 ; 0323 B7C3 40 sta flag ; 0325 3FC1 41 clr k2 ; 0 -> k2 0327 20E5 42 bra main 0329 3AC2 43 m1 dec HPER ;HPER - 1 032B 20EA 44 bra m2 FMOSC.ASM Assembled with IASM 07/30/1999 12:40 PAGE 2 032D 1E00 45 burst bset out,prtA ;1 -> out 032F BEC2 46 ldx HPER ;HPER -> x 0331 CD0342 47 jsr dly01x ;half period delay 0334 1F00 48 bclr out,prtA ;0 -> out 0336 BEC2 49 ldx HPER ;HPER -> x 0338 CD0342 50 jsr dly01x ;half period delay 033B 3CC0 51 inc k1 ;k1 + 1 033D 3DC0 52 tst k1 ;k1 = 0? 033F 26EC 53 bne burst 0341 81 54 rts ;return from burst 0342 A602 55 dly01x lda #2 ;delay 0.01x ms 0344 4A 56 rep0 decA 0345 26FD 57 bne rep0 0347 5A 58 decx 0348 26F8 59 bne dly01x 034A 81 60 rts ;return from dly01x 61 ************************************************* 07FE 62 org VECTORS+6 07FE 0300 63 fdb init