{"id":636,"date":"2014-02-25T17:00:43","date_gmt":"2014-02-25T08:00:43","guid":{"rendered":"http:\/\/www.gvc-on.net\/?page_id=636"},"modified":"2014-02-25T17:00:43","modified_gmt":"2014-02-25T08:00:43","slug":"gvc%e7%94%a8%e5%85%b1%e9%80%9a%e3%83%95%e3%82%a1%e3%82%a4%e3%83%abgvc_init-c","status":"publish","type":"page","link":"https:\/\/www.gvc-on.net\/?page_id=636","title":{"rendered":"GVC\u7528\u5171\u901a\u30d5\u30a1\u30a4\u30eb(gvc_init.c)"},"content":{"rendered":"<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\/\/ --------------------------------------------------\r\n\/\/ Global Versatile Controler http:\/\/www.gvc-on.net\/\r\n\/\/ --------------------------------------------------\r\n\/\/ --------------------------------------------------\r\n\/\/ Revision Memo (Y.M.D Editor\/Memo)\r\n\/\/ --------------------------------------------------\r\n\/\/ \r\n\/\/ 2013.05.08 T.Kabu\r\n\/\/ GVC Rev.2\u3068\u3057\u3066\u306e\u3082\u308d\u3082\u308d\u3092\u5b9a\u7fa9\r\n\/\/ \r\n\r\n\/\/---------------------------------------------------\r\n\/\/ Include Header\r\n\/\/---------------------------------------------------\r\n\/\/ ----------------------------------------\r\n\/\/ Standard Header\r\n\/\/ ----------------------------------------\r\n#include &lt;xc.h&gt;\r\n#include &lt;plib.h&gt;\r\n#include &lt;htc.h&gt;\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;string.h&gt;\r\n\r\n#include &lt;limits.h&gt;     \/\/ CHAR_BIT\r\n\r\n\/\/ ----------------------------------------\r\n\/\/ User Header\r\n\/\/ ----------------------------------------\r\n\/\/ PIC Parameter define and initialize\r\n#include &quot;pic_init.h&quot;\r\n\r\n\/\/ GVC Parameter define and initialize\r\n#include &quot;gvc_init.h&quot;\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Variable Param\r\n\/\/ --------------------------------------------------\r\n\/\/ CRC-8-CCITT\u30c6\u30fc\u30d6\u30eb\u306e\u914d\u5217\r\n\/*\r\nstatic unsigned char CRC8Table&#x5B; 256 ] = {\r\n\t0x00, 0x8D, 0x97, 0x1A, 0xA3, 0x2E, 0x34, 0xB9,\r\n\t0xCB, 0x46, 0x5C, 0xD1, 0x68, 0xE5, 0xFF, 0x72,\r\n\t0x1B, 0x96, 0x8C, 0x01, 0xB8, 0x35, 0x2F, 0xA2,\r\n\t0xD0, 0x5D, 0x47, 0xCA, 0x73, 0xFE, 0xE4, 0x69,\r\n\t0x36, 0xBB, 0xA1, 0x2C, 0x95, 0x18, 0x02, 0x8F,\r\n\t0xFD, 0x70, 0x6A, 0xE7, 0x5E, 0xD3, 0xC9, 0x44,\r\n\t0x2D, 0xA0, 0xBA, 0x37, 0x8E, 0x03, 0x19, 0x94,\r\n\t0xE6, 0x6B, 0x71, 0xFC, 0x45, 0xC8, 0xD2, 0x5F,\r\n\t\r\n\t0x6C, 0xE1, 0xFB, 0x76, 0xCF, 0x42, 0x58, 0xD5,\r\n\t0xA7, 0x2A, 0x30, 0xBD, 0x04, 0x89, 0x93, 0x1E,\r\n\t0x77, 0xFA, 0xE0, 0x6D, 0xD4, 0x59, 0x43, 0xCE,\r\n\t0xBC, 0x31, 0x2B, 0xA6, 0x1F, 0x92, 0x88, 0x05,\r\n\t0x5A, 0xD7, 0xCD, 0x40, 0xF9, 0x74, 0x6E, 0xE3,\r\n\t0x91, 0x1C, 0x06, 0x8B, 0x32, 0xBF, 0xA5, 0x28,\r\n\t0x41, 0xCC, 0xD6, 0x5B, 0xE2, 0x6F, 0x75, 0xF8,\r\n\t0x8A, 0x07, 0x1D, 0x90, 0x29, 0xA4, 0xBE, 0x33,\r\n\t\r\n\t0xD8, 0x55, 0x4F, 0xC2, 0x7B, 0xF6, 0xEC, 0x61,\r\n\t0x13, 0x9E, 0x84, 0x09, 0xB0, 0x3D, 0x27, 0xAA,\r\n\t0xC3, 0x4E, 0x54, 0xD9, 0x60, 0xED, 0xF7, 0x7A,\r\n\t0x08, 0x85, 0x9F, 0x12, 0xAB, 0x26, 0x3C, 0xB1,\r\n\t0xEE, 0x63, 0x79, 0xF4, 0x4D, 0xC0, 0xDA, 0x57,\r\n\t0x25, 0xA8, 0xB2, 0x3F, 0x86, 0x0B, 0x11, 0x9C,\r\n\t0xF5, 0x78, 0x62, 0xEF, 0x56, 0xDB, 0xC1, 0x4C,\r\n\t0x3E, 0xB3, 0xA9, 0x24, 0x9D, 0x10, 0x0A, 0x87,\r\n\t\r\n\t0xB4, 0x39, 0x23, 0xAE, 0x17, 0x9A, 0x80, 0x0D,\r\n\t0x7F, 0xF2, 0xE8, 0x65, 0xDC, 0x51, 0x4B, 0xC6,\r\n\t0xAF, 0x22, 0x38, 0xB5, 0x0C, 0x81, 0x9B, 0x16,\r\n\t0x64, 0xE9, 0xF3, 0x7E, 0xC7, 0x4A, 0x50, 0xDD,\r\n\t0x82, 0x0F, 0x15, 0x98, 0x21, 0xAC, 0xB6, 0x3B,\r\n\t0x49, 0xC4, 0xDE, 0x53, 0xEA, 0x67, 0x7D, 0xF0,\r\n\t0x99, 0x14, 0x0E, 0x83, 0x3A, 0xB7, 0xAD, 0x20,\r\n\t0x52, 0xDF, 0xC5, 0x48, 0xF1, 0x7C, 0x66, 0xEB,\r\n};\r\n*\/\r\n\r\n__EEPROM_DATA(\t0x00, 0x8D, 0x97, 0x1A, 0xA3, 0x2E, 0x34, 0xB9);\r\n__EEPROM_DATA(\t0xCB, 0x46, 0x5C, 0xD1, 0x68, 0xE5, 0xFF, 0x72);\r\n__EEPROM_DATA(\t0x1B, 0x96, 0x8C, 0x01, 0xB8, 0x35, 0x2F, 0xA2);\r\n__EEPROM_DATA(\t0xD0, 0x5D, 0x47, 0xCA, 0x73, 0xFE, 0xE4, 0x69);\r\n__EEPROM_DATA(\t0x36, 0xBB, 0xA1, 0x2C, 0x95, 0x18, 0x02, 0x8F);\r\n__EEPROM_DATA(\t0xFD, 0x70, 0x6A, 0xE7, 0x5E, 0xD3, 0xC9, 0x44);\r\n__EEPROM_DATA(\t0x2D, 0xA0, 0xBA, 0x37, 0x8E, 0x03, 0x19, 0x94);\r\n__EEPROM_DATA(\t0xE6, 0x6B, 0x71, 0xFC, 0x45, 0xC8, 0xD2, 0x5F);\r\n\t\r\n__EEPROM_DATA(\t0x6C, 0xE1, 0xFB, 0x76, 0xCF, 0x42, 0x58, 0xD5);\r\n__EEPROM_DATA(\t0xA7, 0x2A, 0x30, 0xBD, 0x04, 0x89, 0x93, 0x1E);\r\n__EEPROM_DATA(\t0x77, 0xFA, 0xE0, 0x6D, 0xD4, 0x59, 0x43, 0xCE);\r\n__EEPROM_DATA(\t0xBC, 0x31, 0x2B, 0xA6, 0x1F, 0x92, 0x88, 0x05);\r\n__EEPROM_DATA(\t0x5A, 0xD7, 0xCD, 0x40, 0xF9, 0x74, 0x6E, 0xE3);\r\n__EEPROM_DATA(\t0x91, 0x1C, 0x06, 0x8B, 0x32, 0xBF, 0xA5, 0x28);\r\n__EEPROM_DATA(\t0x41, 0xCC, 0xD6, 0x5B, 0xE2, 0x6F, 0x75, 0xF8);\r\n__EEPROM_DATA(\t0x8A, 0x07, 0x1D, 0x90, 0x29, 0xA4, 0xBE, 0x33);\r\n\t\r\n__EEPROM_DATA(\t0xD8, 0x55, 0x4F, 0xC2, 0x7B, 0xF6, 0xEC, 0x61);\r\n__EEPROM_DATA(\t0x13, 0x9E, 0x84, 0x09, 0xB0, 0x3D, 0x27, 0xAA);\r\n__EEPROM_DATA(\t0xC3, 0x4E, 0x54, 0xD9, 0x60, 0xED, 0xF7, 0x7A);\r\n__EEPROM_DATA(\t0x08, 0x85, 0x9F, 0x12, 0xAB, 0x26, 0x3C, 0xB1);\r\n__EEPROM_DATA(\t0xEE, 0x63, 0x79, 0xF4, 0x4D, 0xC0, 0xDA, 0x57);\r\n__EEPROM_DATA(\t0x25, 0xA8, 0xB2, 0x3F, 0x86, 0x0B, 0x11, 0x9C);\r\n__EEPROM_DATA(\t0xF5, 0x78, 0x62, 0xEF, 0x56, 0xDB, 0xC1, 0x4C);\r\n__EEPROM_DATA(\t0x3E, 0xB3, 0xA9, 0x24, 0x9D, 0x10, 0x0A, 0x87);\r\n\t\r\n__EEPROM_DATA(\t0xB4, 0x39, 0x23, 0xAE, 0x17, 0x9A, 0x80, 0x0D);\r\n__EEPROM_DATA(\t0x7F, 0xF2, 0xE8, 0x65, 0xDC, 0x51, 0x4B, 0xC6);\r\n__EEPROM_DATA(\t0xAF, 0x22, 0x38, 0xB5, 0x0C, 0x81, 0x9B, 0x16);\r\n__EEPROM_DATA(\t0x64, 0xE9, 0xF3, 0x7E, 0xC7, 0x4A, 0x50, 0xDD);\r\n__EEPROM_DATA(\t0x82, 0x0F, 0x15, 0x98, 0x21, 0xAC, 0xB6, 0x3B);\r\n__EEPROM_DATA(\t0x49, 0xC4, 0xDE, 0x53, 0xEA, 0x67, 0x7D, 0xF0);\r\n__EEPROM_DATA(\t0x99, 0x14, 0x0E, 0x83, 0x3A, 0xB7, 0xAD, 0x20);\r\n__EEPROM_DATA(\t0x52, 0xDF, 0xC5, 0x48, 0xF1, 0x7C, 0x66, 0xEB);\r\n\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Function prototype\r\n\/\/ --------------------------------------------------\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Sub Routine (gvc_init.c)\r\n\/\/ --------------------------------------------------\r\n\/\/ ------------------------------\r\n\/\/ STATUS LED Brink (ON=300ms\/OFF=100ms)\r\n\/\/ ------------------------------\r\nvoid led_status_brink(char brink)\r\n{\r\n\tchar count;\r\n\t\r\n\t\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9LED\u3092\u70b9\u706f(300ms)\/\u6d88\u706f(100ms)\u3092\u7e70\u308a\u8fd4\u3059\r\n\tfor (count = 0; count &lt; brink; count ++)\r\n\t{\r\n\t\tPORT_STATUS_LED = LED_ON;\r\n\t\tDelay_10ms(30);\t\/\/ 300ms\u5f85\u3064\r\n\t\tPORT_STATUS_LED = LED_OFF;\r\n\t\tDelay_10ms(10);\t\/\/ 100ms\u5f85\u3064\r\n\t}\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ RESULT LED Brink (ON=300ms\/OFF=100ms)\r\n\/\/ ------------------------------\r\nvoid led_result_brink(char brink)\r\n{\r\n\tchar count;\r\n\t\r\n\t\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9LED\u3092\u70b9\u706f(300ms)\/\u6d88\u706f(100ms)\u3092\u7e70\u308a\u8fd4\u3059\r\n\tfor (count = 0; count &lt; brink; count ++)\r\n\t{\r\n\t\tPORT_RESULT_LED = LED_ON;\r\n\t\tDelay_10ms(30);\t\/\/ 300ms\u5f85\u3064\r\n\t\tPORT_RESULT_LED = LED_OFF;\r\n\t\tDelay_10ms(10);\t\/\/ 100ms\u5f85\u3064\r\n\t}\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ STATUS\/RESULT LED Brink (ON=300ms\/OFF=100ms)\r\n\/\/ ------------------------------\r\nvoid led_brink(char brink)\r\n{\r\n\tchar count;\r\n\t\r\n\t\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9LED\/\u30ea\u30b6\u30eb\u30c8LED\u3092\u70b9\u706f(300ms)\/\u6d88\u706f(100ms)\u3092\u7e70\u308a\u8fd4\u3059\r\n\tfor (count = 0; count &lt; brink; count ++)\r\n\t{\r\n\t\t\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9LED\u3092\u70b9\u6ec5\r\n\t\tled_status_brink(1);\r\n\t\r\n\t\t\/\/ \u30ea\u30b6\u30eb\u30c8LED\u3092\u70b9\u6ec5\r\n\t\tled_result_brink(1);\r\n\t}\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ LED Brink (Start Up Sign)\r\n\/\/ ------------------------------\r\nvoid led_brink3()\r\n{\r\n\t\/\/ ----------------------------------------\r\n\t\/\/ \u30e2\u30cb\u30bf\u30fcLED\u3092\u70b9\u706f(\u59cb\u52d5\u306e\u5408\u56f3)\r\n\t\/\/ ----------------------------------------\r\n\tPORT_STATUS_LED = LED_ON;\r\n\tPORT_RESULT_LED = LED_ON;\r\n\tDelay_10ms(100);\t\/\/ 1000ms\u5f85\u3064\r\n\tPORT_STATUS_LED = LED_OFF;\r\n\tPORT_RESULT_LED = LED_OFF;\r\n\tDelay_10ms(10);\t\/\/ 100ms\u5f85\u3064\r\n\t\r\n\t\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9LED\u3092\u70b9\u6ec5\r\n\tled_status_brink(1);\r\n\t\r\n\t\/\/ \u30ea\u30b6\u30eb\u30c8LED\u3092\u70b9\u6ec5\r\n\tled_result_brink(1);\r\n\t\r\n\t\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9LED\u3092\u70b9\u6ec5\r\n\tled_status_brink(1);\r\n\t\r\n\t\/\/ \u30ea\u30b6\u30eb\u30c8LED\u3092\u70b9\u6ec5\r\n\tled_result_brink(1);\r\n\t\r\n\tPORT_STATUS_LED = LED_ON;\r\n\tPORT_RESULT_LED = LED_ON;\r\n\tDelay_10ms(100);\t\/\/ 1000ms\u5f85\u3064\r\n\tPORT_STATUS_LED = LED_OFF;\r\n\tPORT_RESULT_LED = LED_OFF;\r\n\tDelay_10ms(10);\t\/\/ 100ms\u5f85\u3064\r\n\t\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ LED light\r\n\/\/ ------------------------------\r\nvoid led_light(char long_light, char short_light)\r\n{\r\n\t\/\/ \u9577\u6642\u9593\u70b9\u706f\u30eb\u30fc\u30d7\r\n\twhile (long_light &gt; 0)\r\n\t{\r\n\t\t\/\/\u30e2\u30cb\u30bf\u30fcLED\u3092\u70b9\u706f\r\n\t\tPORT_RESULT_LED = LED_ON;\r\n\t\tDelay_10ms(50);\r\n\t\t\/\/ \u30e2\u30cb\u30bf\u30fcLED\u3092\u6d88\u706f\r\n\t\tPORT_RESULT_LED = LED_OFF;\r\n\t\tDelay_10ms(10);\r\n\t\t\/\/ long_light\u3092-1\r\n\t\tlong_light --;\r\n\t}\r\n\t\/\/ \u77ed\u6642\u9593\u70b9\u706f\u30eb\u30fc\u30d7\r\n\twhile (short_light &gt; 0)\r\n\t{\r\n\t\t\/\/\u30e2\u30cb\u30bf\u30fcLED\u3092\u70b9\u706f\r\n\t\tPORT_RESULT_LED = LED_ON;\r\n\t\tDelay_10ms(20);\r\n\t\t\/\/ \u30e2\u30cb\u30bf\u30fcLED\u3092\u6d88\u706f\r\n\t\tPORT_RESULT_LED = LED_OFF;\r\n\t\tDelay_10ms(10);\r\n\t\t\/\/ short_light\u3092-1\r\n\t\tshort_light --;\r\n\t}\r\n\tDelay_10ms(20);\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ CRC8\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u8a08\u7b97\r\n\/\/ ------------------------------\r\nunsigned char GetCRC8( const void *buff, size_t size )\r\n{\r\n\tunsigned char *data = (unsigned char *)buff;\r\n\tunsigned char  crc8 = 0x00;\r\n\t\r\n\twhile ( 1 )\r\n\t{\r\n\t\tif (size == 0)\r\n\t\t{\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\/\/\/\t\t\tcrc8 = CRC8Table&#x5B; crc8 ^ *data ];\r\n\t\t\tcrc8 = EEPROM_READ( crc8 ^ *data );\r\n\t\t\tdata++;\r\n\t\t\tsize--;\r\n\t\t}\r\n\t}\r\n\treturn crc8;\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Send CR\r\n\/\/ ------------------------------\r\nvoid send_cr(void)\r\n{\r\n\twhile(TX1IF == 0);\t\/\/ \u9001\u4fe1\u53ef\u80fd\u306b\u306a\u308b\u307e\u3067\u5f85\u3064\r\n\tTXREG1 = 0x0d;\t\t\/\/ CR\u9001\u4fe1\u3059\u308b\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Send LF\r\n\/\/ ------------------------------\r\nvoid send_lf(void)\r\n{\r\n\twhile(TX1IF == 0);\t\/\/ \u9001\u4fe1\u53ef\u80fd\u306b\u306a\u308b\u307e\u3067\u5f85\u3064\r\n\tTXREG1 = 0x0a;\t\t\/\/ LF\u9001\u4fe1\u3059\u308b\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Send CR\/LF\r\n\/\/ ------------------------------\r\nvoid send_crlf(void)\r\n{\r\n\tsend_cr();\r\n\tsend_lf();\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Send STR DATA\r\n\/\/ ------------------------------\r\nvoid send_strdata(const char * strdata)\r\n{\r\n\twhile ( 1 )\r\n\t{\r\n\t\tif (*strdata == 0)\r\n\t\t{\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\twhile(TX1IF == 0);\t\/\/ \u9001\u4fe1\u53ef\u80fd\u306b\u306a\u308b\u307e\u3067\u5f85\u3064\r\n\t\t\tTXREG1 = *strdata;\r\n\t\t\tstrdata++;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Send intdata\r\n\/\/ ------------------------------\r\nvoid send_intdata(int int_data)\r\n{\r\n\t\/\/ 1\u30d0\u30a4\u30c8\u30c7\u30fc\u30bf\u3092HEX\u306b\u5909\u63db\u3057\u3066\u9001\u4fe1\r\n\tchar\tstr_data&#x5B;7];\r\n\tint\t\tstr_len;\r\n\tint\t\tstr_pos = 0;\r\n\t\r\n\tstr_len = sprintf(str_data, &quot;%d&quot;, int_data);\r\n\t\r\n\twhile(str_len)\r\n\t{\r\n\t\twhile(TX1IF == 0);\t\t\t\t\t\/\/ \u9001\u4fe1\u53ef\u80fd\u306b\u306a\u308b\u307e\u3067\u5f85\u3064\r\n\t\tTXREG1 = str_data&#x5B;str_pos];\t\t\t\/\/ \u4e00\u6587\u5b57\u9001\u4fe1\r\n\t\tstr_pos ++;\t\t\t\t\t\t\t\/\/ \u30dd\u30a4\u30f3\u30bf\u3092\u4e00\u3064\u9032\u3081\u308b\r\n\t\tstr_len --;\t\t\t\t\t\t\t\/\/ \u6587\u5b57\u5217\u9577\u3092-1\u3059\u308b\r\n\t}\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Send DATA\r\n\/\/ ------------------------------\r\nvoid send_serial(const char * data, int data_len)\r\n{\r\n\twhile (data_len)\r\n\t{\r\n\t\twhile(TX1IF == 0);\t\/\/ \u9001\u4fe1\u53ef\u80fd\u306b\u306a\u308b\u307e\u3067\u5f85\u3064\r\n\t\tTXREG1 = *data;\r\n\t\tdata++;\r\n\t\tdata_len--;\r\n\t}\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Send hexdata\r\n\/\/ ------------------------------\r\nvoid send_hexdata(char char_data)\r\n{\r\n\t\/\/ 1\u30d0\u30a4\u30c8\u30c7\u30fc\u30bf\u3092HEX\u306b\u5909\u63db\u3057\u3066\u9001\u4fe1\r\n\tchar\thex_data&#x5B;3];\r\n\t\r\n\/\/\titoa((char *)hex_data, (int)char_data, 16);\r\n\tsprintf((char *)hex_data, &quot;%0.2X&quot;, (int)char_data);\t\/\/ C\u3060\u3068\u3053\u3046\u3060\u3063\u3051\u304b\u2026!?\r\n\t\r\n\twhile(TX1IF == 0);\t\/\/ \u9001\u4fe1\u53ef\u80fd\u306b\u306a\u308b\u307e\u3067\u5f85\u3064\r\n\tTXREG1 = hex_data&#x5B;0];\t\t\/\/ CR\u9001\u4fe1\u3059\u308b\r\n\twhile(TX1IF == 0);\t\/\/ \u9001\u4fe1\u53ef\u80fd\u306b\u306a\u308b\u307e\u3067\u5f85\u3064\r\n\tTXREG1 = hex_data&#x5B;1];\t\t\/\/ LF\u9001\u4fe1\u3059\u308b\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ I2C wait Clear buffer\r\n\/\/ ------------------------------\r\nvoid i2c_waitClearbuffer()\r\n{\r\n\t\/\/ I2C\u304c\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u3067\u306a\u3044\u304b\u3001\u9001\u4fe1\u72b6\u614b\u3060\u3063\u305f\u308a\u53d7\u4fe1\u30d0\u30c3\u30d5\u30a1\u306b\u4f55\u304b\u3042\u308b\u9593\u306f\u5f85\u3064\r\n\twhile((SSP1CON2 &amp; 0b00011111) | (SSP1STAT &amp; 0b00000101));\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ I2C begin Transmission\r\n\/\/ ------------------------------\r\nvoid i2c_beginTransmission()\r\n{\r\n\t\/\/ I2C wait Clear buffer\r\n\ti2c_waitClearbuffer();\r\n\t\/\/ I2C START CONDITION\r\n\tSSP1CON2bits.SEN = 1 ;\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ I2C end Transmission\r\n\/\/ ------------------------------\r\nvoid i2c_endTransmission()\r\n{\r\n\t\/\/ I2C wait Clear buffer\r\n\ti2c_waitClearbuffer();\r\n\t\/\/ I2C STOP CONDITION\r\n\tSSP1CON2bits.PEN = 1 ;\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ I2C write\r\n\/\/ ------------------------------\r\nint i2c_write(char target_addr, char * data, int data_length)\r\n{\r\n\tunsigned int data_pos = -1;\r\n\t\r\n\t\/\/ I2C begin Transmission\r\n\ti2c_beginTransmission();\r\n\t\r\n\t\/\/ I2C wait Clear buffer\r\n\ti2c_waitClearbuffer();\r\n\t\r\n\t\/\/ \u3068\u308a\u3042\u3048\u305a\u3042\u308a\u3048\u306a\u3044\u30c0\u30df\u30fc\u30c7\u30fc\u30bf\u3092\u8a2d\u5b9a\r\n\treg_SSP1STAT = 0b11111111;\r\n\t\/\/ \u30a2\u30c9\u30ec\u30b9\u3092\u9001\u4fe1 R\/W=0\r\n\tSSP1BUF = target_addr &lt;&lt; 1;\r\n\t\r\n\t\/\/ reg_SSP1STAT\u304c\u5909\u5316\u3059\u308b\u307e\u3067\u5f85\u3064\r\n\twhile(reg_SSP1STAT == 0b11111111);\r\n\t\/\/ \u3082\u3057ACKSTATUS\u304cACK(=0)\u306a\u3089\r\n\tif (SSP1CON2bits.ACKSTAT == 0)\r\n\t{\r\n\t\t\/\/ data\u30921\u30d0\u30a4\u30c8\u305a\u3064\u9001\u4fe1\u3059\u308b\r\n\t\tfor (data_pos = 0; data_pos &lt; data_length ; data_pos ++)\r\n\t\t{\r\n\t\t\t\/\/ I2C wait Clear buffer\r\n\t\t\ti2c_waitClearbuffer();\r\n\t\t\t\r\n\t\t\t\/\/ \u3068\u308a\u3042\u3048\u305a\u3042\u308a\u3048\u306a\u3044\u30c0\u30df\u30fc\u30c7\u30fc\u30bf\u3092\u8a2d\u5b9a\r\n\t\t\treg_SSP1STAT = 0b11111111;\r\n\t\t\t\/\/ \u30c7\u30fc\u30bf\u3092\u9001\u4fe1\r\n\t\t\tSSP1BUF = (char)data&#x5B;data_pos];\r\n\t\t\t\r\n\t\t\t\/\/ reg_SSP1STAT\u304c\u5909\u5316\u3059\u308b\u307e\u3067\u5f85\u3064\r\n\t\t\twhile(reg_SSP1STAT == 0b11111111);\r\n\t\t\t\r\n\t\t\t\/\/ \u3082\u3057ACKSTATUS\u304cNACK\u3067\u306f\u306a\u3044(==0:ACK)\u306a\u3089\r\n\t\t\tif (SSP1CON2bits.ACKSTAT == 0)\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u306a\u306b\u3082\u3057\u306a\u3044\r\n\t\t\t}\r\n\t\t\t\/\/ \u305d\u3046\u3067\u306f\u306a\u304fACKSTATUS\u304cNACK\u306a\u3089\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t\/\/ \u30b9\u30ec\u30fc\u30d6\u304cNACK\u3092\u8fd4\u3057\u3066\u304d\u305f\u5834\u5408\u306e\u51e6\u7406\r\n\t\t\t\t\/\/ \u547c\u3073\u51fa\u3057\u5143\u306b\u30a8\u30e9\u30fc\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u8fd4\u3057\u305f\u65b9\u304c\u3044\u3044\u3002\u305d\u308c\u3068\u3082\u518d\u51e6\u7406\u3057\u307e\u3059\uff1f\r\n\t\t\t\treturn data_pos;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\/\/ I2C end Transmission\r\n\ti2c_endTransmission();\r\n\t\r\n\treturn data_pos;\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ I2C read\r\n\/\/ ------------------------------\r\nint i2c_read(char target_addr, char * data, int data_length)\r\n{\r\n\tunsigned int data_pos = -1;\r\n\t\r\n\t\/\/ I2C begin Transmission\r\n\ti2c_beginTransmission();\r\n\t\r\n\t\/\/ I2C wait Clear buffer\r\n\ti2c_waitClearbuffer();\r\n\t\r\n\t\/\/ \u3068\u308a\u3042\u3048\u305a\u3042\u308a\u3048\u306a\u3044\u30c0\u30df\u30fc\u30c7\u30fc\u30bf\u3092\u8a2d\u5b9a\r\n\treg_SSP1STAT = 0b11111111;\r\n\t\/\/ \u30a2\u30c9\u30ec\u30b9\u3092\u9001\u4fe1 R\/W=1\r\n\tSSP1BUF = (char)((target_addr &lt;&lt; 1) + 1);\r\n\t\r\n\t\/\/ reg_SSP1STAT\u304c\u5909\u5316\u3059\u308b\u307e\u3067\u5f85\u3064\r\n\twhile(reg_SSP1STAT == 0b11111111);\r\n\t\/\/ \u3082\u3057ACKSTATUS\u304cACK(=0)\u306a\u3089\r\n\tif (SSP1CON2bits.ACKSTAT == 0)\r\n\t{\r\n\t\t\/\/ data\u30921\u30d0\u30a4\u30c8\u305a\u3064\u53d7\u4fe1\u3059\u308b\r\n\t\tfor (data_pos = 0; data_pos &lt; data_length ; data_pos++)\r\n\t\t{\r\n\t\t\t\/\/ I2C wait Clear buffer\r\n\t\t\ti2c_waitClearbuffer();\r\n\t\t\t\r\n\t\t\t\/\/ \u53d7\u4fe1\u3092\u8a31\u53ef\u3059\u308b\r\n\t\t\tSSP1CON2bits.RCEN = 1;\r\n\t\t\t\r\n\t\t\t\/\/ I2C\u304c\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u3067\u306a\u3044\u304b\u3001\u9001\u4fe1\u72b6\u614b\u3060\u3063\u305f\u308a\u53d7\u4fe1\u30d0\u30c3\u30d5\u30a1\u306b\u4f55\u304b\u304f\u308b\u307e\u3067\u5f85\u3064\r\n\t\t\twhile((SSP1CON2 &amp; 0b00011111) | (SSP1STAT &amp; 0b00000100));\r\n\t\t\t\r\n\t\t\t\/\/ \u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\r\n\t\t\tdata&#x5B;data_pos] = SSP1BUF;\r\n\t\t\t\r\n\t\t\t\/\/ I2C wait Clear buffer\r\n\t\t\ti2c_waitClearbuffer();\r\n\t\t\t\r\n\t\t\t\/\/ \u6b21\u306e\u30c7\u30fc\u30bf\u3092\u8981\u6c42\u3059\u308b\u306e\u3067ACK\u30c7\u30fc\u30bf\u306fACK(=0)\u3092\u8a2d\u5b9a\r\n\t\t\tSSP1CON2bits.ACKDT = 0 ;\r\n\t\t\t\/\/ ACK\u30c7\u30fc\u30bf(ACKDT)\u3092\u8fd4\u3059\r\n\t\t\tSSP1CON2bits.ACKEN = 1 ;\r\n\t\t}\r\n\t\t\/\/ I2C wait Clear buffer\r\n\t\ti2c_waitClearbuffer();\r\n\t\t\r\n\t\t\/\/ \u53d7\u4fe1\u3092\u8a31\u53ef\u3059\u308b\r\n\t\tSSP1CON2bits.RCEN = 1;\r\n\t\t\r\n\t\t\/\/ I2C\u304c\u30a2\u30a4\u30c9\u30eb\u72b6\u614b\u3067\u306a\u3044\u304b\u3001\u9001\u4fe1\u72b6\u614b\u3060\u3063\u305f\u308a\u53d7\u4fe1\u30d0\u30c3\u30d5\u30a1\u306b\u4f55\u304b\u304f\u308b\u307e\u3067\u5f85\u3064\r\n\t\twhile((SSP1CON2 &amp; 0b00011111) | (SSP1STAT &amp; 0b00000100));\r\n\t\t\r\n\t\t\/\/ \u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\r\n\t\tdata&#x5B;data_pos] = SSP1BUF;\r\n\t\t\r\n\t\t\/\/ \u30c7\u30fc\u30bf\u30dd\u30a4\u30f3\u30bf\u3092\u52a0\u7b97\r\n\t\tdata_pos++;\r\n\t\t\r\n\t\t\/\/ I2C wait Clear buffer\r\n\t\ti2c_waitClearbuffer();\r\n\t\t\r\n\t\t\/\/ \u6b21\u306e\u30c7\u30fc\u30bf\u306f\u8981\u3089\u306a\u3044\u306e\u3067ACK\u30c7\u30fc\u30bf\u306fNOACK(=1)\u3092\u8a2d\u5b9a\r\n\t\tSSP1CON2bits.ACKDT = 1;\r\n\t\t\/\/ ACK\u30c7\u30fc\u30bf(ACKDT)\u3092\u8fd4\u3059\r\n\t\tSSP1CON2bits.ACKEN = 1 ;\r\n\t}\r\n\t\r\n\t\/\/ I2C end Transmission\r\n\ti2c_endTransmission();\r\n\t\r\n\treturn data_pos;\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ I2C Scan\r\n\/\/ ------------------------------\r\nchar i2c_slave_check(unsigned char target_addr)\r\n{\r\n\tchar result;\t\t\t\t\t\t\t\t\t\t\/\/ \u7d50\u679c\r\n\t\r\n\t\/\/ \u6307\u5b9a\u3055\u308c\u305f\u30bf\u30fc\u30b2\u30c3\u30c8\u304b\u3089ACK\u304c\u5e30\u3063\u3066\u304f\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\r\n\tif ((target_addr &gt; 0x7f) | (target_addr == 0))\r\n\t{\r\n\t\treturn '-';\r\n\t}\r\n\t\r\n\t\/\/ I2C begin Transmission\r\n\ti2c_beginTransmission();\r\n\t\r\n\t\/\/ I2C wait Clear buffer\r\n\ti2c_waitClearbuffer();\r\n\t\r\n\t\/\/ \u3068\u308a\u3042\u3048\u305a\u3042\u308a\u3048\u306a\u3044\u30c0\u30df\u30fc\u30c7\u30fc\u30bf\u3092\u8a2d\u5b9a\r\n\treg_SSP1STAT = 0b11111111;\r\n\t\/\/ \u30a2\u30c9\u30ec\u30b9\u3092\u9001\u4fe1 R\/W=0\r\n\tSSP1BUF = target_addr &lt;&lt; 1;\r\n\t\r\n\t\/\/ reg_SSP1STAT\u304c\u5909\u5316\u3059\u308b\u307e\u3067\u5f85\u3064\r\n\twhile(reg_SSP1STAT == 0b11111111);\r\n\t\r\n\t\/\/ \u30bf\u30fc\u30b2\u30c3\u30c8\u30b9\u30ec\u30fc\u30d6\u304b\u3089ACK\u3092\u53d7\u4fe1\u3057\u305f\u3089\r\n\tif (SSP1CON2bits.ACKSTAT == 0)\r\n\t{\r\n\t\t\/\/ \u3088\u304b\u3063\u305f\u3088\u304b\u3063\u305f\r\n\t\tresult = 'o';\r\n\t}\r\n\t\/\/ ACK\u3067\u306f\u306a\u304b\u3063\u305f\u3089\r\n\telse\r\n\t{\r\n\t\t\/\/ \u518d\u51e6\u7406\u3057\u307e\u3059\uff1f\r\n\t\tresult = 'x';\r\n\t}\r\n\t\r\n\t\/\/ I2C end Transmission\r\n\ti2c_endTransmission();\r\n\t\r\n\t\/\/ \u7d50\u679c\u3092\u8fd4\u3057\u3066\u7d42\u308f\u308b\r\n\treturn result;\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \/\/ Global Versatile Controler http:\/\/www.gvc-on.net\/ \/\/  &hellip; <a href=\"https:\/\/www.gvc-on.net\/?page_id=636\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":622,"menu_order":21,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-636","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=636"}],"version-history":[{"count":1,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/636\/revisions"}],"predecessor-version":[{"id":637,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/636\/revisions\/637"}],"up":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/622"}],"wp:attachment":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}