; ***************************************************************************
;文件名“5_4.ASM”
;功能:输出脉冲宽度为20s,
;占空比为50%的方波,
;驱动继电器开关。
; ***************************************************************************
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
DATA1EQU20H;定义外循环变量
DATA2EQU21H;定义内循环变量
TEMPEQU22H;定义临时变量存储端口D的输入
W_TEMPEQU25H
STATUS_TEMPEQU26H
SCALEREQU27H
AD_STATUSEQU28H
COUNT1EQU1AH;定义存储外循环次数的变量
COUNT2EQU0FFH;定义存储内循环次数的变量
; ***************************主程序开始*********************************
ORG00H
NOP;空指令
GOTO MAIN
ORG04H;中断向量的地址为04H
GOTOINT;跳到中断子程序
; *****************************中断子程序开始****************************
INT
MOVWFW_TEMP;W寄存器的内容存储
SWAPFSTATUS,0;将STATUS寄存器中高低字节交换
MOVWFSTATUS_TEMP;交换后的结果存入STATUS_TEMP
MOVLW80H;让端口D的第8位的输出翻转
XORWFPORTD,1;
BTFSCPIR1,CCP1IF;清除中断标志位
SWAPFSTATUS_TEMP,0;中断前的STATUS的内容,重新装入
MOVWFSTATUS;
SWAPFW_TEMP,1;中断前的W的内容重新装入
SWAPFW_TEMP,0;
RETFIE
; *******************************中断子程序结束**************************
; ********************************主程序开始*****************************
MAIN
CALL INITIAL;调初始化子程序
LOOP
NOP
NOP
CALLDELAY;调10ms定时子程序
CALLDELAY;调10ms定时子程序
GOTOLOOP;
; ***************************************************************************
; ***************************初始化子程序开始*********************************
INITIAL
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
MOVLW0FFH;将端口C设为输入
MOVWFTRISC;
MOVLW00H;将端口D设为输出
MOVWFTRISC;
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
MOVLW4EH;将CCPR1设为4E20H
MOVWFCCPR1H;
MOVLW20H;
MOVWFCCPR1L;
MOVLW0AH;设置TMR1预分频为1:1
MOVWFT1CON;设置时钟为外部时钟
;使能振荡器
MOVLW0BH;
MOVWFCCP1CON;
CLRFTMR1H;清TMR1H
CLRFTMR1L;清TMR1L
CLRFINTCON;清INTCON
BSFT1CON,0;开启TMR1
BSFINTCON,1;开中断的总开关
RETURN
; ***************************初始化子程序结束*********************************
; ***************************延时子程序****************************************
DELAY
MOVLWCOUNT1;设置外部循环的次数
MOVWFDATA1;
LOOP1
MOVLWCOUNT2;设置内部循环的次数
MOVWFDATA2;
LOOP2
DECFSZDATA1,1;内部循环变量自减1,为0则跳转
GOTOLOOP2;
DECFSZDATA2,1;外部循环变量自减1,为0则跳转
GOTOLOOP1;
RETURN;返回主程序
; ***************************延时子程序结束*************************************
; ***************************主程序结束*************************************
END