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

📄 实验24.asm

📁 实验24-脉冲信号发生器实验参考程序,基于PIC16F877A
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	CALL	DELAY1S					;调用延时
	MOVLW	B'11100111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11111111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	GOTO	HUI
;----------------------------------------------------------------------------------------------
;键盘粗扫描(有没有键按下)
;----------------------------------------------------------------------------------------------
JPSM	MOVLW 	0F0H 
	MOVWF	PORTB
	MOVLW	B'11110000'				;屏蔽低4位
	ANDWF	PORTB,W
	SUBLW	B'11110000'
	BTFSC	STATUS,Z
	RETURN						;没有键按下,返回
	CALL	DELAY10MS				;防干扰延时10MS
	MOVLW 	0F0H		
	MOVWF	PORTB
	MOVLW	B'11110000'				;屏蔽低4位
	ANDWF	PORTB,W
	SUBLW	B'11110000'
	BTFSC	STATUS,Z
	RETURN						;子程序返回
	MOVLW	B'11111110'				;键盘细扫描(哪个键按下了)
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	JIAN0					;键"0"按下,转去执行对应键盘子程序
	BTFSS	PORTB,5
	GOTO	JIAN1					;键"1"按下,转去执行对应键盘子程序
	BTFSS	PORTB,6
	GOTO	JIAN2					;键"2"按下,转去执行对应键盘子程序
	BTFSS	PORTB,7
	GOTO	JIAN3					;键"3"按下,转去执行对应键盘子程序
	MOVLW	B'11111101'
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	JIAN4					;键"4"按下,转去执行对应键盘子程序
	BTFSS	PORTB,5
	GOTO	JIAN5					;键"5"按下,转去执行对应键盘子程序
	BTFSS	PORTB,6
	GOTO	JIAN6					;键"6"按下,转去执行对应键盘子程序
	BTFSS	PORTB,7
	GOTO	JIAN7					;键"7"按下,转去执行对应键盘子程序
	MOVLW	B'11111011'
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	JIAN8					;键"8"按下,转去执行对应键盘子程序
	BTFSS	PORTB,5
	GOTO	JIAN9					;键"9"按下,转去执行对应键盘子程序
	BTFSS	PORTB,6
	GOTO	JIANA					;键"A"按下,转去执行对应键盘子程序
	BTFSS	PORTB,7
	GOTO	JIANB					;键"B"按下,转去执行对应键盘子程序
	MOVLW	B'11110111'
	MOVWF	PORTB
	BTFSS	PORTB,4
	GOTO	JIANC					;键"C"按下,转去执行对应键盘子程序
	BTFSS	PORTB,5
	GOTO	JIAND					;键"D"按下,转去执行对应键盘子程序
	BTFSS	PORTB,6
	GOTO	JIANE					;键"E"按下,转去执行对应键盘子程序
	BTFSS	PORTB,7
	GOTO	JIANF					;键"F"按下,转去执行对应键盘子程序
	RETURN						;子程序返回
;----------------------------------------------------------------------------------------------
;对寄存器COUNT附相应值,用于主程序的查表转跳
;----------------------------------------------------------------------------------------------
JIAN0	CALL	SFANG					;调用键盘释放子程序
	MOVLW	00H					;寄存器COUNT赋值"0"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN1	CALL	SFANG					;调用键盘释放子程序
	MOVLW	01H					;寄存器COUNT赋值"1"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN2	CALL	SFANG					;调用键盘释放子程序
	MOVLW	02H					;寄存器COUNT赋值"2"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN3	CALL	SFANG					;调用键盘释放子程序
	MOVLW	03H					;寄存器COUNT赋值"3"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN4	CALL	SFANG					;调用键盘释放子程序
	MOVLW	04H					;寄存器COUNT赋值"4"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN5	CALL	SFANG					;调用键盘释放子程序
	MOVLW	05H					;寄存器COUNT赋值"5"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN6	CALL	SFANG					;调用键盘释放子程序
	MOVLW	06H					;寄存器COUNT赋值"6"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN7	CALL	SFANG					;调用键盘释放子程序
	MOVLW	07H					;寄存器COUNT赋值"7"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN8	CALL	SFANG					;调用键盘释放子程序
	MOVLW	08H					;寄存器COUNT赋值"8"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAN9	CALL	SFANG					;调用键盘释放子程序
	MOVLW	09H					;寄存器COUNT赋值"9"
	MOVWF	COUNT
	RETURN						;子程序返回
JIANA	CALL	SFANG					;调用键盘释放子程序
	MOVLW	0AH					;寄存器COUNT赋值"A"
	MOVWF	COUNT
	RETURN						;子程序返回
JIANB	CALL	SFANG					;调用键盘释放子程序
	MOVLW	0BH					;寄存器COUNT赋值"B"
	MOVWF	COUNT
	RETURN						;子程序返回
JIANC	CALL	SFANG					;调用键盘释放子程序
	MOVLW	0CH					;寄存器COUNT赋值"C"
	MOVWF	COUNT
	RETURN						;子程序返回
JIAND	CALL	SFANG					;调用键盘释放子程序
	MOVLW	0DH					;寄存器COUNT赋值"D"
	MOVWF	COUNT
	RETURN						;子程序返回
