📄 dtmf.asm
字号:
; Filename: DTMF.ASM
; **********************************************
; * Author: John Day *
; * Sr. Field Applications Engineer *
; * Microchip Technology *
; * Revision: 1.2 *
; * Date December 20, 1995 *
; * Part: PIC16C54 *
; * Compiled using MPASM V1.21 *
; **********************************************
; * Include files: *
; * NONE (used by DTMF.ASM) *
; **********************************************
; * Fuses: OSC: XT (3.579545 Mhz xtal) *
; * WDT: OFF *
; * CP: OFF *
; ****************************************************************************
; * This program uses and external R2R ladder network to generate complete *
; * DTMF dial tones used for telphone dialing. *
; ****************************************************************************
; * Program Memory: *
; * 220 Words - sine wave look-up table (7 sine waves total) *
; * 25 Words - keypad sine address matrix look-up *
; * 37 Words - DTMF sine wave base initialization/generation *
; * 3 Words - Initialization *
; * 25 Words - Test sample code *
; * RAM Memory: *
; * 8 Bytes *
; ****************************************************************************
list P=16C54,F=INHX8M,R=DEC
#include p16c5x.inc
__CONFIG _XT_OSC&_WDT_OFF&_CP_OFF
WAVEABASE EQU 10h ; Base address of sine A waveform
POINTERA EQU 11h ; Pointer to current position in sine A
WAVEBBASE EQU 12h ; Base address of sine B waveform
POINTERB EQU 13h ; Pointer to current position in sine B
NEXTVALUE EQU 14h ; Sum register to store Sine A + Sine B
SINECOUNT EQU 15h ; LSB counter for time to output DTMF
SINECOUNTH EQU 16h ; MSB counter for time to output DTMF
TEMP EQU 17h ; Temporary storage
ENDSINE EQU .127 ; Value to show the end of a sine table
; ****************************************************************************
; * sinelookup *
; * This is the look-up table for the (4 X 3) keypad matrix sine wave table. *
; * There are (7) sine waves stored here and adding any two from the *
; * matrix will product a DTMF signal for the appropriate key *
; * Crystal Frequency: 3.579545 Mhz *
; * Instructions/Loop: 35 *
; * Base Frequency: 1209 1336 1477 697 770 852 941 Hz *
; * Actual Frequency: 1217 1345 1475 691 774 852 946 Hz *
; * Error 0.7 0.7 -0.1 -0.9 0.5 0 0.5 % *
; * Num Table Entries: 21 19 52 37 33 30 27 *
; * Total Table Entries: 219 *
; * Program Memory: *
; * 220 Words - Used for (7) sine look-up entries *
; * RAM Memory: *
; * NONE - Look-up table only *
; ****************************************************************************
sinelookup ; Used as address lable to call look-up table
addwf PCL,F ; Add sine offset to PC to jump into table
sineoffset ; Used to calculate offset value address
sinerow1 ; Address for sine wave in row 1
retlw 149
retlw 170
retlw 190
retlw 208
retlw 224
retlw 236
retlw 246
retlw 253
retlw 255
retlw 254
retlw 250
retlw 242
retlw 230
retlw 216
retlw 199
retlw 180
retlw 160
retlw 138
retlw 117
retlw 95
retlw 75
retlw 56
retlw 39
retlw 25
retlw 13
retlw 5
retlw 1
retlw 0
retlw 2
retlw 9
retlw 19
retlw 31
retlw 47
retlw 65
retlw 85
retlw 106
retlw 127 ; End of this sine wave
sinerow2 ; Address for sine wave in row 2
retlw 152
retlw 175
retlw 197
retlw 216
retlw 232
retlw 244
retlw 252
retlw 255
retlw 254
retlw 248
retlw 238
retlw 224
retlw 207
retlw 186
retlw 164
retlw 140
retlw 115
retlw 91
retlw 69
retlw 48
retlw 31
retlw 17
retlw 7
retlw 1
retlw 0
retlw 3
retlw 11
retlw 23
retlw 39
retlw 58
retlw 80
retlw 103
retlw 127 ; End of this sine wave
sinerow3 ; Address for sine wave in row 3
retlw 154
retlw 180
retlw 203
retlw 223
retlw 238
retlw 249
retlw 255
retlw 255
retlw 249
retlw 238
retlw 223
retlw 203
retlw 180
retlw 154
retlw 128
retlw 101
retlw 75
retlw 52
retlw 32
retlw 17
retlw 6
retlw 0
retlw 0
retlw 6
retlw 17
retlw 32
retlw 52
retlw 75
retlw 101
retlw 127 ; End of this sine wave
sinerow4 ; Address for sine wave in row 4
retlw 157
retlw 185
retlw 210
retlw 230
retlw 245
retlw 254
retlw 255
retlw 250
retlw 238
retlw 221
retlw 198
retlw 171
retlw 142
retlw 113
retlw 84
retlw 57
retlw 34
retlw 17
retlw 5
retlw 0
retlw 1
retlw 10
retlw 25
retlw 45
retlw 70
retlw 98
retlw 127 ; End of this sine wave
sinecolumna ; Address for sine wave in column A
retlw 165
retlw 200
retlw 228
retlw 247
retlw 255
retlw 252
retlw 238
retlw 215
retlw 183
retlw 147
retlw 108
retlw 72
retlw 40
retlw 17
retlw 3
retlw 0
retlw 8
retlw 27
retlw 55
retlw 90
retlw 127 ; End of this sine wave
sinecolumnb ; Address for sine wave in column B
retlw 169
retlw 206
retlw 235
retlw 252
retlw 255
retlw 245
retlw 222
retlw 188
retlw 149
retlw 106
retlw 67
retlw 33
retlw 10
retlw 0
retlw 3
retlw 20
retlw 49
retlw 86
retlw 127 ; End of this sine wave
sinecolumnc ; Address for sine wave in column C (double sine wave)
retlw 173
retlw 212
retlw 241
retlw 255
retlw 252
retlw 233
retlw 200
retlw 158
retlw 112
retlw 68
retlw 32
retlw 8
retlw 0
retlw 8
retlw 32
retlw 68
retlw 112
retlw 158
retlw 200
retlw 233
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -