⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ytrem.asm

📁 多个C51的源代码,在KEIL C51上已调试通过
💻 ASM
字号:
/************** YTREM.PLM  ********************/
/* 遥控器按键代码表(熊猫 M50462/CL54L2) */
/* 1---00h;2---10h;3---08h;4---18h;5---04h;6---14h;7---0ch;8---1ch; */
/* 9---80h;0---90h;1+---88h;2+---98h;pd+---50h;pd_---48h;ld+---0cch; */
/* ld_---0dch;yl+---44h;yl_---54h;sd+---0c4h;sd_---0d4h;BZ---0D0h; */
/* TV/AV---5CH;PX---D8H;-->.<-- ---0D0H;CLK---0E8H;*/ 
/* TIME---0F8H;ON.T---0E4H;SEL---0F4H;INC---0ECH;  */
start:do;
$include(reg51.dcl)
  declare (data1,data2,key,DAT) byte at (30h);
  declare (ah,al,NUMBER,jihao,bjihao) byte; 
  declare Ale literally 'p17',da literally 'p15',clk literally 'p16';
  DECLARE ACO(11) BYTE CONSTANT (0EDH,28H,0DCH,7CH,39H,75H,0F5H,2CH,
				 0FDH,7DH,02H); 
				 
DISPLAY: PROCEDURE(NUM);
	 DECLARE (K,NUM,N) BYTE;
	 N=NUM;
	 N=N MOD 10;
	 N=ACO(N);
      DO K=0 TO 7;
	 N=SCR(N,1);
	 DA=CY;
	 CLK=0;
	  call time(1);
	 CLK=1;
      END;
	 N=NUM;
	 N=N/10;
	 N=ACO(N);
      DO K=0 TO 7;
	 N=SCR(N,1);
	 DA=CY;
	 CLK=0;
	  call time(1);
	 CLK=1;
      END;
      ALE=0;
       call time(2);
      ALE=1;   

END DISPLAY;

YTNUMBER: procedure(kk);
  declare (kk,relay) byte;
  if kk=02 then 
     DO;
	NUMBER=NUMBER+1;
	IF NUMBER>4 THEN NUMBER=1;
     END; 
  
  if kk=01 then 
     DO;
	NUMBER=NUMBER-1;
	IF NUMBER=0 THEN NUMBER=4;
     END;
   CALL DISPLAY(NUMBER);
   KEY=0; data2=0;
END YTNUMBER;

recieve: procedure interrupt 4 using 1;
	 declare (k,ask) byte;
	 disable;  
	 if data2=0e2h and dat<>0 then
	 do;
	   ri=0;
	   jihao=sbuf;
	   if jihao=bjihao then
	   do;   
	     data2=0;
	     p32=1;
	     do k=1 to 2;
		if k=1 then sbuf=dat;
		if k=2 then sbuf=number;
		do while ti=0;
		end;
		ti=0;
		call time(1);
	     end;
	     
	   p32=0;
	     do while ri=0;
	     end;
	     ri=0;
	     ask=sbuf;
	     if ask=0ffh then  
	     do;
	     ;
	     end;        

	 /*    data1=0ffh;dat=0;  */
	   end;
	 end;
	 enable;
end recieve;

rem:procedure interrupt 2;
    declare k byte;
    disable;
 /*  if data2=0e2h then goto int0end; */
    k=16;
loop1: 
    call time(2);
    do while p33=0;
    end;
    th0=0;
    tl0=0;
    tr0=1;
    call time(2);
    do while p33=1;
    end;
    tr0=0;
    ah=th0;
    al=tl0;
    if ah>=4 then cy=1;  /* 11.0592Mhz */
    else cy=0;
    data1=scl(data1,1);
    k=k-1;
    if k=8 then data2=data1;
    if k<>0 then goto loop1;
	if data2=0e2h then 
	   do;
	  IF DATA1=54H THEN do;KEY=01;dat=0;end; /* YTNUMBER DEC KEY */
	  IF DATA1=44H THEN do;KEY=02;dat=0;end; /* YTNUMBER ADD KEY */
	     
	     IF DATA1=00H THEN DAT=1;
	     IF DATA1=10H THEN DAT=2;
	     IF DATA1=08H THEN DAT=3;
	     IF DATA1=18H THEN DAT=4;
	     IF DATA1=04H THEN DAT=5;
	     IF DATA1=14H THEN DAT=6;
	     IF DATA1=0CH THEN DAT=7;
	     IF DATA1=1CH THEN DAT=8;
	     IF DATA1=80H THEN DAT=9;
	     IF DATA1=90H THEN DAT=10;
	     IF DATA1=88H THEN DAT=11;
	     IF DATA1=98H THEN DAT=12;
	     IF DATA1=50H THEN DAT=13;
	     IF DATA1=48H THEN DAT=14;
	     IF DATA1=40H THEN DAT=15;
	     IF DATA1=4CH THEN DAT=16;
	     IF DATA1=5CH THEN DAT=17;
	     IF DATA1=0D8H THEN DAT=18;
	     IF DATA1=0D0H THEN DAT=19;
	     IF DATA1=0E8H THEN DAT=20;
	     IF DATA1=0F8H THEN DAT=21;
	     IF DATA1=0E4H THEN DAT=22;
	     IF DATA1=0F4H THEN DAT=23;
	     IF DATA1=0ECH THEN DAT=24;
/*            P34=0;CALL TIME(250);P34=1;  */
	   end;
int0end:    
  ip=0;
  DO K=0 TO 3;  /* important value  */
     CALL TIME(250);
  END;
  enable;                                 
end rem;

main$program:
data1=0;data2=0;dat=0;
p32=0;   /*  set recieve mode  */
clk=1;Ale=1;
p33=1;NUMBER=1;KEY=0;
scon=50h;
pcon=00h;
tmod=21h;
tl1=0fdh;       /* 9600 baud rate for 11.0592Mhz */
th1=0fdh;
th0=0;
tl0=0;
tr1=1;
es=1;
ex1=1;
bjihao=1;
enable;
call DISPLAY(NUMBER);

DO WHILE 1=1;
	IF KEY=01 OR KEY=02 THEN
	DO;
	  CALL YTNUMBER(KEY);             
	END;
END;

end start;



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -