MAIN:MOV TMOD,#20H ;將定時器T1設(shè)為工作方式2(TMOD的M1=1,M0=0 MOV TL1,#0F4H ;設(shè)T1的初值為224 MOV TH1,#0F4H ;設(shè)T1的重裝值為224 SETB TR1 ;將寄存器TCON的TR1位置1,啟動T1開始計數(shù) MOV SCON,#50H ;將串行通信口設(shè)為工作方式1,并允許接收(SM0=0,SM01=1,數(shù)據(jù)接收控制位REN=1 MOV R0,#20H ;將數(shù)據(jù)20H送入寄存器R0 MOV R1,#40H ;將數(shù)據(jù)40H送入寄存器R1 SETB ES ;將寄存器IE的ES位置1(串行通信口中斷允許位,=1允許通過 SETB EA ;將寄存器IE的EA位置1(總中斷允許位,=1開關(guān)閉合,即開啟總中斷 ACALL SOUT ;跳 LOOP:SJMP LOOP ;以下為中斷子程序 ORG 0023H ;下一指令地址為0023H(串行通信口控制寄存器SCON的位TI發(fā)送中斷標(biāo)志RI接收中斷標(biāo)志入口=1時有中斷 AJMP SRR1 ;有中斷請求跳 SRR1:JNB RI,SEND ;接收中斷標(biāo)志位RI=0證明是TI有中斷,跳轉(zhuǎn)并將TI清0,否則下一步 ACALL SIN ;跳轉(zhuǎn)將RI清0 SJMP NEXT ;跳 SEND:ACALL SOUT ;RI=0時跳到此,并跳到將TI清0處 NEXT:RETI ;返回LOOP處 ;發(fā)下為發(fā)送子程序 SOUT:CLR TI ;將TI清0 MOV A,@R0 ;將R0中的地址所指的單元中的數(shù)據(jù)送A INC R0 ;將R0加1 MOV SBUF,A ;將A中的值送入緩沖器SUBF,同時發(fā)送SBUF中的數(shù)據(jù) RET ;子程序返回(即LOOP:SJMP LOOP處 ;以下為接收子程序 SIN:CLR RI ;將SCON的RI位清0 MOV A,SBUF ;將接收SUBF中的數(shù)據(jù)送入A中 MOV @R1,A ;將A中數(shù)據(jù)送R1中的地址所指的單元中 INC R1 ;將R1加1 RET ;子程序返回(即SJMP NEXT處 END
|