第1个回答 2018-01-11
51单片机的程序89C51,通讯波特率9600/N/8/1
org 0000H
LJMP MAIN1
ORG 0023H
LJMP PCTX;
ORG 0100H
MAIN1:////////-------51单片机初始化程序------
MOV SP,#30H;
MOV TMOD,#20H;
MOV TL1,#0FDH;
MOV TH1,#0FDH;
MOV SCON,#50H;
MOV PCON,#00H;
SETB TR1;
SETB ES;
SETB EA;(总中断开关控制,1为开,0为关)51单片机串口通信开启
MOV R7,#00H;
MOV P1,#0FFH;
RUN1: MOV A,R7;
JZ A,RUN1;
CLR EA;//关闭总中断处理数据
MOV R0,#70H;
MOV R3,#00H;
MOV R4,#04H;
LO: MOV 55H,@R0;
MOV A,R3;
MOV DPTR,#DATE1;
MOVC A,@A+DPTR;
CJNZ A,55H,OUT_1;//字符比对"CMD1"
INC R3;
INC R0;
DJNZ R4,LO;
CLR P1.0;
MOV R7,#00H;
SETB EA;
LJMP RUN1;
OUT_1: MOV A,#05H;
MOVC A,@A+DPTR;
CJNZ A,55H,OUT_2;//第四个字符比对”2"
MOV P1,#00H;
MOV R7,#00H;
SETB EA;
LJMP RUN1;
OUT_2: SET EA;
SETB ES;
MOV R4,#11H;//反馈错误数据串,带空格17个
MOV R3,#00H;
MOV DPTR,#ERRO_D;
LOOP7: MOV A,R3;
MOV A,@A+DPTR;
MOV SBUF,A; 发送数据
JNB TI,$;
INC R3;
CLR TI;
DJNZ R4,LOOP7;
SETB EA;
MOV R7,#00H;
LJMP RUN1;
PCTX: NOP;
MOV R1,#70H;
LOOP:
MOV A,SBUF;
MOV @R1,A;
INC R1;存入数据个数(未用)
INC R7;
CLR RI;
LCALL DELAY10;
JB RI,LOOP;
LCALL DELAY10;
JB RI,LOOP;
RETI
ORG 0F00H
DATA1:
DB 43H,4DH,44H,31H,32H;// "CMD1""2"AIICS码专成16进制
ERRO_D:
DB 74H,68H,65H,20H,63H,6FH,6DH,6DH,61H,6EH,64H,20H,65H,72H,72H,6FH,72H;//“the command error”