juhuaca 发表于 2009-6-16 18:03:06

遥控控制PT225电子音量

大家来看看我编的用遥控器控制PT2258做的5.1功放的程序
BIG   equ12h;10db2258调整存放
SML    equ13h;1DB2258调整存放
INBUFF   equ14h;2416I2C输入
OUTBUFF   equ15h;24C02输出
PAGE_2416   equ16h;24C02器件地址
ADDR_2416IC   equ17h;24C02字节地址
FLAG_T0   equ18h
FLAG5   equ19h
AIRDATAEQU1AH;遥控用户码低8位
BIRDATAEQU1BH;遥控用户码高8位
CIRDATAEQU1CH;遥控键码
DIRDATAEQU1DH;遥控键反码
LEDT0    EQU1EH
LEDJS    EQU1Fh
addr2258equ88h;2258器件地址
tempbuffequ30h
flag_i2cbit20h.1
FLAG_IRBIT   20H.0
         sda                bit        p3.5;PT2258SDA
       scl                bit        p3.4;PT2258SCL

        flag_mute        bit        p3.1;=0静音关,=1静音开
        flag_led        bit        p3.0;有遥控信号闪8下,没信号长亮
       


        sda1                bit        p1.1;24C02SDA
        scl1                bit        p1.0;24C02SCL
       
org0000h
ljmp start
org000bh
ljmp int_t0
org0040h
start:
       mov   sp,#60h
       mov p1,#0ffh
       mov p3,#0ffh
       setb flag_mute
       setb flag_led
       mov   tmod,#01h
       mov   th0,#00h
       mov   tl0,#00h
;       setbtr0
;       setbet0
;       clr   tf0
;       setbea
;       mov   ledt0,#00h
;       mov   ledjs,#00h
;       mov   dptr,#table
;       mov   led1,#0eh
;       mov   led2,#0eh
;       mov   led3,#5h
;       mov   led4,#1h
;       mov   led5,#10h
;       mov   led6,#08h
;       mov   led7,#08h
;       mov   led8,#08h
;       mov   led9,#08h
;       mov   led10,#11h
MAIN1:   MOV R0,#0ffH
loop1:    LCALLDELAY2400
         lcalldelay1000
         lcalldelay882
          djnz r0,loop1
          clr flag_mute
          lcall init2416
          lcall tiao2258
main:
       jnbp3.2,ir;为0就是有遥控信号来了
infrared_on:
   JB FLAG_IR,COUNT_2322
      ;LCALL INIT2416
      ;mov softdog,#00h
       ljmpmain
;*********************
;遥控子程序,输出在CIRDATA为键码,DIRDATA为键码反码,
;AIRDATA为用户码低8位,BIRDATA为用户码高8位,有键按
;下置位FLAG_IR
;*******************
ir:
       movr6,#9
sb:
       acalldelay882;延是0.8ms
       jbp3.2,exit;是误信号退出
       djnzr6,sb ;延时8.82ms是误信号退出
       jnb p3.2,$;等待9ms低电平过去
       acalldelay2400;延时2.4ms
       jnb p3.2,ir_rp;为低电平则为连按
       ;acall delay2400;
       JB P3.2,$
       ;LCALL DELAY500
       mov r1,#AIRDATA
       mov r2,#4
pp:
       mov r3,#8
jjjj:
       jnb p3.2,$
       lcalldelay882
       mov c,p3.2
       jnc uuu
       lcall delay1000
uuu:
       mov a,@r1
       rrc a
       mov @r1,a
       djnz r3,jjjj
       inc r1
       djnz r2,pp
       MOV A,DIRDATA
       CPL A
       CJNE A,CIRDATA,EXIT
       SETB FLAG_IR
       JMP EXIT
IR_RP: mov r6,#28h;延时96ms到下一个108毫秒来
delay96:
       lcall delay2400
       djnz r6,delay96
       SETB FLAG_IR
EXIT:jmp infrared_on
;******************
;遥控按键处理
;************************
COUNT_2322:
      CLR FLAG_IR
;********************
      setb ea
      setb et0 ;开T0定时中断,遥控时灯闪8下间隔500ms
      setb tr0
      MOV FLAG_T0,#0A0H
      MOV FLAG5,#08H
;************************
      MOV A,CIRDATA
      CJNE A,#00H,VOLDEC
