标题: C51单片机双工通信T1工作2方式 汇编程序 [打印本页]

作者: liuda    时间: 2015-1-23 16:21
标题: C51单片机双工通信T1工作2方式 汇编程序
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






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1