用89C52单片机与PC串口通信,谁能帮忙写代码?要汇编语言的

功能:PC指定波特率传输N个字符,单片机接收后,发送回PC机
硬件:串口+MAX232+89C52

第1个回答  2008-04-29
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP SBR1
ORG 0070H
DISBUF EQU 30H ;用来存放发送的数据
WBUF EQU 40H ;校验数据存放
RBUF EQU 50H
MAIN:
MOV DISBUF,#0
MOV DISBUF+1,#0
MOV DISBUF+2,#0

MOV WBUF,#'W'
MOV WBUF+1,#'r'
MOV WBUF+2,#'o'
MOV WBUF+3,#'n'
MOV WBUF+4,#'g'
MOV WBUF+5,#0AH

MOV RBUF,#'R'
MOV RBUF+1,#'i'
MOV RBUF+2,#'g'
MOV RBUF+3,#'h'
MOV RBUF+4,#'t'
MOV RBUF+5,#0AH

MOV R0,#30H
MOV R3,#6
MOV TMOD,#20H ;定时器1方式2
MOV TH1,#0FDH
MOV TL1,#0FDH
MOV SCON,#50H ;工作方式1,允许接收
MOV PCON,#00H ;波特率不加倍
SETB EA
SETB ES
SETB TR1

DD: CALL DISPLAY
SJMP DD

;***********************中断服务程序************************
SBR1:
PUSH ACC
PUSH PSW
JNB RI,SEND
ACALL SIN ;RI=1为接收
SJMP S_END
SEND: ACALL SOUT ;调用发送子程序
S_END: POP PSW
POP ACC
RETI
;**********************发送子程序*************************
SOUT:
CLR TI
DJNZ R3,KK
MOV R0,#30H
MOV R3,#6
AJMP OUT_END
KK:
INC R0
MOV SBUF,@R0
OUT_END:RET
;***********************接收子程序*************************
SIN:
CLR RI
MOV A,SBUF
MOV @R0,A
INC R0
CJNE R0,#33H,SIN_END
CALL PANDUAN
MOV SBUF,@R0
SIN_END:
RET
;*******************************************************
PANDUAN:
MOV A,DISBUF
CJNE A,#01H,WRONG
MOV A,DISBUF+1
CJNE A,#08H,WRONG
MOV A,DISBUF+2
CJNE A,#06H,WRONG
MOV R0,#RBUF
AJMP PA_END
WRONG: MOV R0,#WBUF
PA_END: RET

;***********************显示程序*************************
DISPLAY:
MOV R1,#DISBUF
MOV DPTR,#TAB
MOV R2,#80H
MOV R4,#3
LOOP:
MOV A,@R1
MOVC A,@A+DPTR
MOV P0,A
SETB P1.3
CLR P1.3
MOV P0,R2
SETB P1.2
CLR P1.2
CALL DELAY
MOV P0,#0
SETB P1.2
CLR P1.2
INC R1
MOV A,R2
RR A
MOV R2,A
DJNZ R4,LOOP
RET
;***************************延时程序**************************
DELAY:
MOV R7,#255
DJNZ R7,$
RET
;************************共阳数码管码表***************************
TAB:
DB 0C0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H
END
功能是:由PC发三个数到单片机,单片机判断是否等于186如果相等向PC机发一个right! 否则发一个wrong!
第2个回答  2008-04-28
我的博客有上现成的,你可以去参考一下.本回答被提问者采纳