; 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