经过验证的源代码........
ORG 0000H
SJMP START
ORG 0023H ;串口中断
LJMP CHUAN
ORG 0030H
START: MOV SP,#70H ;设置SP
SETB EA ;总中断允许
SETB ES ;串口中断允许
MOV TMOD,#20H ;T1 方式2
MOV TL1,#0FDH ;晶振11.0592MHz,波特率9600。
MOV TH1,#0FDH ;8位重载
SETB TR1 ;启动 T1
MOV SCON,#40H ;串口模式1
SETB REN ;允许接收
mov R0,#40H ;设置RAM 40H为接受缓冲区首地址
MOV R1,#30H ;设置RAN 30H为发送缓冲区首地址
mov r5,#16 ;定义接受16个数据
mov r6,#16 ;定义发送16个数据
setb 20h.1 ;定义发送
sjmp $
;串口中断服务子程序
CHUAN: PUSH ACC
PUSH PSW
JNB RI,SEND ;判断是不是接收引起的中断如果是顺序执行,不是一
定是发送,转发送
MOV A,SBUF ;把SBUF里的数据收下来
mov @r0,a ;保存数据
inc r0 ;接受缓冲区加1
djnz r5,tiao ;判断是否接收齐16个数据
mov r0,#40h ;重新设置RAM 40H为接受缓冲区首地址
mov r5,#16 ;重新设置接受16个数据计数器
lcall renwu ;调用你的任务子程序,就是收完数想干什么?
TIAO: CLR RI ;清除发送中断标志为,等待下一次中断的到来
SJMP NEXT ;
SEND: CLR TI ;清除接收中断标志为,等待下一次中断的到来
CLR 20H.1
NEXT: POP PSW
POP ACC
RETI
;你的任务子程序
renwu: ...........
...........
...........
ret
;你的发送子程序,在发送前,你要写入你要发送的数据!
SOUT: MOV A,@R1
INC R1
MOV SBUF,A ;FA SONG SHU JU
JB 20H.1,$
SETB 20H.1
DJNZ R6,SOUT
MOV R1,#30H ;重新设置RAM 30H为接受缓冲区首地址
mov r6,#16 ;重新设置发送16个数据计数器
RET
帮人帮到底吧!我写的可以说够详细的了,你几乎可以拿来就用!你要仔细看懂了,然后用
到你的硬件上!
发表时间:2003年1月24日15:59:00