ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
114383 Топик полностью
koyodza (02.03.2008 22:25, просмотров: 80) ответил PiTeK на А можно поделиться примером кода ? С АВР на 51 переделаем, не проблема, тем более если он на С... Просто такое впечатление, что я неправильно понимаю логику его работы... Заранее благодарен!
работал с 1110 на 52 без аппаратного I2C. Впечатления весьма положительные  sbit SCL = P2^6; sbit SDA = P2^7; /* ********************************************** */ /* ** I2C *********************************** */ /* ********************************************** */ bit I2Cbit(bit x) { SDA = x; SDA = x; SCL = 1; SCL = 1; x = SDA; SCL = 0; return x; } void I2Cstart(void) { SDA = 0; SDA = 0; SCL = 0; } void I2Cstop(void) { SDA = 0; SCL = 1; SDA = 1; } bit I2Ctx(BYTE x) { BYTE i = 8; SCL = 0; do { I2Cbit(x & 0x80); x <<= 1; } while (--i); return I2Cbit(1); /* ACK */ } BYTE I2Crx(bit ack) { BYTE i = 8, x = 0; SCL = 0; do { x <<= 1; x |= 1 & I2Cbit(1); } while (--i); I2Cbit(ack); return x; } /* ********************************************** */ /* ** ADC *********************************** */ /* ********************************************** */ bit ADCread(BYTE* stat, int* code16) { I2Cstart(); if (I2Ctx(ADC_ADR + 1))//0x91)) { I2Cstop(); return 1; } *(((BYTE*)code16)) = I2Crx(0); *(((BYTE*)code16) + 1) = I2Crx(0); *stat = I2Crx(0); I2Cstop(); return 0; } bit ADCwrite(BYTE x) { I2Cstart(); if (I2Ctx(ADC_ADR))//0x90)) { I2Cstop(); return 1; } I2Ctx(x); I2Cstop(); return 0; } bit ADCget(int* pCode, bit gain) { BYTE stat = 0x9C; if (gain) stat = 0x9F; if (ADCwrite(stat)) return 1; do { RxDecode(); if (ADCread(&stat, pCode)) return 1; } while (stat & 0x80); return 0; } bit ADCdetect(void) { ADC_ADR = 0x90; do { ADCwrite(0x9C); if (!ADCwrite(0x9C)) return 0; ADC_ADR += 2; } while (ADC_ADR < 0x9F); return 1; }