圣源电子制作

 找回密码
 立即注册
查看: 7978|回复: 0
打印 上一主题 下一主题

M50462 红外遥控芯片汇编程序 M50462遥控

[复制链接]
跳转到指定楼层
楼主
发表于 2011-10-10 14:48:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
各种用M50462芯片遥控


芯片
  1. /************** YTREM.PLM  ********************/
  2. /* 遥控器按键代码表(熊猫 M50462/CL54L2) */
  3. /* 1---00h;2---10h;3---08h;4---18h;5---04h;6---14h;7---0ch;8---1ch; */
  4. /* 9---80h;0---90h;1+---88h;2+---98h;pd+---50h;pd_---48h;ld+---0cch; */
  5. /* ld_---0dch;yl+---44h;yl_---54h;sd+---0c4h;sd_---0d4h;BZ---0D0h; */
  6. /* TV/AV---5CH;PX---D8H;-->.<-- ---0D0H;CLK---0E8H;*/
  7. /* TIME---0F8H;ON.T---0E4H;SEL---0F4H;INC---0ECH;  */
  8. start:do;
  9. $include(reg51.dcl)
  10.   declare (data1,data2,key,DAT) byte at (30h);
  11.   declare (ah,al,NUMBER,jihao,bjihao) byte;
  12.   declare Ale literally 'p17',da literally 'p15',clk literally 'p16';
  13.   DECLARE ACO(11) BYTE CONSTANT (0EDH,28H,0DCH,7CH,39H,75H,0F5H,2CH,
  14.      0FDH,7DH,02H);
  15.    
  16. DISPLAY: PROCEDURE(NUM);
  17.   DECLARE (K,NUM,N) BYTE;
  18.   N=NUM;
  19.   N=N MOD 10;
  20.   N=ACO(N);
  21.       DO K=0 TO 7;
  22.   N=SCR(N,1);
  23.   DA=CY;
  24.   CLK=0;
  25.    call time(1);
  26.   CLK=1;
  27.       END;
  28.   N=NUM;
  29.   N=N/10;
  30.   N=ACO(N);
  31.       DO K=0 TO 7;
  32.   N=SCR(N,1);
  33.   DA=CY;
  34.   CLK=0;
  35.    call time(1);
  36.   CLK=1;
  37.       END;
  38.       ALE=0;
  39.        call time(2);
  40.       ALE=1;  

  41. END DISPLAY;

  42. YTNUMBER: procedure(kk);
  43.   declare (kk,relay) byte;
  44.   if kk=02 then
  45.      DO;
  46. NUMBER=NUMBER+1;
  47. IF NUMBER>4 THEN NUMBER=1;
  48.      END;

  49.   if kk=01 then
  50.      DO;
  51. NUMBER=NUMBER-1;
  52. IF NUMBER=0 THEN NUMBER=4;
  53.      END;
  54.    CALL DISPLAY(NUMBER);
  55.    KEY=0; data2=0;
  56. END YTNUMBER;

  57. recieve: procedure interrupt 4 using 1;
  58.   declare (k,ask) byte;
  59.   disable;
  60.   if data2=0e2h and dat<>0 then
  61.   do;
  62.     ri=0;
  63.     jihao=sbuf;
  64.     if jihao=bjihao then
  65.     do;  
  66.       data2=0;
  67.       p32=1;
  68.       do k=1 to 2;
  69.   if k=1 then sbuf=dat;
  70.   if k=2 then sbuf=number;
  71.   do while ti=0;
  72.   end;
  73.   ti=0;
  74.   call time(1);
  75.       end;
  76.      
  77.     p32=0;
  78.       do while ri=0;
  79.       end;
  80.       ri=0;
  81.       ask=sbuf;
  82.       if ask=0ffh then
  83.       do;
  84.       ;
  85.       end;      

  86.   /*    data1=0ffh;dat=0;  */
  87.     end;
  88.   end;
  89.   enable;
  90. end recieve;

  91. rem:procedure interrupt 2;
  92.     declare k byte;
  93.     disable;
  94. /*  if data2=0e2h then goto int0end; */
  95.     k=16;
  96. loop1:
  97.     call time(2);
  98.     do while p33=0;
  99.     end;
  100.     th0=0;
  101.     tl0=0;
  102.     tr0=1;
  103.     call time(2);
  104.     do while p33=1;
  105.     end;
  106.     tr0=0;
  107.     ah=th0;
  108.     al=tl0;
  109.     if ah>=4 then cy=1;  /* 11.0592Mhz */
  110.     else cy=0;
  111.     data1=scl(data1,1);
  112.     k=k-1;
  113.     if k=8 then data2=data1;
  114.     if k<>0 then goto loop1;
  115. if data2=0e2h then
  116.     do;
  117.    IF DATA1=54H THEN do;KEY=01;dat=0;end; /* YTNUMBER DEC KEY */
  118.    IF DATA1=44H THEN do;KEY=02;dat=0;end; /* YTNUMBER ADD KEY */
  119.      
  120.       IF DATA1=00H THEN DAT=1;
  121.       IF DATA1=10H THEN DAT=2;
  122.       IF DATA1=08H THEN DAT=3;
  123.       IF DATA1=18H THEN DAT=4;
  124.       IF DATA1=04H THEN DAT=5;
  125.       IF DATA1=14H THEN DAT=6;
  126.       IF DATA1=0CH THEN DAT=7;
  127.       IF DATA1=1CH THEN DAT=8;
  128.       IF DATA1=80H THEN DAT=9;
  129.       IF DATA1=90H THEN DAT=10;
  130.       IF DATA1=88H THEN DAT=11;
  131.       IF DATA1=98H THEN DAT=12;
  132.       IF DATA1=50H THEN DAT=13;
  133.       IF DATA1=48H THEN DAT=14;
  134.       IF DATA1=40H THEN DAT=15;
  135.       IF DATA1=4CH THEN DAT=16;
  136.       IF DATA1=5CH THEN DAT=17;
  137.       IF DATA1=0D8H THEN DAT=18;
  138.       IF DATA1=0D0H THEN DAT=19;
  139.       IF DATA1=0E8H THEN DAT=20;
  140.       IF DATA1=0F8H THEN DAT=21;
  141.       IF DATA1=0E4H THEN DAT=22;
  142.       IF DATA1=0F4H THEN DAT=23;
  143.       IF DATA1=0ECH THEN DAT=24;
  144. /*            P34=0;CALL TIME(250);P34=1;  */
  145.     end;
  146. int0end:   
  147.   ip=0;
  148.   DO K=0 TO 3;  /* important value  */
  149.      CALL TIME(250);
  150.   END;
  151.   enable;                                
  152. end rem;

  153. main$program:
  154. data1=0;data2=0;dat=0;
  155. p32=0;   /*  set recieve mode  */
  156. clk=1;Ale=1;
  157. p33=1;NUMBER=1;KEY=0;
  158. scon=50h;
  159. pcon=00h;
  160. tmod=21h;
  161. tl1=0fdh;       /* 9600 baud rate for 11.0592Mhz */
  162. th1=0fdh;
  163. th0=0;
  164. tl0=0;
  165. tr1=1;
  166. es=1;
  167. ex1=1;
  168. bjihao=1;
  169. enable;
  170. call DISPLAY(NUMBER);

  171. DO WHILE 1=1;
  172. IF KEY=01 OR KEY=02 THEN
  173. DO;
  174.    CALL YTNUMBER(KEY);            
  175. END;

  176. end start;
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|联系我们|闽公网安备 35012102000020号|闽ICP备11020110号-1|圣源电子

GMT+8, 2024-9-20 05:56 , Processed in 0.043627 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表