; Generate sine wave using a simple R-2R DAC hanging off port B
; of an 8255 - Steven J. Merrifield, sjm@ee.latrobe.edu.au
; 25 Apr 95

$mod51

ppi_pa          equ 0       ; addr of ppi port a
ppi_pb          equ 1       ; addr of ppi port b
ppi_pc          equ 2       ; addr of ppi port c
ppi_ctrl        equ 3       ; addr of ppi ctrl register

                org 8000h

; *******************************************************************
; Initialise 8255A PPI - mode 0
; port b = outputs (DAC)
; port c lower = outputs (keypad columns)
; port c upper = inputs (keypad rows)
; *******************************************************************
                mov dptr,#ppi_ctrl
                mov a,#88h          ; 1000 1000
                movx @dptr,a

; *******************************************************************
; Main program
; *******************************************************************
main:           clr a
top:            push acc
                mov dptr,#sine      ; get value from table
                movc a,@a+dptr

                mov dptr,#ppi_pb    ; write value to DAC
                movx @dptr,a

                pop acc
                inc a
                sjmp top

sine:           db 128,131,134,137,140,144,147,150,153,156,159,162
                db 165,168,171,174,177,180,182,185,188,191,194,196
                db 199,201,204,206,209,211,214,216,218,220,222,224
                db 226,228,230,232,234,236,237,239,240,242,243,244
                db 246,247,248,249,250,251,251,252,253,253,254,254
                db 254,255,255,255,255,255,255,255,254,254,253,253
                db 252,252,251,250,249,248,247,246,245,244,242,241
                db 240,238,236,235,233,231,229,227,225,223,221,219
                db 217,215,212,210,208,205,203,200,197,195,192,189
                db 187,184,181,178,175,172,169,167,164,160,157,154
                db 151,148,145,142,139,136,133,130,126,123,120,117
                db 114,111,108,105,102,99,96,92,90,87,84,81,78,75
                db 72,69,67,64,61,59,56,53,51,48,46,44,41,39,37,35
                db 33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9
		db 8,7,6,5,4,4,3,3,2,2,1,1,1,1,1,1,1,2,2,2,3,3,4
                db 5,5,6,7,8,9,10,12,13,14,16,17,19,20,22,24,26,28
                db 30,32,34,36,38,40,42,45,47,50,52,55,57,60,62,65
                db 68,71,74,76,79,82,85,88,91,94,97,100,103,106,109
                db 112,116,119,122,125,126,127

                end