cendec:
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0b5h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#09h,cen_smlinc
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0b6h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#07h,cen_biginc
         ljmp count_2322_end
   cen_biginc:      
         inc big
         mov sml,#00h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0b6h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#0b5h
         mov inbuff,sml
         lcall write_2416
         jmp cendec_end
   cen_smlinc:
          inc sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#0b5h
          mov inbuff,sml
          lcall write_2416
          jmp cendec_end
   cendec_end:
          lcall cen2258
count_2322_end:
         ljmp main
      
         
         
         
         
;****************
voldec:cjne a,#01h,voladd

         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#15h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#09h,vol_smlinc
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#16h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#07h,vol_biginc
         ljmp count_2322_end
   vol_biginc:      
         inc big
         mov sml,#00h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#16h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#15h
         mov inbuff,sml
         lcall write_2416
         jmp vol_dec_end
   vol_smlinc:
          inc sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#015h
          mov inbuff,sml
          lcall write_2416
          jmp vol_dec_end
   vol_dec_end:
          lcall vol2258
          ljmp main
         
         
;************
voladd:cjne a,#02h,frdec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#15h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#00h,vol_smldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#16h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#00h,vol_bigdec
         ljmp count_2322_end
   vol_bigdec:      
         dec big
         mov sml,#09h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#16h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#15h
         mov inbuff,sml
         lcall write_2416
         jmp vol_add_end
   vol_smldec:
          dec sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#15h
          mov inbuff,sml
          lcall write_2416
          jmp fr_add_end
   VOL_add_end:
          lcall vol2258
          ljmp main

;***************
frdec:cjne a,#04h,fradd
      
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#35h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#09h,fr_smlinc
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#36h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#07h,fr_biginc
         ljmp count_2322_end
   fr_biginc:      
         inc big
         mov sml,#00h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#36h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#35h
         mov inbuff,sml
         lcall write_2416
         jmp fr_dec_end
   fr_smlinc:
          inc sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#35h
          mov inbuff,sml
          lcall write_2416
          jmp fr_dec_end
   fr_dec_end:
          lcall fr2258
          ljmp main
;
fradd:cjne a,#05h,fldec

         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#35h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#00h,fr_smldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#36h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#00h,fr_bigdec
         ljmp count_2322_end
   fr_bigdec:      
         dec big
         mov sml,#09h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#36h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#35h
         mov inbuff,sml
         lcall write_2416
         jmp fr_add_end
   fr_smldec:
          dec sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#35h
          mov inbuff,sml
          lcall write_2416
          jmp fr_add_end
   fr_add_end:
          lcall fr2258
          ljmp main

fldec:cjne a,#07h,fladd

         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#55h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#09h,fl_smlinc
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#56h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#07h,fL_biginc
         ljmp count_2322_end
   fl_biginc:      
         inc big
         mov sml,#00h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#56h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#55h
         mov inbuff,sml
         lcall write_2416
         jmp fl_dec_end
   fl_smlinc:
          inc sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#55h
          mov inbuff,sml
          lcall write_2416
          jmp fl_dec_end
   fl_dec_end:
          lcall fl2258
          ljmp main
fladd:cjne a,#08h,srdec
      
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#55h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#00h,fl_smldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#56h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#00h,fl_bigdec
         ljmp count_2322_end
   fl_bigdec:      
         dec big
         mov sml,#09h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#56h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#55h
         mov inbuff,sml
         lcall write_2416
         jmp fl_add_end
   fl_smldec:
          dec sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#55h
          mov inbuff,sml
          lcall write_2416
          jmp fl_add_end
   fl_add_end:
          lcall fl2258
          ljmp main
srdec:cjne a,#0ah,sradd
      
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#75h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#09h,sr_smlinc
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#76h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#07h,sr_biginc
         ljmp count_2322_end
   sr_biginc:      
         inc big
         mov sml,#00h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#76h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#75h
         mov inbuff,sml
         lcall write_2416
         jmp srdec_end
   sr_smlinc:
          inc sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#75h
          mov inbuff,sml
          lcall write_2416
          jmp srdec_end
   srdec_end:
          lcall sr2258
          ljmp main
sradd:cjne a,#1bh,sldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#75h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#00h,sr_smldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#76h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#00h,sr_bigdec
         ljmp count_2322_end
   sr_bigdec:      
         dec big
         mov sml,#09h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#76h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#75h
         mov inbuff,sml
         lcall write_2416
         jmp sr_add_end
   sr_smldec:
          dec sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#75h
          mov inbuff,sml
          lcall write_2416
          jmp sr_add_end
   sr_add_end:
          lcall sr2258
          ljmp main
sldec:cjne a,#0ch,sladd
      
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#95h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#09h,sl_smlinc
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#96h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#07h,sl_biginc
         ljmp count_2322_end
   sl_biginc:      
         inc big
         mov sml,#00h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#96h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#95h
         mov inbuff,sml
         lcall write_2416
         jmp sldec_end
   sl_smlinc:
          inc sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#95h
          mov inbuff,sml
          lcall write_2416
          jmp sldec_end
   sldec_end:
          lcall sl2258
          ljmp main
sladd:cjne a,#0dh,cenadd
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#95h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#00h,sl_smldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#96h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#00h,sl_bigdec
         ljmp count_2322_end
   sl_bigdec:      
         dec big
         mov sml,#09h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#96h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#95h
         mov inbuff,sml
         lcall write_2416
         jmp sl_add_end
   sl_smldec:
          dec sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#95h
          mov inbuff,sml
          lcall write_2416
          jmp sl_add_end
   sl_add_end:
          lcall sl2258
          ljmp main

cenadd:cjne a,#0fh,subdec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0b5h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#00h,cen_smldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0b6h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#00h,cen_bigdec
         ljmp count_2322_end
   cen_bigdec:      
         dec big
         mov sml,#09h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0b6h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#0b5h
         mov inbuff,sml
         lcall write_2416
         jmp cen_add_end
   cen_smldec:
          dec sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#0b5h
          mov inbuff,sml
          lcall write_2416
          jmp cen_add_end
   cen_add_end:
          lcall cen2258
          ljmp main

subdec:cjne a,#19h,subadd
         
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0d5h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#09h,sub_smlinc
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0d6h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#07h,sub_biginc
         ljmp count_2322_end
   sub_biginc:      
         inc big
         mov sml,#00h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0d6h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#0d5h
         mov inbuff,sml
         lcall write_2416
         jmp subdec_end
   sub_smlinc:
          inc sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#0d5h
          mov inbuff,sml
          lcall write_2416
          jmp subdec_end
   subdec_end:
          lcall sub2258
          ljmp main
subadd:cjne a,#0eh,mute
         
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0d5h
         lcall READ_2416
         mov a,outbuff
         mov sml,a
         cjne a,#00h,sub_smldec
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0d6h
         lcall READ_2416
         mov a,outbuff
         mov big,a
         cjne a,#00h,sub_bigdec
         ljmp count_2322_end
   sub_bigdec:      
         dec big
         mov sml,#09h
         mov PAGE_2416,#0a0h
         mov ADDR_2416IC,#0d6h
         mov inbuff,big
         lcall write_2416
         mov ADDR_2416IC,#0d5h
         mov inbuff,sml
         lcall write_2416
         jmp sub_add_end
   sub_smldec:
          dec sml
          mov PAGE_2416,#0a0h
          mov ADDR_2416IC,#0d5h
          mov inbuff,sml
          lcall write_2416
          jmp sub_add_end
   sub_add_end:
          lcall sub2258
          ljmp main
mute:cjne a,#1fh,count_2322_out
      cpl flag_mute

count_2322_out:
         ljmp main

;******************************

;**************************
DELAY882:
         MOV R7,#220
    DELAY882LOOP:
         NOP
         NOP
         DJNZ R7,DELAY882LOOP
         RET
DELAY1000:
          MOV R7,#249
    DELAY1000LOOP:
         NOP
         NOP
         DJNZ R7,DELAY1000LOOP
         RET
      
DELAY2400:
         MOV R7,#239
    DELAY2400LOOP:
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         DJNZ R7,DELAY2400LOOP
         RET
;************************

;****************************
vol2258:
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#15h
      lcall READ_2416
      mov a,outbuff
      mov sml,a
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#16h
      lcall READ_2416
      mov a,outbuff
      mov big,a      
      lcall i2c_bigen
      mov tempbuff,#addr2258
      lcall bitout_2416
      mov a,big
      anl a,#0fh
      orl a,#11010000b
      mov tempbuff,a
      lcall bitout_2416
      mov a,sml
      anl a,0fh
      orl a,#11100000b
      mov tempbuff,a
      lcall bitout_2416
      lcall i2c_end
      ret
fr2258:
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#35h
      lcall READ_2416
      mov a,outbuff
      mov sml,a
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#36h
      lcall READ_2416
      mov a,outbuff
      mov big,a      
      lcall i2c_bigen
      mov tempbuff,#addr2258
      lcall bitout_2416
      mov a,big
      anl a,#0fh
      orl a,#01000000b
      mov tempbuff,a
      lcall bitout_2416
      mov a,sml
      anl a,0fh
      orl a,#01010000b
      mov tempbuff,a
      lcall bitout_2416
      lcall i2c_end
      ret
fl2258:
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#55h
      lcall READ_2416
      mov a,outbuff
      mov sml,a
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#56h
      lcall READ_2416
      mov a,outbuff
      mov big,a
      
      lcall i2c_bigen
      mov tempbuff,#addr2258
      lcall bitout_2416
      mov a,big
      anl a,#0fh
      orl a,#10000000b
      mov tempbuff,a
      lcall bitout_2416
      mov a,sml
      anl a,0fh
      orl a,#10010000b
      mov tempbuff,a
      lcall bitout_2416
      lcall i2c_end
      ret
      
sr2258:
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#75h
      lcall READ_2416
      mov a,outbuff
      mov sml,a
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#76h
      lcall READ_2416
      mov a,outbuff
      mov big,a
      
      lcall i2c_bigen
      mov tempbuff,#addr2258
      lcall bitout_2416
      mov a,big
      anl a,#0fh
      orl a,#10100000b
      mov tempbuff,a
      lcall bitout_2416
      mov a,sml
      anl a,0fh
      orl a,#10110000b
      mov tempbuff,a
      lcall bitout_2416
      lcall i2c_end
      ret
sl2258:
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#95h
      lcall READ_2416
      mov a,outbuff
      mov sml,a
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#96h
      lcall READ_2416
      mov a,outbuff
      mov big,a
      
      lcall i2c_bigen
      mov tempbuff,#addr2258
      lcall bitout_2416
      mov a,big
      anl a,#0fh
      orl a,#01100000b
      mov tempbuff,a
      lcall bitout_2416
      mov a,sml
      anl a,0fh
      orl a,#01110000b
      mov tempbuff,a
      lcall bitout_2416
      lcall i2c_end
      ret
cen2258:
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#0b5h
      lcall READ_2416
      mov a,outbuff
      mov sml,a
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#0b6h
      lcall READ_2416
      mov a,outbuff
      mov big,a
      
      lcall i2c_bigen
      mov tempbuff,#addr2258
      lcall bitout_2416
      mov a,big
      anl a,#0fh
      orl a,#00000000b
      mov tempbuff,a
      lcall bitout_2416
      mov a,sml
      anl a,0fh
      orl a,#00010000b
      mov tempbuff,a
      lcall bitout_2416
      lcall i2c_end
      ret
sub2258:
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#0d5h
      lcall READ_2416
      mov a,outbuff
      mov sml,a
      mov PAGE_2416,#0a0h
      mov ADDR_2416IC,#0d6h
      lcall READ_2416
      mov a,outbuff
      mov big,a
      
      lcall i2c_bigen
      mov tempbuff,#addr2258
      lcall bitout_2416
      mov a,big
      anl a,#0fh
      orl a,#00100000b
      mov tempbuff,a
      lcall bitout_2416
      mov a,sml
      anl a,0fh
      orl a,#00110000b
      mov tempbuff,a
      lcall bitout_2416
      lcall i2c_end
      ret
tiao2258:lcall vol2258
         lcall fr2258
         lcall fl2258
         lcall sr2258
         lcall sl2258
         lcall cen2258
         lcall sub2258
         ret
;******************************
;初始化2416,13H=12H,33H=30H,53H=30H,73H=30H,
;93H=30,0B3H=30H,0D3H=30H,不是就到重新初始化
;到INIT2416GOOD
;*******************
init2416:
         MOV ADDR_2416IC,#13h
         mov PAGE_2416,#0a0h
         lcall read_2416
         mov a,outbuff
         cjne a,#12h,init2416_good
         MOV ADDR_2416IC,#33h
         mov PAGE_2416,#0a0h
         lcall read_2416
         mov a,outbuff
         cjne a,#30h,init2416_good
         MOV ADDR_2416IC,#53h
         mov PAGE_2416,#0a0h
         lcall read_2416
         mov a,outbuff
         cjne a,#30h,init2416_good
         MOV ADDR_2416IC,#73h
         mov PAGE_2416,#0a0h
         lcall read_2416
         mov a,outbuff
         cjne a,#30h,init2416_good
         MOV ADDR_2416IC,#93h
         mov PAGE_2416,#0a0h
         lcall read_2416
         mov a,outbuff
         cjne a,#30h,init2416_good
         MOV ADDR_2416IC,#0b3h
         mov PAGE_2416,#0a0h
         lcall read_2416
         mov a,outbuff
         cjne a,#30h,init2416_good
         MOV ADDR_2416IC,#0d3h
         mov PAGE_2416,#0a0h
         lcall read_2416
         mov a,outbuff
         cjne a,#30h,init2416_good
         jmp init2416_end
init2416_good:
         
          mov r4,#00h
          mov r5,#00h
init2416vol:
          mov dptr,#vol_tab
          mov ADDR_2416IC,#17h
   init2416loop:
          mov inbuff,#00h
          lcall write_2416
          dec ADDR_2416IC
          mov a,r4
          rl a
          movc a,@a+dptr
          mov inbuff,a
          lcall write_2416
          dec ADDR_2416IC
          mov a,r4
          rl a
          inc a
          movc a,@a+dptr
          mov inbuff,a
          lcall write_2416
          dec ADDR_2416IC
          mov a,r4
          rl a
          inc a
          inc a
          movc a,@a+dptr
          mov inbuff,a
          lcall write_2416
          dec ADDR_2416IC
          mov a,r4
          rl a
          inc a
          inc a
          inc a
          movc a,@a+dptr
          mov inbuff,a
          lcall write_2416
          inc r5
init2416fr:
          cjne r5,#01h,init2416fl
          mov ADDR_2416IC,#37h
          mov dptr,#fr_tab
          jmp init2416loop
init2416fl:         
          cjne r5,#02h,init2416sr
          mov ADDR_2416IC,#57h
          mov dptr,#fl_tab
          jmp init2416loop
init2416sr:         
          cjne r5,#03h,init2416sl
          mov ADDR_2416IC,#77h
          mov dptr,#sr_tab
          jmp init2416loop
init2416sl:         
          cjne r5,#04h,init2416cen
          mov ADDR_2416IC,#97h
          mov dptr,#sl_tab
          jmp init2416loop
init2416cen:
          cjne r5,#05h,init2416sub
          mov ADDR_2416IC,#0b7h
          mov dptr,#cen_tab
          jmp init2416loop
init2416sub:
          cjne r5,#06h,init2416_end
          mov ADDR_2416IC,#0d7h
          mov dptr,#sub_tab
          jmp init2416loop
         
         
               
init2416_end:ret

;***************
vol_tab:
        db        03h,09h,00h,12h;06h,3123h,1003H, 0000h, 0000h,11e0h,3123h;0707h
;                16h,15h,14h,13h,                                  0
fr_tab:       
        dw        0fh,0fh,00h,30h;c2h, 31d2h, 0000h, 0000h, 0000h,0000h, 3123h
;                36h,35h,34h,33h,数字        F        L                                          0
fl_tab:       
        dw        0fh,0fh,00h,30h;c2h, 1003H, 0000h, 0000h, 0000h,0000h, 3123h
;                56h,55h,54h,53h,数字        S        R                                          0
sr_tab:
        dw        0fh,0fh,00h,30h;e1h, 31d2h, 0000h, 0000h, 0000h,0000h, 3123h
;                76h,75h,74h,73h,数字        S        L                                          0
sl_tab:
        dw        0fh,0fh,00h,30h;e1h, 1003H, 0000h, 0000h, 0000h,0000h, 3123h
;                96h,95h,94h,93h;数字        C        E        N                        0
cen_tab:
        dw        0fh,0fh,00h,30h;03h,30c3h,1932h, 0000h, 0000h,0000h, 3123h
        ;        b6h,b5h,b4h,b3h;数字        S        U        B                           0
sub_tab:
        dw        0fh,0fh,00h,30h;e1h, 1123h,31e3h, 0000h, 0000h,0000h,3123h
;                d6h,d5h,d4h,d3h;数字        T        R        E                            0      

;--------------------------------------------------
;Serial I2C Sub Program
;---------------------------------------------------
I2C_Bigen:
        setb                sda
        nop
        nop
        nop
        nop
        nop
        nop
        setb                scl
        nop
        nop
        nop
        nop
        nop
        jnb                scl,$
        clr                sda
        nop
        nop
        nop
        nop
        nop
        clr                scl
        nop
        nop
        nop
        nop
        nop
        ret
;------------------------------------------------
I2C_End:
        clr        scl
        nop
        nop
        nop
        nop
        nop
        nop
        clr        sda
        nop
        nop
        nop
        nop
        nop
        nop
        ;jb        scl,$
        setb        scl
        nop
        nop
        nop
        nop
        nop
        nop
        setb        sda
        nop
        nop
        nop
        nop

        ret
;-------------------------------------------
;主应答
;-------------------------------------------
i2c_sendack:
        clr        sda
        nop
        setb        scl

        nop
        clr        scl
        nop
        setb        sda

        ret
;-------------------------------
;无应答
;-----------------------------
I2C_noack:
        setb        sda
        nop
        setb        scl
        nop
        clr        scl
        ret

;------------------------------------------------
;I2C输出一个字节
;输入的参数在 tempbuff
;------------------------------------------------
BitOut_2416:
        mov                r0,#08h
        mov                a,TempBuff
BitOut_2416_8bit:
        jnb                acc.7,BitOut_2416_low
        setb                sda
        sjmp                BitOut_2416_again
BitOut_2416_low:
        clr                sda
BitOut_2416_again:
        nop
        nop
        nop
        nop
        nop
        nop
        setb                scl
        nop
        nop
        nop
        nop
        jnb                scl,$
        ;nop
        nop
        clr                scl
        nop
        nop
        nop
        nop
        nop
        rl                a
        djnz                r0,BitOut_2416_8bit
        nop
        setb                sda       ;这里要等待回答信号?
        mov                r6,#00h
        nop
        setb                scl
        jnb                scl,$
        nop
BitOut_2416_loop:
        jnb                sda,BitOut_2416_good
        inc                r6
        cjne                r6,#08h,BitOut_2416_loop
      nop   ;这里是出错的地方
      setb                flag_i2c
BitOut_2416_good:
            clr                scl
        ret

;------------------------------------------------
;输出的参数在A中
;------------------------------------------------
BitIn_2416:
        mov        a,#00h
        mov        r0,#08h
        setb        sda
        ;clr        scl
        ;nop
BitIn_2416_8bit:
        setb        scl
        rl        a
        nop
        jnb        sda,BitIn_8bit_2416_low
        setb        acc.0
        sjmp        BitIn_8bit__2416again
BitIn_8bit_2416_low:
        clr        acc.0
BitIn_8bit__2416again:
        clr        scl
        nop
        nop
        nop
        djnz        r0,BitIn_2416_8bit
        ;clr        sda
        ;nop
        ;setb        scl
        ;nop
        ;clr        scl
        ;nop
        ret
   
   





        ;--------------------------------------------------
;Serial I2C Sub Program
;---------------------------------------------------
I2C_Bigen1:
        setb                sda1
        nop
        nop
        nop
        nop
        nop
        nop
        setb                scl1
        nop
        nop
        nop
        nop
        nop
        jnb                scl1,$
        clr                sda1
        nop
        nop
        nop
        nop
        nop
        clr                scl1
        nop
        nop
        nop
        nop
        nop
        ret
;------------------------------------------------
I2C_End1:
        clr        scl1
        nop
        nop
        nop
        nop
        nop
        nop
        clr        sda1
        nop
        nop
        nop
        nop
        nop
        nop
        jb        scl1,$
        setb        scl1
        nop
        nop
        nop
        nop
        nop
        nop
        setb        sda1
        nop
        nop
        nop
        nop

        ret
;-------------------------------------------
;主应答
;-------------------------------------------
i2c_sendack1:
        clr        sda1
        nop
        setb        scl1

        nop
        clr        scl1
        nop
        setb        sda1

        ret
