glwjs 发表于 2010-8-28 10:02:45

用STC12C5616驱动调制器AS44CC373

调制器IC——AS44CC373用的是I2C传输,传输不了数据,求高手帮助!
#include "reg52.h"
#define   FALSE0
#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;
}

bitsignal_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);
      }
}

glwjs 发表于 2010-8-28 10:08:32

I2C传输数据ourdev_578274.doc(文件大小:141K) (原文件名:新建 Microsoft Word 文档.doc)

glwjs 发表于 2010-8-28 10:10:56

原理图和I2C传输协议ourdev_578286.rar(文件大小:142K) (原文件名:新建文件夹 (2).rar)

flyxiao 发表于 2014-8-26 17:07:54

记号,很好的资料
页: [1]
查看完整版本: 用STC12C5616驱动调制器AS44CC373