📄 dialphon.lst
字号:
MPASM 5.05 DIALPHON.ASM 4-22-2008 11:27:29 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 list p=16f627
00002
00003 Title "DialPhon.asm"
00004
00005 include <p16f627.inc>
00001 LIST
00002 ; P16F627.INC Standard Header File, Version 1.01 Microchip Technology, Inc.
00261 LIST
00006
00007 cblock 0x20
00000020 00008 W_TEMP,STATUS_TEMP
00000022 00009 CALLCNTR,CALLSTATE,CMDCNTR,CMDSTATE,TONECNTR,TONESTATE
00000028 00010 DLYCNTH,DLYCNTL,TIMECNTR,TONECYC
00011 endc
00012
00013 #define dlycmd 0x5 ; delay 5ms
00014 #define dlytone 0x14 ; delay 20ms
00015 #define dlybtn 0x32 ; delay 50ms
00016
00017 ; Reset vector
0000 00018 org 00h
0000 2815 00019 goto start
00020
00021 ; interrupt vector
0004 00022 org 04h
0004 2805 00023 goto interrupt
00024
00025 ; Program start
0005 00026 org 05h
0005 00027 interrupt
0005 00A0 00028 movwf W_TEMP ;Save W to W_TEMP
0006 0E03 00029 swapf STATUS,W
0007 0183 00030 clrf STATUS
0008 00A1 00031 movwf STATUS_TEMP
00032
0009 1D0B 00033 btfss INTCON,T0IF
000A 280F 00034 goto endofint
00035
000B 110B 00036 bcf INTCON,T0IF
000C 0AAA 00037 incf TIMECNTR,F
000D 3051 00038 movlw 0x51 ; 50ms interrupt 0x51
000E 0081 00039 movwf TMR0
00040
000F 00041 endofint
000F 0183 00042 clrf STATUS
0010 0E21 00043 swapf STATUS_TEMP,W
0011 0083 00044 movwf STATUS
0012 0EA0 00045 swapf W_TEMP,F
0013 0E20 00046 swapf W_TEMP,W
00047
0014 0009 00048 retfie
0015 00049 start
00050 ; bank1 select
MPASM 5.05 DIALPHON.ASM 4-22-2008 11:27:29 PAGE 2
DialPhon.asm
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0015 1683 00051 bsf STATUS,RP0
0016 1303 00052 bcf STATUS,RP1
00053
0017 3007 00054 movlw b'00000111' ; TMR0 internal clock prescale=256
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
0018 0081 00055 movwf OPTION_REG
00056
0019 30FF 00057 movlw b'11111111' ; PORTA All bits input
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
001A 0085 00058 movwf TRISA
00059
001B 3000 00060 movlw b'00000000' ; PORTB All bits output
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
001C 0086 00061 movwf TRISB
00062
00063 ; bank0 select
001D 1283 00064 bcf STATUS,RP0
001E 1303 00065 bcf STATUS,RP1
00066
001F 30A0 00067 movlw b'10100000' ; Global,TMR0 interrupt enable
0020 008B 00068 movwf INTCON
00069
0021 3051 00070 movlw 0x51 ; 50ms interrupt 0x51
0022 0081 00071 movwf TMR0
00072
0023 0185 00073 clrf PORTA
0024 01AA 00074 clrf TIMECNTR
0025 01A4 00075 clrf CMDCNTR
0026 01A2 00076 clrf CALLCNTR
0027 01A6 00077 clrf TONECNTR
0028 01AB 00078 clrf TONECYC
0029 1425 00079 bsf CMDSTATE,0 ; First Command State->'H'
002A 1423 00080 bsf CALLSTATE,0 ; First Call Button State->'H'
002B 1427 00081 bsf TONESTATE,0 ; First StopSound(Tone)input State->'H'
00082
002C 3081 00083 movlw b'10000001' ; Alarm -> off,Hook -> down
002D 0086 00084 movwf PORTB
00085 ; bcf PORTB,3 ; 16f74 test
00086
002E 00087 DisConnect
002E 3081 00088 movlw b'10000001' ; Alarm -> off,Hook -> down
002F 0086 00089 movwf PORTB
00090 ; bcf PORTB,3 ; 16f74 test
00091
0030 1C05 00092 btfss PORTA,0 ; Receive Command ?
0031 2848 00093 goto rcvcmdproc
0032 1425 00094 bsf CMDSTATE,0 ; Current Command State->'H'
00095
0033 1D05 00096 btfss PORTA,2 ; Call Button Push Down ?
0034 2837 00097 goto callbtnproc1
0035 1423 00098 bsf CALLSTATE,0 ; Current Call Button State->'H'
00099
0036 282E 00100 goto DisConnect
MPASM 5.05 DIALPHON.ASM 4-22-2008 11:27:29 PAGE 3
DialPhon.asm
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00101
0037 00102 callbtnproc1
0037 3032 00103 movlw dlybtn
0038 00A8 00104 movwf DLYCNTH
0039 2093 00105 call delay
00106 ; Call Button Push Down State Reconfirm
003A 1905 00107 btfsc PORTA,2
003B 282E 00108 goto DisConnect ; Call Button Push Down
00109
003C 1C23 00110 btfss CALLSTATE,0 ; Previous Call Button State 'H'? Confirm
003D 282E 00111 goto DisConnect
00112
003E 1023 00113 bcf CALLSTATE,0 ; Current Call Button State->'L'
003F 0AA2 00114 incf CALLCNTR,F
00115
0040 0822 00116 movf CALLCNTR,W
0041 1403 00117 bsf STATUS,C
0042 3C00 00118 sublw 0x0 ; n>=1 ?
0043 1803 00119 btfsc STATUS,C
0044 282E 00120 goto DisConnect
00121
0045 01A2 00122 clrf CALLCNTR
0046 01A4 00123 clrf CMDCNTR
0047 285A 00124 goto Connect
00125
0048 00126 rcvcmdproc
0048 3005 00127 movlw dlycmd
0049 00A8 00128 movwf DLYCNTH
004A 2093 00129 call delay
00130 ; Receive Command State Reconfirm
004B 1805 00131 btfsc PORTA,0
004C 282E 00132 goto DisConnect
00133
004D 1C25 00134 btfss CMDSTATE,0 ; Previous Command State 'H'? Confirm
004E 282E 00135 goto DisConnect
00136
004F 1025 00137 bcf CMDSTATE,0 ; Current Command State->'L'
0050 0AA4 00138 incf CMDCNTR,F
00139
0051 0824 00140 movf CMDCNTR,W
0052 1403 00141 bsf STATUS,C
0053 3C78 00142 sublw 0x78 ; n>120 ?
0054 1803 00143 btfsc STATUS,C
0055 282E 00144 goto DisConnect
00145
0056 01A2 00146 clrf CALLCNTR
0057 01A4 00147 clrf CMDCNTR
0058 285A 00148 goto Connect
0059 0000 00149 nop
005A 00150 Connect
005A 30E1 00151 movlw b'11100001' ; Alarm -> on,Hook -> up
005B 0086 00152 movwf PORTB
00153 ; bsf PORTB,3 ; 16f74 test
MPASM 5.05 DIALPHON.ASM 4-22-2008 11:27:29 PAGE 4
DialPhon.asm
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00154
005C 1D05 00155 btfss PORTA,2 ; Call Button Push Down
005D 2863 00156 goto callbtnproc2
005E 1423 00157 bsf CALLSTATE,0 ; Current Call Button State->'H'
00158
005F 1C85 00159 btfss PORTA,1 ; Stop Sound(Tone) input
0060 2874 00160 goto toneproc
0061 1427 00161 bsf TONESTATE,0 ; Current StopSound(Tone) input State->'H'
00162
0062 285A 00163 goto Connect
00164
0063 00165 callbtnproc2
0063 3032 00166 movlw dlybtn
0064 00A8 00167 movwf DLYCNTH
0065 2093 00168 call delay
00169 ; Call Button Push Down State Reconfirm
0066 1905 00170 btfsc PORTA,2
0067 285A 00171 goto Connect
00172
0068 1C23 00173 btfss CALLSTATE,0 ; Previous Call Button State 'H'? Confirm
0069 285A 00174 goto Connect
00175
006A 1023 00176 bcf CALLSTATE,0 ; Current Call Button State->'L'
006B 0AA2 00177 incf CALLCNTR,F
00178
006C 0822 00179 movf CALLCNTR,W
006D 1403 00180 bsf STATUS,C
006E 3C00 00181 sublw 0x0 ; n>=1 ?
006F 1803 00182 btfsc STATUS,C
0070 285A 00183 goto Connect
00184
0071 01A2 00185 clrf CALLCNTR
0072 01A6 00186 clrf TONECNTR
0073 282E 00187 goto DisConnect
00188
0074 00189 toneproc
0074 3014 00190 movlw dlytone
0075 00A8 00191 movwf DLYCNTH
0076 2093 00192 call delay
00193 ; Stop Sound input State Reconfirm
0077 1885 00194 btfsc PORTA,1
0078 285A 00195 goto Connect
00196
0079 1C27 00197 btfss TONESTATE,0 ; Previous StopSound(Tone) input State->'H' Confirm
007A 285A 00198 goto Connect
00199
007B 1027 00200 bcf TONESTATE,0 ; Current StopSound(Tone) input State->'L'
00201
007C 082A 00202 movf TIMECNTR,W ; Tone signal period detection
007D 00AB 00203 movwf TONECYC
007E 01AA 00204 clrf TIMECNTR
00205
007F 1403 00206 bsf STATUS,C
MPASM 5.05 DIALPHON.ASM 4-22-2008 11:27:29 PAGE 5
DialPhon.asm
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0080 3C0B 00207 sublw 0x0b ; period > 600ms ?
0081 1803 00208 btfsc STATUS,C
0082 2891 00209 goto noiseproc
00210
00211 ;;;;;;;;;;;;;;;;;;;;
00212 ; btfss PORTB,2 ; 16f74 test
00213 ; goto lp0003 ; 16f74 test
00214 ; bcf PORTB,2 ; 16f74 test
00215 ; goto lp0004 ; 16f74 test
00216 ;lp0003 ; 16f74 test
00217 ; bsf PORTB,2 ; 16f74 test
00218 ;lp0004 ; 16f74 test
00219 ;;;;;;;;;;;;;;;;;;;;
00220
0083 082B 00221 movf TONECYC,W
0084 1003 00222 bcf STATUS,C
0085 3C0F 00223 sublw 0x0f ; period < 800ms ?
0086 1C03 00224 btfss STATUS,C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -