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
|