📄 taxi-asm.asm
字号:
;TAXI PHONE for PIC508A CHIP
;'508A Files
;07h
;08h
;09h
;0Ah
;0Bh
;0Ch
;0Dh
;0Eh loop file
;0Fh
;10h jump file for tables
;11h
;12h Count file
;13h Carrier DTMF
;14h Low tone
;15h decrementable low tone
;16h High tone
;17h decrementable high tone
;18h
;19h
;1Ah delay routines
;1Bh delay routines
;1Ch delay routines
;1Dh
;1Eh
;1Fh
SetUp MOVLW 08 ;Put 0000 1000 into W
TRIS 06 ;Make GP3 input
CLRF 06 ;Clear port 6 of any junk
BSF 01h,0 ;Prescaler bit0
BSF 01h,1 ;Prescaler bit1
BSF 01h,2 ;Prescaler bit2 = WDT x 128
BSF 01h,3 ;Prescaler assigned to WDT
StartUp GOTO Main1
;Table 1 for storing phone number
Table1 ADDWF 02,1 ;File 02 = Low bits of program counter
RETLW 0Ah ;0
RETLW 02h ;
RETLW 01h ;
RETLW 01h ;
RETLW 01h ;
RETLW 02h ;
RETLW 01h ;
RETLW 01h ;
RETLW 02h ;
RETLW 02h ;
RETLW 0Eh ;E = End of number
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
RETLW 0FFh
;Table2 DTMF Low tones
Table2 ADDWF 02,1 ;File 02 = low bits of program counter
NOP
RETLW 075h ;1
RETLW 075h ;2
RETLW 075h ;3
RETLW 06Bh ;4
RETLW 06Bh ;5
RETLW 06Bh ;6
RETLW 060h ;7
RETLW 060h ;8
RETLW 060h ;9
RETLW 057h ;0
;Table3 DTMF HIGH tones
Table3 ADDWF 02,1 ;File 02 = Low bits of program counter
NOP
RETLW 044h ;1
RETLW 03Dh ;2
RETLW 037h ;3
RETLW 044h ;4
RETLW 03Dh ;5
RETLW 037h ;6
RETLW 044h ;7
RETLW 03Dh ;8
RETLW 038h ;9
RETLW 03Dh ;0
;Short delay between tone approx 50mS
Del1 CLRWDT
MOVLW 50h ;loops
MOVWF 1B ;
Del1A DECFSZ 1A,1 ;Will produce 256 decrements
GOTO Del1A
DECFSZ 1B,1 ;decrements file 1B
GOTO Del1A
RETLW 00
;0.7sec Delay
Del2 CLRWDT
NOP ;NOP's to pad out the delay routine to
NOP ;create more than 655,000uS delay
NOP ;(approx 0.7sec delay)
NOP
NOP
NOP
NOP
DECFSZ 1A,1 ;After one pass, each file will be
GOTO Del2 ;256 and will produce the longest
DECFSZ 1B,1 ;delay-time.
GOTO Del2
RETLW 00
;Dial1 dials the DTMF phone number
;13h = carrier file
;14h = low tone
;15h = decrementable low tone
;16h = high tone
;17h = decrementable high tone
Dial1 MOVF 10h,0 ;Put 10h into W
CALL Table1
MOVWF 13h ;Put W into 13h - carrier
MOVLW 0E ;Look for E - end of number
XORWF 13h,0 ;Is 13h = E?
BTFSC 03,2
GOTO Main4
MOVF 13h,0 ;File 13h will be 1,2,3 ..0A
CALL Table2 ;Get low-tone value
MOVWF 14h ;Put low-tone into 14h
MOVWF 15h ;Decrementable low-tone
MOVF 13h,0
CALL Table3
MOVWF 16h ;Put high-tone into 16h
MOVWF 17h ;Decrementable high-tone
CALL DTMF1
Dial2 CALL Del1 ;Short delay before next
CALL Del1 ; digit
INCF 10h,1
GOTO Dial1
DTMF1 MOVLW 0A0h ; loops of tone
MOVWF 11h ; to produce 1/10th sec
DTMF2 DECFSZ 17h,1 ;Decrement high-tone file
GOTO DTMF3
MOVLW 01 ;To toggle GP0
XORWF 06,1 ;Toggle GP0
MOVF 16h,0 ;To re-load high-tone file
MOVWF 17h ;Re-load high-tone file
DTMF3 DECFSZ 15h,1 ;Decrement low-tone file
GOTO DTMF2
MOVLW 02 ;To toggle GP1
XORWF 06,1 ;Toggle GP1
MOVF 14h,0 ;To re-load low-tone file
MOVWF 15h ;Re-load low-tone file
DECFSZ 11h,1 ;Decrement loops file
GOTO DTMF2
GOTO Dial2
;Main
Main1 CALL Del2 ;0.7sec delay
CALL Del2 ;0.7sec delay
CLRF 10h ;Jump value for Table1
Main2 MOVF 10h,0 ;Look for NOPs in Table1
CALL Table1 ; so chip can be re-burnt
XORLW 00h
BTFSS 03,2
GOTO Main3
INCF 10h,1
GOTO Main2
Main3 BTFSS 06,3 ;Is auto-dial Sw closed? = GP3=LOW
GOTO Main4 ;Yes. Auto Sw closed = GP3 = LOW
Sw CALL Del2 ;No. Wait for Sw to be pressed
BTFSC 06,3 ;Is switch pressed?
GOTO Sw ;No. Loop here until Sw pressed
Main4 GOTO Dial1 ;Yes.
Main5 NOP ;Loop forever after dialing
CLRWDT ;WDT will turn project on
GOTO Main5 ; when power is applied
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -