; ***************************************************************************
;文件名“6_1.ASM”
; ***************************************************************************
STATUSEQU03H;定义状态寄存器地址
PORTBEQU06H;定义端口B的数据寄存器地址
PORTCEQU07H;定义端口C的数据寄存器地址
PORTDEQU08H;定义端口D的数据寄存器地址
TRISBEQU86H;定义端口B的方向寄存器
TRISCEQU87H;定义端口C的方向寄存器
TRISDEQU88H;定义端口D的方向寄存器
RP1EQU06H;定义状态寄存器中的页选位RP1
RP0EQU05H;定义状态寄存器中的页选位RP0
DATA1EQU20H;定义外循环变量
DATA2EQU21H;定义内循环变量
COUNT1EQU0AH;定义存储外循环次数的变量
COUNT2EQU21H;定义存储内循环次数的变量
; ***************************主程序开始*********************************
ORG00H
NOP;空指令
GOTO MAIN
; ********************************主程序开始*****************************
MAIN
CALL INITIAL;调初始化子程序
LP
BCFPORTB,6;BUSY=0
BTFSCPORTB,7;SROBE=0?
GOTONEXT1;否,没有数据输入
GOTONEXT2;是,有数据输入
NEXT1
GOTONEXT3;
NEXT2
BCFPORTB,6;BUSY=1
CALLDELAY;延时1ms
MOVFPORTC;
MOVWFPORTD;
CALLDELAY;延时5ms
CALLDELAY;
CALLDELAY;
CALLDELAY;
CALLDELAY;
NEXT3
GOTOLP;
; ***************************************************************************
; ***************************初始化子程序开始*********************************
INITIAL
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
MOVLW00H;将端口C设为输入
MOVWFTRISC;
MOVLW0FFH;将端口D设为输出
MOVWFTRISD;
MOVLW80H;将端口RB7设为输入
MOVWFTRISB;将端口RB6设为输出
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
RETURN
; ***************************初始化子程序结束*********************************
; ***************************延时子程序****************************************
DELAY
MOVLWCOUNT1;设置外部循环的次数
MOVWFDATA1;
LOOP1
MOVLWCOUNT2;设置内部循环的次数
MOVWFDATA2;
LOOP2
DECFSZDATA1,1;内部循环变量自减1,为0则跳转
GOTOLOOP2;
DECFSZDATA2,1;外部循环变量自减1,为0则跳转
GOTOLOOP1;
RETURN;返回主程序
; ***************************延时子程序结束*************************************
; ***************************主程序结束*************************************
END