单片机汇编语言有一道题不会做!各位大佬帮帮我

单片机汇编语言有一道题不会做!各位大佬帮帮我8试编写一段程序实现如下功能:初始时P1口八个管脚全部输入高电平,如果从串行通信口接收到命令“CMD1”,则P1.0管脚输出低电平。如果从串行通信口接收命令“CMD2”,则在P1管脚输出低电平,否则,通过串行口发送“the command error”

第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”
第2个回答  2018-01-12
#include<reg51.h>
#define uchar unsigned char
uchar str="CMD";
uchar str1="the command error";
main()
{
uchar i=0,j;
bit flag=0;
uchar *rec;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
    {
    flag=0;
    if(RI==1)
        {
        RI=0;
        rec[i]=SBUF;
        i++;
        if(i==4)
            {
            for(j=0;j<3;j++)
                {
                if(rec[j]!=str[j])flag=1;
                }
            if(rec[3]==1 && flag==0)P1_0=0;
            else if(rec[j]==2 && flag==0)P1=0;
            else    
                {
                i=0;
                while(str[i]!=0)
                    {
                    SBUF=str[i];
                    while(TI==0);
                    TI=0;
                    }    
                }
               
            }
        }
    }
}

本回答被网友采纳
相似回答