⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多功能波形发生器.asm

📁 基于PIC16F877单片机的多功能波形发生器的源程序
💻 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 + -