📄 多功能波形发生器.asm
字号:
; Author: zhouxuan
; Date: 03/2/19
; Describe:按键控制波形输出,开始输出为正弦波,KEY12表示方波,KEY22表示锯齿波,KEY32表示三角波;KEY42表示正弦波
LIST P=16F877
#INCLUDE<P16F877.INC>
TEMP2 EQU 21H
TEMP3 EQU 22H
TEMP1 EQU 23H
TEMP0 EQU 24H
TEMP EQU 25H
NEW_KEY EQU 26H
KEY_NIBL EQU 27H
FLAG EQU 28H
TYPE EQU 29H
AGAIN EQU 2AH
TRAIN EQU 2BH
TIMER1 EQU 2CH
TIMER2 EQU 2DH
WBU EQU 2EH
SBU EQU 2FH
TIMER3 EQU 31H
DEYH EQU 32H
DEYL EQU 33H
ORG 000
GOTO START ;防真时要加NOP
ORG 004
GOTO INTSER
ORG 010H
START
CLRF AGAIN
CLRF TYPE
MOVLW 0F0H
MOVWF TEMP2
CLRF TEMP0
CLRF TEMP
BSF STATUS,RP0
CLRF TRISC
CLRF TRISD
CLRF TRISE
BCF STATUS,RP0
CLRF PORTC
CLRF PORTD
CLRF PORTE
BCF INTCON,RBIE
BCF INTCON,GIE
BSF STATUS,RP0 ;键盘初始化
MOVLW 0F0H
MOVWF TRISB
BCF OPTION_REG,7 ;RB口弱上拉
BCF STATUS,RP0
CLRF FLAG
MOVLW 0F0H
MOVWF PORTB
NOP
NOP
MOVF PORTB,W
BCF STATUS,Z
BCF PORTE,1
BSF PORTC,0
BSF PORTC,1
BCF INTCON,RBIF
BSF INTCON,RBIE
BSF INTCON,GIE ;开中断
BSF TYPE,7 ;输出正弦波
CONTINUE ;判断输出何种波
BTFSC TYPE,6
GOTO FANGBO
BTFSC TYPE,5
GOTO SANJIAO
BTFSC TYPE,4
GOTO JUCI
BTFSC TYPE,7
GOTO SIN
GOTO CONTINUE
;-----------------------------------------------------------
JUCI
MOVLW 0H
MOVWF TEMP ;锯齿波
JU_LOOP MOVF TEMP,0
MOVWF PORTD
BTFSS TYPE,4
GOTO CONTINUE
INCFSZ TEMP,1
GOTO JU_LOOP
GOTO JUCI
FANGBO
MOVLW 00H ;方波
MOVWF PORTD
CALL DELAY
CALL DELAY
MOVLW 0FFH
MOVWF PORTD
CALL DELAY
CALL DELAY
BTFSS TYPE,6
GOTO CONTINUE
GOTO FANGBO
SANJIAO
CLRF TEMP ;三角波
SAN_LOOP
MOVF TEMP,0
MOVWF PORTD
INCFSZ TEMP,1
GOTO SAN_LOOP
DECF TEMP,1
SAN_LOOP2
MOVF TEMP,0
MOVWF PORTD
DECFSZ TEMP,1
GOTO SAN_LOOP2
BTFSS TYPE,5
GOTO CONTINUE
GOTO SAN_LOOP
SIN
MOVLW 01H ;正弦波
MOVWF TEMP
SIN1
MOVF TEMP,0
CALL TAB
MOVWF PORTD
BTFSS TYPE,7
GOTO CONTINUE
INCF TEMP,1
GOTO SIN1 TAB ;正弦表
ADDWF PCL,1
RETLW 0
RETLW 0
RETLW 1
RETLW 2
RETLW 3
RETLW 4
RETLW 6
RETLW 7
RETLW 9
RETLW 0AH
RETLW 0DH
RETLW 0EH
RETLW 11H
RETLW 13H
RETLW 16H
RETLW 18H
RETLW 1CH
RETLW 1EH
RETLW 22H
RETLW 25H
RETLW 29H
RETLW 2BH
RETLW 30H
RETLW 33H
RETLW 38H
RETLW 3AH
RETLW 40H
RETLW 43H
RETLW 48H
RETLW 4CH
RETLW 51H
RETLW 55H
RETLW 5AH
RETLW 5DH
RETLW 63H
RETLW 66H
RETLW 6CH
RETLW 6FH
RETLW 76H
RETLW 79H
RETLW 80H
RETLW 83H
RETLW 89H
RETLW 8DH
RETLW 93H
RETLW 96H
RETLW 9CH
RETLW 9FH
RETLW 0A5H
RETLW 0A8H
RETLW 0AEH
RETLW 0B1H
RETLW 0B7H
RETLW 0BAH
RETLW 0BFH
RETLW 0C2H
RETLW 0C7H
RETLW 0CAH
RETLW 0CFH
RETLW 0D1H
RETLW 0D6H
RETLW 0D8H
RETLW 0DDH
RETLW 0DFH
RETLW 0E3H
RETLW 0E5H
RETLW 0E9H
RETLW 0EAH
RETLW 0EEH
RETLW 0EFH
RETLW 0F2H
RETLW 0F4H
RETLW 0F6H
RETLW 0F7H
RETLW 0F9H
RETLW 0FAH
RETLW 0FCH
RETLW 0FDH
RETLW 0FEH
RETLW 0FFH
RETLW 0FFH
RETLW 0FFH
RETLW 0FFH
RETLW 0FFH
RETLW 0FFH
RETLW 0FFH
RETLW 0FFH
RETLW 0FEH
RETLW 0FCH
RETLW 0FBH
RETLW 0F9H
RETLW 0F8H
RETLW 0F6H
RETLW 0F5H
RETLW 0F2H
RETLW 0F1H
RETLW 0EEH
RETLW 0ECH
RETLW 0E9H
RETLW 0E7H
RETLW 0E1H
RETLW 0DEH
RETLW 0DAH
RETLW 0D8H
RETLW 0D4H
RETLW 0D1H
RETLW 0CCH
RETLW 0CAH
RETLW 0C5H
RETLW 0C2H
RETLW 0BCH
RETLW 0BAH
RETLW 0B4H
RETLW 0B1H
RETLW 0ABH
RETLW 0A8H
RETLW 0A2H
RETLW 9FH
RETLW 99H
RETLW 96H
RETLW 90H
RETLW 8DH
RETLW 86H
RETLW 83H
RETLW 80H
RETLW 7CH
RETLW 76H
RETLW 72H
RETLW 6CH
RETLW 69H
RETLW 63H
RETLW 60H
RETLW 5AH
RETLW 57H
RETLW 51H
RETLW 4EH
RETLW 48H
RETLW 45H
RETLW 40H
RETLW 3DH
RETLW 38H
RETLW 35H
RETLW 30H
RETLW 2EH
RETLW 29H
RETLW 27H
RETLW 22H
RETLW 20H
RETLW 1CH
RETLW 1AH
RETLW 16H
RETLW 15H
RETLW 11H
RETLW 10H
RETLW 0DH
RETLW 0BH
RETLW 9
RETLW 8
RETLW 7
RETLW 6
RETLW 5
RETLW 4
RETLW 3
RETLW 2
RETLW 1
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
RETLW 0
;--------------------------------------------------------------
INTSER BTFSC INTCON,RBIF ;中断服务
GOTO INTRB
GOTO CONTINUE
RETURN
INTRB
BCF INTCON,RBIF ;清RB口中断标志
CALL KEYDELAY ;调用延时,去抖
CALL KEYDELAY
MOVF PORTB,W
BCF STATUS,Z
ANDLW 0F0H
SUBLW 0F0H
BTFSC STATUS,Z ;判断是否是下降沿
RETFIE ;是上升沿,则中断返回
CALL KEYSERVE ;键盘服务程序
MOVLW 0F0H
MOVWF PORTB
BCF INTCON,RBIF
RETFIE ;中断返回
KEYDELAY
MOVLW 0X7F ;延时35.2ms
MOVWF DEYH
AGAIN2
MOVLW 0XFF
MOVWF DEYL
AGAIN1
DECFSZ DEYL,1
GOTO AGAIN1
DECFSZ DEYH,1
GOTO AGAIN2
RETURN
;-------------------------------------------------------
KEYSERVE ;键盘服务
JIANZHI
MOVLW 0FDH ;查第二列
MOVWF PORTB
NOP
MOVF PORTB,W
BTFSS PORTB,4 ;RB4?
GOTO S3
BTFSS PORTB,5 ;RB5?
GOTO S2
BTFSS PORTB,6 ;RB6?
GOTO S1
BTFSS PORTB,7 ;RB7?
GOTO S0
RETURN
S0
BSF TYPE,6
BCF TYPE,5
BCF TYPE,4
BCF TYPE,7
RETURN
S1
BSF TYPE,5
BCF TYPE,6
BCF TYPE,4
BCF TYPE,7
RETURN
S2
BSF TYPE,4
BCF TYPE,5
BCF TYPE,6
BCF TYPE,7
RETURN
S3
BSF TYPE,7
BCF TYPE,5
BCF TYPE,4
BCF TYPE,6
RETURN
;-----------------------------------------------------------
DELAY ;延时0.27ms
MOVLW 0FFH
MOVWF TIMER1
DEL_LOP
DECFSZ TIMER1,1
GOTO DEL_LOP
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -