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

📄 实验24.asm

📁 实验24-脉冲信号发生器实验参考程序,基于PIC16F877A
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;------------------------------------------------------------------------------------------
;脉冲信号发生器实验参考程序(实验24.asm)
;------------------------------------------------------------------------------------------
LIST	P=16F877					;COUNTER、TEMP、COUNT变量已头文件中定义
INCLUDE"P16F877.INC"					;S1L、S1H、R1L、R1H变量已定义
;------------------------------------------------------------------------------------------
S1Z	EQU	30H					;定义源数据中8位
COUNT1	EQU	31H
	ORG	0000H					;系统复位地址
	NOP						;MPLAB需要
	GOTO	ST					;转到主程序
;------------------------------------------------------------------------------------------
;中断服务程序
;------------------------------------------------------------------------------------------
	ORG	0004H					;中断入口地址
	BCF	INTCON,RBIF
	CALL	JPSM					;键盘扫描
	CLRF	PORTC
	GOTO	POT
	RETFIE						;中断返回
;------------------------------------------------------------------------------------------
;主程序
;------------------------------------------------------------------------------------------	
ST	BSF	STATUS,RP0				;选择数据存储器体1
	CLRF	TRISD					;定义端口
	MOVLW	0F0H
	MOVWF	TRISB					;定义端口
	MOVLW	B'11010111'				;定义RC3/SCK、RC5/SDO输出、RC4/SDI输入
	MOVWF	TRISC 
	CLRF	SSPSTAT					;清除SMP、CKE位
	BCF	STATUS,RP0				;选择数据存储器体0
	BCF	STATUS,RP0				;选择体0
	MOVLW	B'00110010'             		;设置SSP控制方式:取FOSC/64、SPI主控、CKP=1
	MOVWF	SSPCON
	CLRF	COUNT					;清0
	CLRF	PORTC
	CALL	JKZT					;使数码管全暗
	CALL	XSHI					;调用显示子程序
POT	BCF	T1CON,TMR1ON
	MOVLW	B'10001000'				;使RB端口高4位产生电平变化中断(用于键盘)
	MOVWF	INTCON
HUI	MOVF	COUNT,W					;取出送W
	SUBLW	0FH					;查表保护措施
	BTFSS	STATUS,C				;是否有进位
	GOTO	HUI
	MOVF	COUNT,W					;取出送W
	ADDWF	PCL,F					;调用偏移量
	GOTO	XSH0					;进入按键'0'功能程序
	GOTO	XSH1					;进入按键'1'功能程序
	GOTO	XSH2					;进入按键'2'功能程序
	GOTO	XSH3					;进入按键'3'功能程序
	GOTO	XSH4					;进入按键'4'功能程序
	GOTO	XSH5					;进入按键'5'功能程序
	GOTO	XSH6					;进入按键'6'功能程序
	GOTO	XSH7					;进入按键'7'功能程序
	GOTO	XSH8					;进入按键'8'功能程序
	GOTO	XSH9					;进入按键'9'功能程序
	GOTO	XSHA					;进入按键'A'功能程序
	GOTO	XSHB					;进入按键'B'功能程序
	GOTO	XSHC					;进入按键'C'功能程序
	GOTO	XSHD					;进入按键'D'功能程序
	GOTO	XSHE					;进入按键'E'功能程序
	GOTO	XSHF					;进入按键'F'功能程序
;----------------------------------------------------------------------------------------------
;查表子程序
;----------------------------------------------------------------------------------------------
BMA	ADDWF	PCL,F				   	;加偏移量
	RETLW	3FH					;"0" 编码
	RETLW	06H					;"1" 编码
	RETLW	5BH					;"2" 编码
	RETLW	4FH					;"3" 编码
	RETLW	66H					;"4" 编码
	RETLW	6DH					;"5" 编码
	RETLW	7DH					;"6" 编码
	RETLW	07H					;"7" 编码
	RETLW	7FH					;"8" 编码
	RETLW	6FH					;"9" 编码
	RETLW	00H 		     			;"暗" 编码(0AH)	
	RETLW	40H					;"-" 编码(0BH)		
