; ***************************************************************************
;文件名“5_2.ASM”
;功能:输出锯齿波。
; ***************************************************************************
STATUSEQU03H;定义状态寄存器地址
PORTCEQU07H;定义端口C的数据寄存器地址
PORTDEQU08H;定义端口D的数据寄存器地址
TRISCEQU87H;定义端口C的方向寄存器
TRISDEQU88H;定义端口D的方向寄存器
RP1EQU06H;定义状态寄存器中的页选位RP1
RP0EQU05H;定义状态寄存器中的页选位RP0
ZEQU02H;定义状态寄存器中的0标志位Z
DCEQU01H;定义状态寄存器中的辅助进/借位标志位DC
CEQU00H;定义状态寄存器中的进/借位标志位C
DATA1EQU20H;定义外循环变量
DATA2EQU21H;定义内循环变量
TEMPEQU22H;定义临时变量存储端口D的输入
TEMPHEQU23H;定义计数器变量H
TEMPLEQU24H;定义计数器变量L
W_TEMPEQU25H
STATUS_TEMPEQU26H
SCALEREQU27H
AD_STATUSEQU28H
COUNT1EQU03H;定义存储外循环次数的变量
COUNT2EQU04H;定义存储内循环次数的变量
; ***************************主程序开始*********************************
ORG00H
NOP;空指令
GOTO MAIN
; ********************************主程序开始*****************************
MAIN
CALL INITIAL;调初始化子程序
LP_UP
INCFTEMPL;TEMPL自加1
BTFSCSTATUS,C;判断有没有进位
GOTONEXT1;
GOTONEXT2;
NEXT1
INCFTEMPH;TEMPH自加1
BTFSSSTATUS,DC;判断有没有辅助进位
GOTONEXT2;
MOVLW0FH;将TEMPH置位
MOVWFTEMPH;
MOVLW0FFH;将TEMPL置位
MOVWFTEMPL;
CLRFTEMPL;已经达到最大值,
CLRFTEMPH;先将计数器进行清零操作
GOTOLP_DOWN;接下来进行自减操作
NEXT2
NOP
CALLDELAY;调延时子程序
MOVFTEMPL;在端口C输出低8位
MOVWFPORTC;
MOVLW80H;
ADDWFTEMPH,1;TEMP自加80H,使ADC芯片不会产生误操作
MOVFTEMPH;在端口D输出高4位
BSFPORTD,7;在端口RD7输出写入脉冲
BCFPORTD,7;
BSFPORTD,7;
MOVLW80H;
SUBWFTEMPH,1;TEMP自减80H
GOTOLP_UP;
LP_DOWN
DECFTEMPL;TEMPL自减1
BTFSCSTATUS,C;判断有没有借位
GOTONEXT3;
GOTONEXT4;
NEXT3
DECFTEMPH;TEMPH自减1
BTFSSSTATUS,Z;判断有没有辅助借位
GOTONEXT4;
CLRFTEMPL;先将计数器进行清零操作
CLRFTEMPH;
GOTOLP_UP;接下来进行自加操作
NEXT4
NOP
CALLDELAY;调延时子程序
MOVFTEMPL;在端口C输出低8位
MOVWFPORTC;
MOVLW80H;
ADDWFTEMPH,1;TEMP自加80H,使ADC芯片不会产生误操作
MOVFTEMPH;在端口D输出高4位
BSFPORTD,7;在端口RD7输出写入脉冲
BCFPORTD,7;
BSFPORTD,7;
MOVLW80H;
SUBWFTEMPH,1;TEMP自减80H
GOTOLP_DOWN;
; ***************************************************************************
; ***************************初始化子程序开始*********************************
INITIAL
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
MOVLW0FFH;将端口C设为输入
MOVWFTRISC;
MOVLW0FFH;将端口D设为输出
MOVWFTRISD;
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
CLRFTEMPL;清TEMPL
CLRFTEMPH;清TEMPH
RETURN
; ***************************初始化子程序结束*********************************
; ***************************延时子程序****************************************
DELAY
MOVLWCOUNT1;设置外部循环的次数
MOVWFDATA1;
LOOP1
MOVLWCOUNT2;设置内部循环的次数
MOVWFDATA2;
LOOP2
DECFSZDATA1,1;内部循环变量自减1,为0则跳转
GOTOLOOP2;
DECFSZDATA2,1;外部循环变量自减1,为0则跳转
GOTOLOOP1;
RETURN;返回主程序
; ***************************延时子程序结束*************************************
; ***************************主程序结束*************************************
END