ïÐÑÔØ ÓÔÏÌËÎyÌÓÑ ÓÏ ÓÔpÁÎÎÏÊ ÐpÏÂÌÅÍÏÊ. éÍÅÅÔÓÑ ËÏÄ ÉÚ ÐpÉÍÅpÁ pÅÁÌÉÚÁÃÉÉ i2c ÉÄyÝÅÇÏ Ó hi-tech, ×ÓÔÁ×ÌÅÎÎÙÊ × ÍÏÊ ËÏÄ:
signed char i2c_PutByte(unsigned char);
......
char i2c_PutByte(unsigned char data) { if(i2c_SendByte(data)) return I2C_ERROR; return i2c_ReadAcknowledge(); /* returns ack, ~ack */ }
......
int i2c_PutString(const unsigned char *str, unsigned char length) { signed char error;
while(length) { error = i2c_PutByte(*str); ^^^^^^^^^^^^^^^^^^^^^^^^^ ÷ ÜÔÏÍ ÍÅÓÔÅ ÐÏ ÉÄÅÅ ÄÏÌÖÎÁ ×ÙÚÙ×ÁÔØÓÑ i2c_PutByte(*str), ÎÏ ×ÍÅÓÔÏ ÜÔÏÇÏ ÐÏÓÌÅ ËÏÍÐÉÌÑÃÉÉ ÐÏÌyÞÁÅÔÓÑ ÓÌÅÄyÀÝÅÅ:
00019E MOVF 0x51, 0
00019F MOVWF 0x5d
0001A0 MOVF str, 0
0001A1 CALL string_table
0001A2 CALL i2c_PutByte
...
0015 string_table BCF STATUS, 0x5
0016 MOVWF 0x5c
0017 string_indir BTFSC 0x5d, 0x7
0018 GOTO 0x20
0019 MOVF 0x5d, 0
001A MOVWF PCLATH úÄÅÓØ × PCLATH ÚÁÐÉÓÙ×ÁÀÔÓÑ ÎyÌÉ É ÐpÏÇpÁÍÍÁ ÎÁÞÉÎÁÅÔÓÑ Ó ÎÁÞÁÌÁ.
001B MOVF 0x5c, 0
001C INCF 0x5c, 0x1
001D BTFSC STATUS, 0x2
001E INCF 0x5d, 0x1
001F MOVWF PCL
0020 BCF STATUS, 0x7
0021 BTFSC 0x5d, 0
0022 BSF STATUS, 0x7
0023 MOVF 0x5c, 0
0024 INCF 0x5c, 0x1
0025 MOVWF FSR
0026 MOVF INDF, 0
0027 RETURN
þÔÏ ÚÁ ÆyÎËÃÉÑ string_table É ÏÔËyÄÁ ÏÎÁ ÂÅpÅÔÓÑ y ÍÅÎÑ ÎÉ ÍÁÌÅÊÛÅÇÏ ÐpÅÄÓÔÁ×ÌÅÎÉÑ. ÷ ÍÏÅÍ ËÏÄÅ ÎÉÞÅÇÏ ÐÏÈÏÖÅÇÏ ÎÅÔ. ë ÔÏÍy ÖÅ ÏÎÁ × ÓÁÍÏÍ ÎÁÞÁÌÅ ËÏÄÁ, ÇÄÅ hi-tech ÇÅÎÅpÉpyÅÔ ÞÔÏ-ÔÏ Ó×ÏÅ, ×ÉÄÉÍÏ ÄÌÑ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ËpÉÓÔÁÌÌÁ. óÎÑÔÉÅ É yÓÔÁÎÏ×ËÁ ÇÁÌÏÞÅË × ÎÁÓÔpÏÊËÁÈ ËÏÍÐÉÌÑÔÏpÁ É ÌÉÎËÅpÁ ÎÉÞÅÇÏ ÎÅ ÄÁÀÔ. :( ëÁË ÓÄÅÌÁÔØ, ÞÔÏÂÙ ÐpÏÉÓÈÏÄÉÌ ×ÙÚÏ× ÎyÖÎÏÊ ÆyÎËÃÉÉ?
ðÏËÁ.