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

📄 buaa.asm

📁 福州大学单片机课程期末考试。利用PIC16F877的脉宽调制功能。用PROTELL、MPLAB编写
💻 ASM
字号:
;-----------------------------------------------------------
;题目2:产生占空比不同的波形,并实时显示开关值
;1002016 林锋杰
;-----------------------------------------------------------
	LIST      P=16F877
	#INCLUDE  "P16F877.INC"
REG	EQU		27H
	ORG 0000H
	NOP
;-----------------------------------------------------------
;主程序
;-----------------------------------------------------------
ST	BCF		STATUS,RP1
	BSF     STATUS,RP0		;置位STATUS寄存器PR0位,选择BANK1
	MOVLW	03H			
	MOVWF	TRISB			;输入:PB0,PB1
	CLRF	TRISD			;输出:PD

	BCF		STATUS,RP0		;清零STATUS寄存器PR0位,选择BANK0
	CLRF	PORTB
	CLRF	REG

ST0	CALL	LCD				;要求1:开关值在八段显示器上进行实时显示		
	CALL	PWM				;要求2:产生占空比为25%,50%,75%,100%的波形
	CALL	TEST1
	GOTO	ST0	

;-----------------------------------------------------------
;按键判断子程序(PORTB)
;-----------------------------------------------------------
TEST1
	MOVLW	03H	
	ANDWF	PORTB,W		
	BTFSC	STATUS,Z		;测试低2位是否有键输入
	GOTO	TEST1
	CALL	DEL10MS			;有键输入延时10ms		
	MOVLW	03H
	ANDWF	PORTB,W
	BTFSC	STATUS,Z
	GOTO	TEST1

	MOVF	PORTB,W
	MOVWF	REG				;保存键值到27H
	RETURN

;-----------------------------------------------------------
;脉宽调制子程序(PORTC)
;-----------------------------------------------------------
PWM
	BSF     STATUS,RP0 		
	MOVLW   00H
	MOVWF   TRISC
	MOVLW   63H  			;设置周期寄存器初值1/10000= 4 X (1/4000000) X (PR2+1) ,PR2=99,即63H
	MOVWF   PR2
	BCF     STATUS,RP0 		
	MOVF	REG,W			;设置脉宽寄存器初值
	CALL	TABLE			
	MOVWF   CCPR1L
	MOVLW   0CH				;设置CCP1为PWM工作方式
	MOVWF   CCP1CON 		
	CLRF    T2CON 			;设置TMR2预分频比1:1
	BSF     T2CON,TMR2ON 	;启动TMR2开始计时
	RETURN

TABLE
	ADDWF	PCL,F
	RETLW	.25				;不同占空比,25μs
	RETLW	.50				;50μs
	RETLW	.75				;75μs
	RETLW	.100			;100μs

;-----------------------------------------------------------
;LCD显示子程序(PORTD)
;-----------------------------------------------------------
LCD	MOVF	REG,W
	CALL	DISPLAY
	MOVWF	PORTD
	RETURN

DISPLAY
	ADDWF	PCL,F
	RETLW	3FH				;0编码
	RETLW	06H				;1编码
	RETLW	5BH				;2编码
	RETLW	4FH				;3编码

;-----------------------------------------------------------
;10ms延时子程序
;一条指令1μs,GOTO指令2μs,((3X256)+5)X13=10,049μs,接近10ms
;-----------------------------------------------------------
DEL10MS	MOVLW	0DH	;外循环常数13
	MOVWF	20H
L1	MOVLW	0FFH	;内循环常数256
	MOVWF	21H
L2	DECFSZ	21H
	GOTO	L2
	DECFSZ	20H		;0则间跳,返回
	GOTO	L1
	RETURN

;-----------------------------------------------------------
	END
;-----------------------------------------------------------

⌨️ 快捷键说明

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