📄 1_5.asm
字号:
;------------------------------------------
;文件名"1_5.ASM"
;作者:求是科技
;功能:实现了简单的I/O扩展
;------------------------------------------
STATUS EQU 03H ;定义状态寄存器地址
PORTA EQU 05H ;定义端口A的数据寄存器地址
TRISA EQU 85H ;定义端口A的方向寄存器
PORTB EQU 06H ;定义端口B的数据寄存器地址
TRISB EQU 86H ;定义端口B的方向寄存器
RP1 EQU 06H ;定义状态寄存器中的页选位RP1
RP0 EQU 05H ;定义状态寄存器中的页选位RP0
STATUS_IN EQU 30H ;存放输入的状态值
DATA1 EQU 20H ;定义外循环变量
DATA2 EQU 21H ;定义内循环变量
TEMP EQU 22H ;定义临时变量存储端口D的输入
COUNT1 EQU 130 ;定义存储外循环次数的变量
COUNT2 EQU 0FFH ;定义存储内循环次数的变量
;------------------------------------------
ORG 00H ;
GOTO MAIN ;
;-------------------主程序开始--------------------
MAIN
NOP ;设置一条ICD必须的空操作
;-------------------初始化------------------------
BSF STATUS,RP0 ;转到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;将00H送到W
MOVWF TRISA ;设置PORTA的方向为输出
MOVLW 0FFH ;将FFH送到W
MOVWF TRISB ;设置PORTB的方向为输入
BCF STATUS,RP0 ;转到BANK0
BCF STATUS,RP1 ;
;-------------------初始化结束---------------------
MOVLW 0FDH ;将FDH送到W
MOVWF PORTA ;使能74LS244,准备读入状态值
MOVF PORTB,0 ;读入输入的状态值
MOVWF STATUS_IN ;将读入的值存到30H中
MOVLW 0FFH ;将FB送到W
MOVWF PORTA ;准备输出状态值
BSF STATUS,RP0 ;转到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;将00H送到W
MOVWF TRISB ;设置PORTB的方向为输出
BCF STATUS,RP0 ;转到BANK0
BCF STATUS,RP1 ;
LOOP
MOVF STATUS_IN,0 ;将状态值读到W
MOVWF PORTB ;按获得的状态值,点亮LED
CALL DELAY ;延时
CLRF PORTB ;熄灭所有的LED
CALL DELAY ;延时
GOTO LOOP ;循环
;---------------延时子程序-------------------
DELAY
MOVLW COUNT1 ;设置外部循环的次数
MOVWF DATA1 ;
LOOP1
MOVLW COUNT2 ;设置内部循环的次数
MOVWF DATA2 ;
LOOP2
DECFSZ DATA2,1 ;内部循环变量自减1,为0则跳转
GOTO LOOP2 ;
DECFSZ DATA1,1 ;外部循环变量自减1,为0则跳转
GOTO LOOP1 ;
RETURN ;返回主程序
;---------------延时子程序结束-------------------
END
;---------------程序结束-------------------
;------------------------------------------
;文件名"1_5.ASM"
;作者:求是科技
;功能:在实现了简单的I/O扩展
;------------------------------------------
STATUS EQU 03H ;定义状态寄存器地址
PORTA EQU 05H ;定义端口A的数据寄存器地址
TRISA EQU 85H ;定义端口A的方向寄存器
PORTB EQU 06H ;定义端口B的数据寄存器地址
TRISB EQU 86H ;定义端口B的方向寄存器
RP1 EQU 06H ;定义状态寄存器中的页选位RP1
RP0 EQU 05H ;定义状态寄存器中的页选位RP0
STATUS_IN EQU 30H ;存放输入的状态值
DATA1 EQU 20H ;定义外循环变量
DATA2 EQU 21H ;定义内循环变量
TEMP EQU 22H ;定义临时变量存储端口D的输入
COUNT1 EQU 130 ;定义存储外循环次数的变量
COUNT2 EQU 0FFH ;定义存储内循环次数的变量
;------------------------------------------
ORG 00H ;
GOTO MAIN ;
;-------------------主程序开始--------------------
MAIN
NOP ;设置一条ICD必须的空操作
;-------------------初始化------------------------
BSF STATUS,RP0 ;转到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;将00H送到W
MOVWF TRISA ;设置PORTA的方向为输出
MOVLW 0FFH ;将FFH送到W
MOVWF TRISB ;设置PORTB的方向为输入
BCF STATUS,RP0 ;转到BANK0
BCF STATUS,RP1 ;
;-------------------初始化结束---------------------
MOVLW 0FDH ;将FDH送到W
MOVWF PORTA ;使能74LS244,准备读入状态值
MOVF PORTB,0 ;读入输入的状态值
MOVWF STATUS_IN ;将读入的值存到30H中
MOVLW 0FFH ;将FB送到W
MOVWF PORTA ;准备输出状态值
BSF STATUS,RP0 ;转到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;将00H送到W
MOVWF TRISB ;设置PORTB的方向为输出
BCF STATUS,RP0 ;转到BANK0
BCF STATUS,RP1 ;
LOOP
MOVF STATUS_IN,0 ;将状态值读到W
MOVWF PORTB ;按获得的状态值,点亮LED
CALL DELAY ;延时
CLRF PORTB ;熄灭所有的LED
CALL DELAY ;延时
GOTO LOOP ;循环
;---------------延时子程序-------------------
DELAY
MOVLW COUNT1 ;设置外部循环的次数
MOVWF DATA1 ;
LOOP1
MOVLW COUNT2 ;设置内部循环的次数
MOVWF DATA2 ;
LOOP2
DECFSZ DATA2,1 ;内部循环变量自减1,为0则跳转
GOTO LOOP2 ;
DECFSZ DATA1,1 ;外部循环变量自减1,为0则跳转
GOTO LOOP1 ;
RETURN ;返回主程序
;---------------延时子程序结束-------------------
END
;---------------程序结束-------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -