📄 buaa.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 + -