; ***************************************************************************
;文件名“6_2OUT.ASM”
;功能:单片机间的串口通信(发送端)。
; ***************************************************************************
STATUSEQU03H;定义状态寄存器地址
PORTCEQU07H;定义端口C的数据寄存器地址
PORTDEQU08H;定义端口D的数据寄存器地址
TRISCEQU87H;定义端口C的方向寄存器
TRISDEQU88H;定义端口D的方向寄存器
INTCONEQU0BH;定义INTCON控制寄存器
SPBRGEQU99H;定义SPBRG寄存器
RCSTAEQU18H;定义RCSTA寄存器
TXREGEQU19H;定义TXREG寄存器
TXSTAEQU98H;定义TXSTA寄存器
RCREGEQU1AH;定义RCREG寄存器
PIR1EQU0CH;定义第一外设中断标志寄存器
SPENEQU07H;定义SPEN标志位
TXENEQU05H;定义TXEN标志位
BRGHEQU02H;定义BRGH标志位
PIR1EQU0CH;定义PIR1标志位
TXIFEQU04H;定义TXIF标志位
CRENEQU04H;定义CREN标志位
RCIFEQU05H;定义RCIF标志位
RP1EQU06H;定义状态寄存器中的页选位RP1
RP0EQU05H;定义状态寄存器中的页选位RP0
SENDBUFFEQU20H;定义SENDBUFF
SENDNUMEQU21H;定义SENDNUM
SENDCODEEQU22H;定义SENDCODE
DLYCNTLEQU23H;定义DLYCNTL
DLYCNT2EQU24H;定义DLYCNT2
DATA1EQU25H;定义外循环变量
DATA2EQU26H;定义内循环变量
RCODEEQU27H;定义RCODE
TEMPEQU28H;定义TEMP输出变量
COUNT1EQU2FH;定义存储外循环次数的变量
COUNT2EQU0FFH;定义存储内循环次数的变量
; ***************************主程序开始*********************************
ORG00H
NOP;空指令
GOTO MAIN
; ********************************开始*****************************
MAIN
CALL INITIAL;调初始化子程序
LOOP
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
BSFTXSTA,TXEN;发送使能
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
MOVFTEMP,0;在端口D显示TEMP
MOVWFPORTD;
BSFRCSTA,CREN;接受使能
MOVLW1;
ADDWFRCODE,1;设置受到数据后自加1
MOVFTEMP,0;将TEMP装入TXREG
MOVWFTXREG;以发送
RWAIT
BTFSSPIR1,RCIF;是否有接受
GOTORWAIT;否,继续监视
INCFTEMP;TEMP自加1
CALLDELAY;延时1s
CALLDELAY;调用DELAY一次延时0.2s
CALLDELAY;
CALLDELAY;
CALLDELAY;
GOTOLOOP;继续进行下一次传输
; ***************************************************************************
; ***************************初始化子程序开始*********************************
INITIAL
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
MOVLW16H;设置波特率发生器
MOVWFSPBRG;
MOVLW0C0H;设置端口C
MOVWFTRISC;
BCFSTATUS,RP0;转到体0
BCFSTATUS,RP1;
CLRFRCSTA;设置接受状态兼控制寄存器
;异步接受
BSFRCSTA,SPEN;接受使能
CLRFPIR1;清中断使能
BSFSTATUS,RP0;转到体1
BCFSTATUS,RP1;
CLRFTXSTA;设置发送状态兼控制寄存器
;异步接受
BSFTXSTA,BRGH;发送使能
MOVLW00H;TEMP置为0
MOVWFTEMP;
RETURN
; ***************************初始化子程序结束*********************************
; ***************************延时子程序****************************************
DELAY
MOVLWCOUNT1;设置外部循环的次数
MOVWFDATA1;
LOOP1
MOVLWCOUNT2;设置内部循环的次数
MOVWFDATA2;
LOOP2
DECFSZDATA1,1;内部循环变量自减1,为0则跳转
GOTOLOOP2;
DECFSZDATA2,1;外部循环变量自减1,为0则跳转
GOTOLOOP1;
RETURN;返回主程序
; ***************************延时子程序结束*************************************
; ***************************主程序结束*************************************
END