     1  0000 C290   clr p1.0
     2              org 0h
     3  0000 020100 ljmp start
     4                  ;s_interrupt_vector:
     5                  ;org 23h ; serial interrupt
     6                  ;  mov p1, #00h
     7                  ;  jbc ri, s_interrupt_jump
     8                  ;  ret
     9                s_interrupt_jump:
    10  0003 02012F     ljmp s_interrupt
    11                test:
    12  0006 2098FA     jb ri, s_interrupt_jump
    13  0009 22         ret
    14              org 100h
    15              start:
    16  0100 12015B   lcall s_init
    17  0103 C290     clr p1.0
    18  0105 901000   mov dptr, #sine
    19  0108 7901     mov r1, #01h
    20  010A 7A01     mov r2, #001h
    21  010C 7B00     mov r3, #0h
    22  010E 7C10     mov r4, #010h
    23                  
    24                loop:
    25  0110 D290       setb p1.0
    26  0112 E0         movx a, @dptr
    27  0113 C082       push dpl
    28                      ;push dph
    29  0115 89F0       mov b, r1
    30  0117 84         div ab
    31  0118 90FE10     mov dptr, #0FE10h
    32  011B F0         movx @dptr, a
    33                      ;mov p1, a
    34                      ;pop dph
    35  011C 8C83       mov dph, r4
    36  011E D082       pop dpl
    37  0120 0582       inc dpl
    38                      ;mov a, dpl
    39                      ;add a, #0Ah
    40                      ;mov dpl, a
    41                      ;mov a, r3
    42                      ;addc a, #0h
    43                      ;mov r3, a
    44                  
    45                      ;mov ie, #0FFh ; enable serial interrupt
    46  0122 120006     lcall test
    47  0125 EA         mov a, r2
    48  0126 F8         mov r0, a
    49  0127 C291       clr p1.1
    50                  delay:
    51  0129 D8FE         djnz r0, delay
    52  012B D291       setb p1.1
    53                      ;mov ie, #000h ; disable serial interrupt
    54  012D 80E1       sjmp loop
    55                  
    56              s_interrupt:
    57  012F 120168   lcall s_getchr
    58  0132 F590     mov p1, a
    59  0134 B43003   cjne a, #030h, s_interrupt_2
    60                      ;mov dptr, #sine
    61  0137 7C10       mov r4, #010h
    62  0139 22         ret
    63                s_interrupt_2:
    64  013A B43103   cjne a, #031h, s_interrupt_3
    65                      ;mov dptr, #square
    66  013D 7C11       mov r4, #011h
    67  013F 22         ret
    68                s_interrupt_3:
    69  0140 B43203   cjne a, #032h, s_interrupt_4
    70  0143 7C12       mov r4, #012h
    71  0145 22         ret
    72                s_interrupt_4:
    73  0146 B43302   cjne a, #033h, s_interrupt_5
    74  0149 7C20       mov r4, #020h
    75                s_interrupt_5:
    76  014B 20E509     jb acc.5, s_interrupt_f
    77                s_interrupt_a: ; amplitude
    78  014E 540F       anl a, #0Fh
    79  0150 F9         mov r1, a
    80  0151 740B       mov a, #011
    81  0153 C3         clr c
    82  0154 99         subb a, r1
    83  0155 F9         mov r1, a
    84  0156 22         ret
    85                s_interrupt_f: ; frequency
    86  0157 540F       anl a, #0Fh
    87                      ;mov b, #25
    88                      ;mul ab
    89  0159 FA         mov r2, a
    90  015A 22         ret
    91                  
    92              sine equ 1000h
    93              square equ 1100h
    94              triangle equ 1200h
    95              table equ 2000h
    96                  
    97              #include serial.asm
    98              #include sine.asm
    99              #include square.asm
   100              #include triangle.asm


