; ***************************************************************************
;文件名“5_3.ASM”
;功能:步进电机的控制。
; ***********************************************************************
PCLEQU02H;定义PCL寄存器地址
STATUSEQU03H;定义状态寄存器地址
PORTCEQU07H;定义端口C的数据寄存器地址
PORTDEQU08H;定义端口D的数据寄存器地址
TRISCEQU87H;定义端口C的方向寄存器
TRISDEQU88H;定义端口D的方向寄存器
INTCONEQU0BH;定义INTCON控制寄存器
CCP1IFEQU2H;定义CCP1IF
CCP1CONEQU17H;定义CCP1CON控制寄存器
CCPR1LEQU0EH;定义CCPR1L控制寄存器
CCPR1HEQU0FH;定义CCPR1H控制寄存器
PIR1EQU0CH;定义第一外设中断标志寄存器
PIR2EQU0DH;定义第二外设中断标志寄存器
TMR1LEQU0EH;定义TMR1L
TMR1HEQU0FH;定义TMR1F
ADRESHEQU1EH;定义ADRESH
ADCON0EQU1FH;定义数模转换器ADC的寄存器
PIE1EQU8CH;定义第一外设中断屏蔽寄存器
PIE2EQU8DH;定义第二外设中断屏蔽寄存器
ADCON1EQU9FH;定义数模转换器ADC的寄存器
T1CONEQU10H;定义TIMER1控制寄存器
RP1EQU06H;定义状态寄存器中的页选位RP1
RP0EQU05H;定义状态寄存器中的页选位RP0
ZEQU02H;定义状态寄存器中的0标志位Z
CEQU00H;定义状态寄存器中的标志位C
TMR1IFEQU00H;定义第二外设中断屏蔽寄存器中的TMR1IF
DATA1EQU20H;定义外循环变量
DATA2EQU21H;定义内循环变量
TEMPEQU22H;定义临时变量存储端口D的输入
W_TEMPEQU25H;定义临时变量W_TEMP
S_TEMPEQU26H;定义临时变量S_TEMP
SCALEREQU27H;定义临时变量SCLEAR
AD_STATUSEQU28H;定义临时变量AD_STATUS
SIGNEQU22H;定义临时变量SIGN
SUNEQU24H;定义临时变量SUN
INDEXEQU25H;定义临时变量INDEX
W_BUFEQU26H;定义临时变量W_BUF
VALUEEQU27H;定义临时变量VALUE
NUMEQU28H;定义临时变量NUM
COUNT1EQU1AH;定义存储外循环次数的变量
COUNT2EQU0FFH;定义存储内循环次数的变量
; ***************************主程序开始*********************************
ORG00H
NOP;空指令
GOTO MAIN
ORG04H;中断向量的地址为04H
GOTOINT;跳到中断子程序
; *****************************中断子程序开始****************************
INT
MOVWFW_TEMP;W寄存器的内容存储
SWAPFSTATUS,0;将STATUS寄存器中高低字节交换
MOVWFS_TEMP;交换后的结果存入S_TEMP
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
BTFSCPIR1,TMR1IF;察看是否TMR1中断
GOTONEXT1;是,
GOTONEXT2;否
NEXT1
BTFSCSIGN,0;察看SIGN的第0位是否为0
GOTONEXT3;否
BCFPORTC,2;是
NEXT3
COMFSIGN,1;SIGN取反
BCFPIR1,TMR1IF;清中断标志位
CLRFTMR1L;对TMR1重新输入值0F548H
MOVLW0F5H;
MOVWFTMR1H;
MOVLW48H;
MOVWFTMR1L;
NEXT2
SWAPFS_TEMP,0;中断前的STATUS的内容,重新装入
MOVWFSTATUS;
SWAPFW_TEMP,1;中断前的W的内容重新装入
SWAPFW_TEMP,0;
RETFIE
; *******************************中断子程序结束**************************
; ********************************主程序开始*****************************
MAIN
CALL INITIAL;调初始化子程序
LOOP
CALLAAA;调用AAA输出子程序
NOP
S_0
BTFSSSIGN,0;SIGN为1,则转到S_1
GOTOS_0;
S_1
BTFSCSIGN,0;SIGN为0,则转到LOOP
GOTOS_1;
GOTOLOOP;
; ***************************************************************************
; ***************************初始化子程序开始*********************************
INITIAL
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
CLRFW_TEMP;将各个临时寄存器清零
CLRFW_BUF;
CLRFSIGN;
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
BCFTRISC,2;将端口C的RC2设为输出
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
CLRFT1CON;清T1CON
MOVLW0F5H;将TMR1设为0F548H
MOVWFTMR1H;
MOVLW048H;
MOVWFTMR1L;
CLRFINTCON;清中断标志
BSFINTCON,6;中断使能
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
BSFPIE1,0;TMR1中断使能
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
CLRFPIR1;清中断标志
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
BSFT1CON,0;开TMR1
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
BSFINTCON,7;开第三梯队的中断