;----------------------------------------------------------------------------------------------
;16键盘功能程序
;----------------------------------------------------------------------------------------------
XSH0	CALL	YIWEI					;调用移位子程序
	MOVLW	.0					;数字0送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH1	CALL	YIWEI					;调用移位子程序
	MOVLW	.1					;数字1送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH2	CALL	YIWEI					;调用移位子程序
	MOVLW	.2					;数字2送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH3	CALL	YIWEI					;调用移位子程序
	MOVLW	.3					;数字3送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH4	CALL	YIWEI					;调用移位子程序
	MOVLW	.4					;数字4送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH5	CALL	YIWEI					;调用移位子程序
	MOVLW	.5					;数字5送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH6	CALL	YIWEI					;调用移位子程序
	MOVLW	.6					;数字6送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH7	CALL	YIWEI					;调用移位子程序
	MOVLW	.7					;数字7送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH8	CALL	YIWEI					;调用移位子程序
	MOVLW	.8					;数字8送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSH9	CALL	YIWEI					;调用移位子程序
	MOVLW	.9					;数字9送数据缓冲器最低位60H
	MOVWF	60H
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSHA	CALL	JKZT					;功能键"清零"
	CALL	XSHI					;调用显示
	GOTO	$					;原地等待
XSHB	CLRF	S1H					;功能键"确定"
	MOVF	60H,W		
	ANDLW	B'00001111'				;屏蔽高4位
	MOVWF	S1L
	SUBLW	0AH
	BTFSS	STATUS,Z				;是否为0AH
	GOTO	NEXTB1
	CLRF	S1L					;清0
NEXTB1	SWAPF	61H,W
	ANDLW	B'11110000'				;屏蔽低4位
	MOVWF	TEMP
	SUBLW	0A0H
	BTFSS	STATUS,Z				;是否为0A0H
	GOTO	NEXTB2
	CLRF	TEMP					;清0
NEXTB2	MOVF	TEMP,W
	ADDWF	S1L,1					;获得了S1L的数据
	MOVF	62H,W
	ANDLW	B'00001111'				;屏蔽高4位
	MOVWF	S1Z
	SUBLW	0AH
	BTFSS	STATUS,Z				;是否为0AH
	GOTO	NEXTB3
	CLRF	S1Z					;清0
NEXTB3	SWAPF	63H,W
	ANDLW	B'11110000'				;屏蔽低4位
	MOVWF	TEMP
	SUBLW	0A0H
	BTFSS	STATUS,Z				;是否为0A0H
	GOTO	NEXTB4
	CLRF	TEMP					;清0
NEXTB4	MOVF	TEMP,W
	ADDWF	S1Z,1					;获得了S1Z的数据
	CALL	BINTOB					;进行BCD码与二进制码的转换
	MOVF	R1L,W
	MOVWF	PORTD					;若D口接LED灯,可看到R1L的值
	CALL	DELAY1S		
	MOVF	R1H,W		
	MOVWF	PORTD					;若D口接LED灯,可看到R1H的值
	CALL	DELAY1S					;对于全部D口的操作仅仅是为了内部调试,读者可对此忽略
;----------------------------------------------------------------------------------------------
;输出波形功能程序
;----------------------------------------------------------------------------------------------
	BSF	STATUS,RP0				;选择数据存储器体1
	BCF	TRISC,2					;C2口为信号输出口
	BCF	STATUS,RP0				;选择数据存储器体0
	MOVF	R1H,W					;0064H=.100 即:100uS
	MOVWF	CCPR1H
	MOVF	R1L,W
	MOVWF	CCPR1L
	MOVLW	B'00000000'				;设置T1控制方式预分频比例为1:1
	MOVWF	T1CON					;内部定时方式
	MOVLW	B'00001000'				;如果匹配,C2为高电平
	MOVWF	CCP1CON
	BSF	T1CON,TMR1ON
CCPR	BTFSS	PIR1,CCP1IF
	GOTO	CCPR
	CLRF	TMR1H
	CLRF	TMR1L
	MOVLW	B'00000001'				;如果匹配,设置为低电平
	XORWF	CCP1CON					;(高低电平交互产生)
	BCF	PIR1,CCP1IF				;CCP1CON的低四位设置可查书
	GOTO	CCPR
	GOTO	$-1
XSHC	MOVLW	B'10101010'				;缺省(功能)
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'01010101'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	GOTO	HUI
XSHD	MOVLW	B'00000001'				;缺省(功能)
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'00000011'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'00000111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'00001111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'00011111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'00111111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'01111111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11111111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	GOTO	HUI
XSHE	MOVLW	B'10000000'				;缺省(功能)
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11000000'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11100000'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11110000'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11111000'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11111100'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11111110'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11111111'
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	GOTO	HUI
XSHF	MOVLW	B'10000001'				;缺省(功能)
	MOVWF	PORTD
	CALL	DELAY1S					;调用延时
	MOVLW	B'11000011'
	MOVWF	PORTD

⌨️ 快捷键说明

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