dbbyzam 发表于 2010-2-2 21:23:52

请帮个忙看下

ORG 0000B
JMP MAIN

ORG 23H ;串行中断入口地址
JMP COM_INT ;串行中断服务程序

ORG 30H
MAIN:
MOV R0,#00H
MOV SP,#30H ;设置堆栈
LCALL REST ;初始化
LCALL COMM ;串口初始化
MOV P1,#00H
LCALL DISP ;原地等待
REST:
MOV P0,#00H ;禁止数码管显示
MOV P2,#255 ;
MOV P1,#255 ;禁止LED显示
RET ;返回
COMM:
MOV TMOD,#20H ;设置定时器T1工作方式2
MOV TL1,#0F2H ;定时器计数社会,波特率
MOV TH1,#0F2h ;定时器重装值
SETB EA ;允许总的中断
SETB ES ;允许串口中断
MOV PCON,#00H ;波特率不倍增
MOV SCON,#50H ;设置串口工作方式1,REN=1,允许接收
SETB TR1 ;定时器开始工作
RET ;返回
COM_INT: ;
PUSH IE
PUSH DPH
PUSH DPL
PUSH PSW
PUSH 00H
PUSH ACC
CLR ES ;禁止串行中断
CLR RI ;清除接收标志位
MOV A ,SBUF ;从缓冲区取出数据
CJNE A,#0FFH,IN_1 ;检查数据
MOV SBUF,#255 ; 收到联机信号,发送联机信号
JNB TI,$ ;等待发送标志
CLR TI ;清除发送标志
SETB ES ;允许串行中断
POP ACC
POP 00H
POP PSW
POP DPL
POP DPH
POP IE
RETI ;中断返回
IN_1: ;
CJNE A,#01,IN_2 ;
MOV SBUF,'M' ;
JNB TI,$ ;
CLR TI ;
SETB ES
MOV P2,#01H
MOV P0,#14H ;
POP ACC
POP 00H
POP PSW
POP DPL
POP DPH
POP IE
RETI ;
IN_2:
CJNE A,#02,IN_3 ;
MOV SBUF,'C' ;
JNB TI,$ ;
CLR TI ;
SETB ES
MOV P2,#01H
MOV P0,#0ADH ;
POP ACC
POP 00H
POP PSW
POP DPL
POP DPH
POP IE
RETI ;
IN_3:
MOV SBUF,'U' ;
JNB TI,$ ;
CLR TI ;
SETB ES ;
MOV P2,#01H
MOV P0,#9DH ;
POP ACC
POP 00H
POP PSW
POP DPL
POP DPH
POP IE
RETI
DISP:
MOV DPTR,#TAB
CJNE R0,#09,DISP1
MOV R0,#00H
AJMP DISP2
DISP1:
INC R0
DISP2:
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#01H
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
JMP DISP
DELAY:
MOV R3,#255
MOV R4,#255
DELAY1:
DJNZ R4,DELAY1
DJNZ R3,DELAY1
RET
TAB:
DB 14H,0ADH,9DH,1EH,9BH,0BBH,15H,0BFH,09FH,0B7H
END

为什么只能接收数据不能发送数据,谢谢

dbbyzam 发表于 2010-2-2 21:23:53

那位高手看下,帮个忙,先谢谢了

xiaoai 发表于 2010-2-2 21:23:54

很复杂,搞点简单的
页: [1]
查看完整版本: 请帮个忙看下