JIANE	CALL	SFANG					;调用键盘释放子程序
	MOVLW	0EH					;寄存器COUNT赋值"E"
	MOVWF	COUNT
	RETURN						;子程序返回
JIANF	CALL	SFANG					;调用键盘释放子程序
	MOVLW	0FH					;寄存器COUNT赋值"F"
	MOVWF	COUNT
	RETURN						;子程序返回
;----------------------------------------------------------------------------------------------
;按键释放子程序
;----------------------------------------------------------------------------------------------
SFANG	MOVLW	0F0H						
	MOVWF	PORTB
	MOVLW	B'11110000'				;屏蔽低4位
	ANDWF	PORTB,W
	SUBLW	B'11110000'
	BTFSS	STATUS,Z
	GOTO	SFANG
	CALL	DELAY10MS				;防干扰延时10MS
	MOVLW	0F0H
	MOVWF	PORTB
	MOVLW	B'11110000'				;屏蔽低4位
	ANDWF	PORTB,W
	SUBLW	B'11110000'
	BTFSS	STATUS,Z
	GOTO	SFANG
	RETURN						;子程序返回
;------------------------------------------------------------------------------------------
;显示驱动子程序
;------------------------------------------------------------------------------------------
XSHI	MOVLW	67H					;设置显示缓冲器的数据地址
	MOVWF	FSR
LOOP	MOVF	INDF,W					;取出数据
	CALL	BMA					;查询对应编码
	CALL	OUTXSH		      			;利用SPI方式输出编码数据
	DECF	FSR
	BTFSS	FSR,4					;直到8位数码全部输出
	GOTO	LOOP				
	RETURN						;子程序返回
;------------------------------------------------------------------------------------------
;SPI方式输出编码数据子程序
;------------------------------------------------------------------------------------------
OUTXSH	MOVWF	SSPBUF					;送至SSPBUF后开始逐位发送
LOOP1	BSF	STATUS,RP0         		        ;选择体1
	BTFSS	SSPSTAT,BF				;是否发送完毕
	GOTO	LOOP1					;否,继续查询
	BCF	STATUS,RP0				;发送完毕,选择体0
	MOVF	SSPBUF,W				;移空SSPBUF
	RETURN						;子程序返回		
;-------------------------------------------------------------------------
JKZT	MOVLW	0AH					;监控状态(数码管全黑)
	MOVWF	60H
	MOVWF	61H
	MOVWF	62H
	MOVWF	63H
	MOVWF	64H
	MOVWF	65H
	MOVWF	66H
	MOVLW	0AH
	MOVWF	67H
	RETURN						;子程序返回
;-------------------------------------------------------------------------
YIWEI	MOVF	62H,W					;移位
	MOVWF	63H
	MOVF	61H,W
	MOVWF	62H
	MOVF	60H,W
	MOVWF	61H
	RETURN						;子程序返回
;------------------------------------------------------------------------------------------	
BINTOB	MOVLW	10H					;BCD码转为二进制数子程序
	MOVWF	COUNT1
	CLRF	R1H
	CLRF	R1L
LPDTB	BCF	STATUS,C
	RRF	S1H
	RRF	S1Z
	RRF	S1L
	RRF	R1H
	RRF	R1L
	DECFSZ	COUNT1
	GOTO	ADJDCT
	RETLW	00H
ADJDCT	MOVLW	S1L
	MOVWF	FSR
	CALL	ADJBIN
	MOVLW	S1Z
	MOVWF	FSR
	CALL	ADJBIN
	MOVLW	S1H
	MOVWF	FSR
	CALL	ADJBIN
	GOTO	LPDTB
ADJBIN	MOVLW	03H
	BTFSC	INDF,3
	SUBWF	INDF
	MOVLW	30H
	BTFSC	INDF,7
	SUBWF	INDF
	RETLW	0
;----------------------------------------------------------------------------------------
;10MS延时子程序
;----------------------------------------------------------------------------------------
DELAY10MS	
	MOVLW	0FH					;外循环常数
	MOVWF	20H					;外循环寄存器
LO2	MOVLW	0FFH					;中循环常数
	MOVWF	21H					;中循环寄存器
L01	DECFSZ	21H,F					;中循环寄存器递减
	GOTO	L01					;继续中循环
	DECFSZ	20H,F					;外循环寄存器递减
	GOTO	LO2					;继续外循环
	RETURN						;返回
;-----------------------------------------------------------------------------------------
;1s延时子程序
;-----------------------------------------------------------------------------------------
DELAY1S MOVLW 	06H					;外循环常数
	MOVWF 	20H					;外循环寄存器
L0	MOVLW 	0EBH					;中循环常数
	MOVWF 	21H					;中循环寄存器
L1	MOVLW 	0ECH					;内循环常数
	MOVWF 	22H					;内循环寄存器
L2	DECFSZ 	22H,F					;内循环寄存器递减
	GOTO 	L2					;继续内循环
	DECFSZ 	21H,F					;中循环寄存器递减
	GOTO 	L1					;继续中循环
	DECFSZ 	20H,F					;外循环寄存器递减
	GOTO 	L0					;继续外循环
	RETURN						;返回
;------------------------------------------------------------------------------------------	
	END
;------------------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -