📄 iic.lst
字号:
1:
2: /* ---------------------GESTIONE BUS I2C--------------------- */
3: /* Author : toniobr Date : 11/2003 */
4: /* ---------------------------------------------------------- */
5:
6: #include <pic.h>
7: #include "delay.h"
8: #define PORTBIT(adr,bit) ((unsigned)(&adr)*8+(bit))
9:
10: static bit SCL @ PORTBIT(PORTA,0); //porta per i dati rx e tx
11: static bit SDA @ PORTBIT(PORTA,1); //porta per il clock
12: static bit TRISA_SDA @ PORTBIT(TRISA,1);
13:
14:
15: #define TCLOCK 5 // 0-255 uSec (5 uS equivale a una frequenza di 100 Khz)
16:
17: /*Comando start*/
18: iic_start()
19: {
20: TRISA_SDA=0;
21: SDA=1;
22: SCL=1;
23: DelayUs(TCLOCK);
24: SDA=0;
25: DelayUs(TCLOCK);
26: SCL=0;
27: DelayUs(TCLOCK);
28: }
29:
30: /* Comando stop*/
31: iic_stop()
32: {
33: TRISA_SDA=0;
34: SCL=1;
35: DelayUs(TCLOCK);
36: SDA=1;
37: }
38:
39: /* Legge lo stato del bit di acknoveldge*/
40: char iic_r_ack()
41: {
42: TRISA_SDA=1;
43: SCL=1;
44: DelayUs(TCLOCK);
45: if(!SDA){
46: SCL=0;
47: DelayUs(TCLOCK);
48: return 0;
49: }
50: else{
51: SCL=0;
52: DelayUs(TCLOCK);
53: return 1;
54: }
55: }
56:
57: /* Invia il bit di ack */
58: iic_w_ack(char value)
59: {
60: TRISA_SDA=0;
61: SDA=value;
62: SCL=1;
63: DelayUs(TCLOCK);
64: SCL=0;
65: DelayUs(TCLOCK);
66: }
67:
68: /* Scrive su un device*/
69: iic_write(char value)
70: {
71: char i;
72: TRISA_SDA=0;
73: for(i=1;i<=8;i++) //invia gli 8 bit
74: {
75: //SDA=(bit)(value & 0b10000000); //msb first da provare
76: if (value&0b10000000)
77: SDA=1;
78: else
79: SDA=0;
80: value=value<<1;
81: SCL=1;
82: DelayUs(TCLOCK);
83: SCL=0;
84: DelayUs(TCLOCK);
85: }
86: }
87:
88: /* Legge da un device*/
89: char iic_read()
90: {
91: char i;
92: char value=0;
93: TRISA_SDA=1;
94: for(i=1;i<=8;i++) //riceve gli 8 bit
95: {
96: SCL=1;
97: value=value<<1;
98: value|=SDA; //msb first
99: DelayUs(TCLOCK);
100: SCL=0;
101: DelayUs(TCLOCK);
102: }
103: return value;
104: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -