请各位高手帮忙提供MC44BS373CA全频道,AT89C2051 I2C总线汇编控制驱动程序,或者是BIN,HEX档也行,本人将不盛感激,谢谢!以下是单频道的(请各位高手帮忙修改为多频道的)
AT89C2051 MC44BS373CA
;==========================================================================
Q0000: AJMP Q0040
XCH A,R2
MOV 10H,R0
JB 2EH.4,Q0039
INC @R1
INC @R0
NOP
Q0039: NOP
Q0040: MOV R4,#0F0H
DJNZ R4,$
MOV DPTR,#0030H
MOV A,#00H
MOVC A,@A+DPTR
MOV 60H,A
MOV A,#01H
MOVC A,@A+DPTR
MOV 61H,A
MOV A,#02H
MOVC A,@A+DPTR
MOV 62H,A
MOV A,#03H
MOVC A,@A+DPTR
MOV 63H,A
MOV A,#04H
MOVC A,@A+DPTR
MOV 64H,A
MOV A,#05H
MOVC A,@A+DPTR
MOV 65H,A
MOV A,#06H
MOVC A,@A+DPTR
MOV 66H,A
MOV A,#07H
MOVC A,@A+DPTR
MOV 67H,A
Q006F: MOV A,60H
MOV R1,#61H
MOV R2,#04H
ACALL Q0086
CJNE A,#01H,Q007C
INC 65H
Q007C: ACALL Q00EF
DJNZ 65H,Q006F
ORL PCON,#03H
Q0084: AJMP Q0084
Q0086: ACALL Q009D
ACALL Q00C3
JC Q0098
Q008C: MOV A,@R1
ACALL Q00C3
JC Q0098
INC R1
DJNZ R2,Q008C
MOV A,#00H
AJMP Q009A
Q0098: MOV A,#01H
Q009A: ACALL Q00B2
RET
;==========================================================================
Q009D: PUSH ACC
ACALL Q0102
ACALL Q00EA
ACALL Q00F8
ACALL Q00EA
ACALL Q0116
ACALL Q00EA
ACALL Q010C
ACALL Q00EA
POP ACC
RET
;==========================================================================
Q00B2: PUSH ACC
ACALL Q0116
ACALL Q00EA
ACALL Q00F8
ACALL Q00EA
ACALL Q0102
ACALL Q00EA
POP ACC
RET
;==========================================================================
Q00C3: MOV R0,#08H
MOV 68H,A
Q00C7: ACALL Q012A
ACALL Q00EA
ACALL Q00F8
ACALL Q00EA
ACALL Q010C
ACALL Q00EA
DJNZ R0,Q00C7
ACALL Q0102
ACALL Q00EA
ACALL Q00F8
ACALL Q00EA
ACALL Q0120
MOV 69H,PSW
ACALL Q010C
ACALL Q00EA
MOV PSW,69H
RET
;==========================================================================
Q00EA: NOP
RET
;==========================================================================
Q00EF: MOV R6,#14H
Q00F1: MOV R7,#0A5H
DJNZ R7,$
DJNZ R6,Q00F1
RET
;==========================================================================
Q00F8: MOV DPTR,#013FH
MOV B,#03H
MOV A,66H
MUL AB
JMP @A+DPTR
Q0102: MOV DPTR,#013FH
MOV B,#03H
MOV A,67H
MUL AB
JMP @A+DPTR
Q010C: MOV DPTR,#016FH
MOV B,#03H
MOV A,66H
MUL AB
JMP @A+DPTR
Q0116: MOV DPTR,#016FH
MOV B,#03H
MOV A,67H
MUL AB
JMP @A+DPTR
Q0120: MOV DPTR,#01CFH
MOV B,#03H
MOV A,67H
MUL AB
JMP @A+DPTR
Q012A: MOV A,68H
RLC A
MOV 68H,A
MOV 69H,PSW
MOV DPTR,#019FH
MOV B,#03H
MOV A,67H
MUL AB
MOV PSW,69H
JMP @A+DPTR
SETB P1.0
RET
;==========================================================================
Q0142: DB 0D2H, 91H, 22H,0D2H, 92H, 22H,0D2H, 93H
Q014A: DB 22H,0D2H, 94H, 22H,0D2H, 95H, 22H,0D2H
Q0152: DB 96H, 22H,0D2H, 97H, 22H,0D2H,0B0H, 22H
Q015A: DB 0D2H,0B1H, 22H,0D2H,0B2H, 22H,0D2H,0B3H
Q0162: DB 22H,0D2H,0B4H, 22H,0D2H,0B5H, 22H,0D2H
Q016A: DB 0B6H, 22H,0D2H,0B7H, 22H,0C2H, 90H, 22H
Q0172: DB 0C2H, 91H, 22H,0C2H, 92H, 22H,0C2H, 93H
Q017A: DB 22H,0C2H, 94H, 22H,0C2H, 95H, 22H,0C2H
Q0182: DB 96H, 22H,0C2H, 97H, 22H,0C2H,0B0H, 22H
Q018A: DB 0C2H,0B1H, 22H,0C2H,0B2H, 22H,0C2H,0B3H
Q0192: DB 22H,0C2H,0B4H, 22H,0C2H,0B5H, 22H,0C2H
Q019A: DB 0B6H, 22H,0C2H,0B7H, 22H, 92H, 90H, 22H
Q01A2: DB 92H, 91H, 22H, 92H, 92H, 22H, 92H, 93H
Q01AA: DB 22H, 92H, 94H, 22H, 92H, 95H, 22H, 92H
Q01B2: DB 96H, 22H, 92H, 97H, 22H, 92H,0B0H, 22H
Q01BA: DB 92H,0B1H, 22H, 92H,0B2H, 22H, 92H,0B3H
Q01C2: DB 22H, 92H,0B4H, 22H, 92H,0B5H, 22H, 92H
Q01CA: DB 0B6H, 22H, 92H,0B7H, 22H,0A2H, 90H, 22H
Q01D2: DB 0A2H, 91H, 22H,0A2H, 92H, 22H,0A2H, 93H
Q01DA: DB 22H,0A2H, 94H, 22H,0A2H, 95H, 22H,0A2H
Q01E2: DB 96H, 22H,0A2H, 97H, 22H,0A2H,0B0H, 22H
Q01EA: DB 0A2H,0B1H, 22H,0A2H,0B2H, 22H,0A2H,0B3H
Q01F2: DB 22H,0A2H,0B4H, 22H,0A2H,0B5H, 22H,0A2H
Q01FA: DB 0B6H, 22H,0A2H,0B7H, 22H
;==========================================================================
各位大哥哥们与高手,难道论坛里没有好心人能够回复吗?
另我有同一颗飞思卡尔的同类芯片AS44CC373CA,SDA,SDL不能通讯,请各位大哥哥们指导一下,是哪里的问题,谢谢喽!本人好着急.........
#include "reg52.h"
#define FALSE 0
#define TRUE 1
//#define SET 1
//#define CLR 0
#define C1_H 0x90
#define C0_L 0x08
sbit SDA=P3^0;
sbit SCL=P3^1;
void delay(unsigned char m)
{ char i;
for(i=m;i>=0;i--)
;
}
void start_i2c(void)
{
SDA=1;
SCL=1;
delay(2);
SDA=0;
delay(2);
SCL=0;
}
void stop_i2c(void)
{
SCL=0;
SDA=0;
delay(2);
SCL=1;
delay(2);
SDA=1;
//delay(2);
//SCL=0;
}
void send_1(void)
{
SCL=0;
SDA=1;
delay(2);
SCL=1;
delay(2);
}
void send_0(void)
{
SCL=0;
SDA=0;
delay(2);
SCL=1;
delay(2);
}
bit check_ack(void)
{
bit q;
SCL=0;
SDA=1;
delay(1);
q=SDA;
delay(1);
SCL=1;
delay(2);
if(q==1)
return FALSE;
else
return TRUE;
}
void write_i2c_byte(unsigned char temp)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((temp<<i)&0x80)
send_1();
else
send_0();
}
SCL=0;
}
bit signal_send(unsigned int tmp)
{
unsigned char fm_h,fm_l;
bit ack=1;
fm_h=(unsigned char)(tmp>>6);
fm_l=(unsigned char)(tmp<<2)&0xff;
start_i2c();
write_i2c_byte(0xce);
ack=check_ack();
if(ack==0)
return 0;
write_i2c_byte(fm_h);
ack=check_ack();
if(ack==0)
return 0;
write_i2c_byte(fm_l);
ack=check_ack();
if(ack==0)
return 0;
write_i2c_byte(C1_H);
ack=check_ack();
write_i2c_byte(C0_L);
ack=check_ack();
if(ack==0)
return 0;
stop_i2c();
return 1;
}
void main(void)
{
unsigned char acknow=1;
//unsigned int temp=0x0b9;
while(1)
{
//key_fun();
while(!acknow)
{
acknow=signal_send(freq_data);
}
}