📄 1_4.asm
字号:
; **********************************************
;文件名“1_4.ASM”
;作者:求是科技
;功能:在程序中调用定时器TMR0实现的延时程序完成点灯程序
; **********************************************
STATUS EQU 03H ;定义状态寄存器地址
PORTD EQU 08H ;定义端口D的数据寄存器地址
TRISD EQU 88H ;定义端口D的方向寄存器
RP1 EQU 06H ;定义状态寄存器中的页选位RP1
RP0 EQU 05H ;定义状态寄存器中的页选位RP0
TMR0 EQU 01H ;定义定时器/计数器0寄存器地址
PCL EQU 02H ;定义程序计数器低字节寄存器地址
POTION_REG EQU 81H ;定义选项寄存器地址
INTCON EQU 0BH
DATA1 EQU 6 ;定义TMR0寄存器初始置(250=256-6)
COUNT EQU 20H ;存放延时次数
; *****************************************************
ORG 00H ;
GOTO MAIN ;
; ***********************主程序开始***********************
MAIN
NOP ;设置一条ICD必须的空操作
; ***********************初始化***********************
BSF STATUS,RP0 ;转到体1
BCF STATUS,RP1 ;
MOVLW 07H ;设置选项分频寄存器内容
MOVWF POTION_REG ;分频值设为“1:256”
MOVLW 00H ;将00H送到W
MOVWF TRISD ;设置端口D为输出
BCF STATUS,RP0 ;转到体0
BCF STATUS,RP1 ;
; ***********************初始化结束***********************
START
MOVLW 0FFH ;将FFH送到W
MOVWF PORTD ;点亮端口D上所有的灯
CALL DELAY ;延时1280ms
MOVLW 0FH ;将0FH送到W
MOVWF PORTD ;只点亮端口D低4位上所有的灯
CALL DELAY ;延时1280ms
MOVLW 0F0H ;将F0H送到W
MOVWF PORTD ;只点亮端口D高4位上所有的灯
CALL DELAY ;延时1280ms
MOVLW 0FH ;将0FH送到W
MOVWF PORTD ;灭端口D上所有的灯
CALL DELAY ;延时1280ms
GOTO START ;循环
; ***********************延时子程序***********************
DELAY
MOVLW 14H ;设置循环延时64ms的次数为20次
MOVWF COUNT ;
LOOP1
BCF INTCON,2 ;清除TMR0溢出标志位
MOVLW DATA1 ;TMRO赋初值
MOVWF TMR0 ;启动定时计数
LOOP
BTFSS INTCON,2 ;检测TMR0溢出标志位
GOTO LOOP ;没有溢出,继续检测
DECFSZ COUNT ;判断计数次数是否满20次
;如果没到减1继续,否则返回主程序
GOTO LOOP1 ;计数没结束,继续
RETURN ;返回主程序
; ***********************延时子程序结束***********************
; ***********************程序结束***********************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -