;************************************************************** ; tutone2.asm 15MAR04 Zappy TV (PE9ZZ) ; pic@polonai.se ;************************************************************** ; ; This PIC16F84 program outputs a two-tone signal to test ; third order distortion of SSB transmitters. The tones are ; 500 Hz and 2.5 kHz and are of equal amplitude. The PIC will ; operate down to 2.0 V (two penlite batteries) ; ; As the sample rate is 91 kHz no filtering is needed :-) ; ;************************************************************** LIST P=16F84, F=INHX8M #include __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC ; Equates RESET_V EQU 0x00 ; Address of RESET Vector OSC_FREQ EQU D'4000000' ; Oscillator Frequency is 4.0 MHz ; Registers Pointer EQU 0x20 ; Table Pointer ;************************************************************** ; Begin Program ;************************************************************** ORG RESET_V ; RESET vector location RESET GOTO START ORG 4 ; INT vector ;************************************************************** ; Initialization Routine ; ;************************************************************** START ; POWER_ON Reset (Beginning of program) CLRF STATUS ; Do initialization, Select bank 0 CLRF INTCON ; Clear int-flags, Disable interrupts CLRF PCLATH ; Keep in lower 2KByte CLRF PORTA ; ALL PORT output should output Low. CLRF PORTB BSF STATUS, RP0 ; Select bank 1 MOVLW 0xFF MOVWF TRISA ; RA4-0 Inputs CLRF TRISB ; RB7-0 Outputs BCF STATUS, RP0 ; Select bank 0 ;************************************************************** ; Avanti! ;************************************************************** Begin MOVLW 0xB6 ; There are 182 samples MOVWF Pointer ; Store into Pointer Loop MOVF Pointer, 0 ; Get Pointer value in W CALL Table ; Get a sample MOVWF PORTB ; Output this sample on the R-2R D/A converter DECFSZ Pointer, 1 GOTO Loop GOTO Begin Table: ADDWF PCL, 1 NOP RETLW 0x76 RETLW 0x6D RETLW 0x64 RETLW 0x5C RETLW 0x56 RETLW 0x52 RETLW 0x4F RETLW 0x4E RETLW 0x4F RETLW 0x52 RETLW 0x57 RETLW 0x5E RETLW 0x67 RETLW 0x72 RETLW 0x7D RETLW 0x8A RETLW 0x98 RETLW 0xA6 RETLW 0xB4 RETLW 0xC2 RETLW 0xCF RETLW 0xDB RETLW 0xE5 RETLW 0xEE RETLW 0xF6 RETLW 0xFB RETLW 0xFE RETLW 0xFF RETLW 0xFE RETLW 0xFB RETLW 0xF5 RETLW 0xEF RETLW 0xE6 RETLW 0xDC RETLW 0xD2 RETLW 0xC7 RETLW 0xBB RETLW 0xB0 RETLW 0xA5 RETLW 0x9C RETLW 0x93 RETLW 0x8B RETLW 0x86 RETLW 0x82 RETLW 0x80 RETLW 0x80 RETLW 0x82 RETLW 0x86 RETLW 0x8B RETLW 0x93 RETLW 0x9C RETLW 0xA5 RETLW 0xB0 RETLW 0xBB RETLW 0xC7 RETLW 0xD2 RETLW 0xDC RETLW 0xE6 RETLW 0xEF RETLW 0xF5 RETLW 0xFB RETLW 0xFE RETLW 0xFF RETLW 0xFE RETLW 0xFB RETLW 0xF6 RETLW 0xEE RETLW 0xE5 RETLW 0xDB RETLW 0xCF RETLW 0xC2 RETLW 0xB4 RETLW 0xA6 RETLW 0x98 RETLW 0x8A RETLW 0x7D RETLW 0x72 RETLW 0x67 RETLW 0x5E RETLW 0x57 RETLW 0x52 RETLW 0x4F RETLW 0x4E RETLW 0x4F RETLW 0x52 RETLW 0x56 RETLW 0x5C RETLW 0x64 RETLW 0x6D RETLW 0x76 RETLW 0x7F RETLW 0x89 RETLW 0x92 RETLW 0x9B RETLW 0xA3 RETLW 0xA9 RETLW 0xAD RETLW 0xB0 RETLW 0xB1 RETLW 0xB0 RETLW 0xAD RETLW 0xA8 RETLW 0xA1 RETLW 0x98 RETLW 0x8D RETLW 0x82 RETLW 0x75 RETLW 0x67 RETLW 0x59 RETLW 0x4B RETLW 0x3D RETLW 0x30 RETLW 0x24 RETLW 0x1A RETLW 0x11 RETLW 0x09 RETLW 0x04 RETLW 0x01 RETLW 0x00 RETLW 0x01 RETLW 0x04 RETLW 0x0A RETLW 0x10 RETLW 0x19 RETLW 0x22 RETLW 0x2D RETLW 0x38 RETLW 0x44 RETLW 0x4F RETLW 0x5A RETLW 0x63 RETLW 0x6C RETLW 0x74 RETLW 0x79 RETLW 0x7D RETLW 0x7F RETLW 0x7F RETLW 0x7D RETLW 0x79 RETLW 0x74 RETLW 0x6C RETLW 0x63 RETLW 0x5A RETLW 0x4F RETLW 0x44 RETLW 0x38 RETLW 0x2D RETLW 0x22 RETLW 0x19 RETLW 0x10 RETLW 0x0A RETLW 0x04 RETLW 0x01 RETLW 0x00 RETLW 0x01 RETLW 0x04 RETLW 0x09 RETLW 0x11 RETLW 0x1A RETLW 0x24 RETLW 0x30 RETLW 0x3D RETLW 0x4B RETLW 0x59 RETLW 0x67 RETLW 0x75 RETLW 0x82 RETLW 0x8D RETLW 0x98 RETLW 0xA1 RETLW 0xA8 RETLW 0xAD RETLW 0xB0 RETLW 0xB1 RETLW 0xB0 RETLW 0xAD RETLW 0xA9 RETLW 0xA3 RETLW 0x9B RETLW 0x92 RETLW 0x89 RETLW 0x7F END