;-------------------------------
;无应答
;-----------------------------
I2C_noack1:
        setb        sda1
        nop
        setb        scl1
        nop
        clr        scl1
        ret

;------------------------------------------------
;I2C输出一个字节
;输入的参数在 tempbuff
;------------------------------------------------
BitOut_24161:
        mov                r0,#08h
        mov                a,TempBuff
BitOut_2416_8bit1:
        jnb                acc.7,BitOut_2416_low1
        setb                sda1
        sjmp                BitOut_2416_again1
BitOut_2416_low1:
        clr                sda1
BitOut_2416_again1:
        nop
        nop
        nop
        nop
        nop
        nop
        setb                scl1
        nop
        nop
        nop
        nop
        jnb                scl1,$
        ;nop
        nop
        clr                scl1
        nop
        nop
        nop
        nop
        nop
        rl                a
        djnz                r0,BitOut_2416_8bit1
        nop
        setb                sda1       ;这里要等待回答信号?
        mov                r6,#00h
        nop
        setb                scl1
        jnb                scl1,$
        nop
BitOut_2416_loop1:
        jnb                sda1,BitOut_2416_good1
        inc                r6
        cjne                r6,#08h,BitOut_2416_loop1
      nop   ;这里是出错的地方
      setb                flag_i2c
BitOut_2416_good1:
            clr                scl1
        ret

;------------------------------------------------
;输出的参数在A中
;------------------------------------------------
BitIn_24161:
        mov        a,#00h
        mov        r0,#08h
        setb        sda
        ;clr        scl
        ;nop
BitIn_2416_8bit1:
        setb        scl1
        rl        a
        nop
        jnb        sda1,BitIn_8bit_2416_low1
        setb        acc.0
        sjmp        BitIn_8bit__2416again1
BitIn_8bit_2416_low1:
        clr        acc.0
BitIn_8bit__2416again1:
        clr        scl1
        nop
        nop
        nop
        djnz        r0,BitIn_2416_8bit1
        ;clr        sda
        ;nop
        ;setb        scl
        ;nop
        ;clr        scl
        ;nop
        ret
;------------------------------------------------
;从2416中读出一个字节的子程序
;输入的参数:2416ic_addr,page_2416
;输出的参数:outbuff
;------------------------------------------------
Read_2416:
        lcall        I2C_Bigen1
        mov        tempbuff,page_2416;#address_2416
            lcall        BitOut_24161
            mov        tempbuff,addr_2416ic
            lcall        BitOut_24161
            nop
            nop
            lcall        I2C_Bigen1
            ;mov        tempbuff,#address_2416
            mov        tempbuff,page_2416
            orl        tempbuff,#01h
            ;mov        tempbuff,#0a1h
            lcall        BitOut_24161
        nop
        nop
        lcall        BitIn_24161
        lcall        I2C_noack1
        mov        outbuff,a

        lcall        I2C_End1
       
        ret

;------------------------------------------------
;在2416中写入一个字节的子程序
;输入的参数:addr_2416ic,page_2416,inbuff''''
;注意写完结束必须要延时一段时间
;------------------------------------------------
write_2416:
        lcall        I2C_Bigen1
        mov        tempbuff,page_2416;#address_2416
        lcall        BitOut_24161
        mov        tempbuff,addr_2416ic
        lcall        BitOut_24161
        mov        tempbuff,inbuff
        lcall        BitOut_24161
       
        lcall        I2C_End1
        lcall        delay1000
        lcall        delay1000

        ret
       
;*********************

INT_T0:
      PUSH ACC
      PUSH PSw
      MOV TH0,#00H
      MOV TL0,#00H
      DEC FLAG_T0
      MOV a,FLAG_T0
      cjne a,#00h,INT_T0_EXIT
      CPL FLAG_LED
      DEC FLAG5
      MOV a,FLAG5
      cjne a,#00h,INT_T0_EXIT
      CLR EA
      CLR TR0
INT_T0_EXIT:
      POP PSW
      POP ACC
      RETi
      
      end

weq12345 发表于 2009-6-16 21:15:30

晕,头看大了

dongni 发表于 2009-6-16 21:48:08

真厉害

hnqylgq 发表于 2017-8-12 15:08:09

真的厉害,完全没看懂啊
页: [1]
查看完整版本: 遥控控制PT225电子音量