MAIN:MOV TMOD,#20H ;将定时器T1设为工作方式2(TMOD的M1=1,M0=0 MOV TL1,#0F4H ;设T1的初值为224 MOV TH1,#0F4H ;设T1的重装值为224 SETB TR1 ;将寄存器TCON的TR1位置1,启动T1开始计数 MOV SCON,#50H ;将串行通信口设为工作方式1,并允许接收(SM0=0,SM01=1,数据接收控制位REN=1 MOV R0,#20H ;将数据20H送入寄存器R0 MOV R1,#40H ;将数据40H送入寄存器R1 SETB ES ;将寄存器IE的ES位置1(串行通信口中断允许位,=1允许通过 SETB EA ;将寄存器IE的EA位置1(总中断允许位,=1开关闭合,即开启总中断 ACALL SOUT ;跳 LOOP:SJMP LOOP ;以下为中断子程序 ORG 0023H ;下一指令地址为0023H(串行通信口控制寄存器SCON的位TI发送中断标志RI接收中断标志入口=1时有中断 AJMP SRR1 ;有中断请求跳 SRR1:JNB RI,SEND ;接收中断标志位RI=0证明是TI有中断,跳转并将TI清0,否则下一步 ACALL SIN ;跳转将RI清0 SJMP NEXT ;跳 SEND:ACALL SOUT ;RI=0时跳到此,并跳到将TI清0处 NEXT:RETI ;返回LOOP处 ;发下为发送子程序 SOUT:CLR TI ;将TI清0 MOV A,@R0 ;将R0中的地址所指的单元中的数据送A INC R0 ;将R0加1 MOV SBUF,A ;将A中的值送入缓冲器SUBF,同时发送SBUF中的数据 RET ;子程序返回(即LOOP:SJMP LOOP处 ;以下为接收子程序 SIN:CLR RI ;将SCON的RI位清0 MOV A,SBUF ;将接收SUBF中的数据送入A中 MOV @R1,A ;将A中数据送R1中的地址所指的单元中 INC R1 ;将R1加1 RET ;子程序返回(即SJMP NEXT处 END
|