1
1
#include <xc.h>
2
2
#include <stdio.h>
3
3
4
- #include "MAX17320.h"
5
-
6
- #define _str (x ) #x
7
- #define str (x ) _str(x)
8
-
9
4
#define ONEWIRE
10
5
#ifdef ONEWIRE
11
- #define PIN_PORT C
12
- #define PIN_N 0
13
- #define P (R ,P ,r ,p ) R##P##bits.r##P##p
14
-
15
- #define PIN_WRITE P(LAT,C,LAT,0)
16
- #define PIN_READ P(PORT,C,R,0)
17
- #define PIN_TRIS P(TRIS,C,TRIS,0)
18
- #define PIN_OD P(ODCON,C,ODC,0)
19
- #define PIN_ANSEL P(ANSEL,C,ANS,0)
20
- #define PIN_WPU P(WPU,C,WPU,0)
21
- #define PIN_INLVL P(INLVL,C,INLVL,0)
22
- #define BCF () asm("BCF LATC,0,0")
23
- #define BSF () asm("BSF LATC,0,0")
24
- #define BTFSC () asm("BTFSC PORTC,0,0")
25
- #define BTFSS () asm("BTFSS PORTC,0,0")
6
+ #include <onewire.h>
7
+ #endif
8
+
9
+ #include "MAX17320.h"
26
10
27
11
#define ERROR 1
28
12
#define OK 0
31
15
#define F_READ 0x6900
32
16
#define F_WRITE 0x6C00
33
17
34
- #endif
35
-
36
18
#define LED LATD7
37
19
38
20
void SendCharUSB (unsigned char d );
@@ -41,78 +23,6 @@ void putch(unsigned char data){
41
23
SendCharUSB (data );
42
24
}
43
25
44
- unsigned char ow_reset (void ) {
45
- unsigned char r = 0 ;
46
- PIN_WRITE = 0 ;
47
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
48
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
49
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
50
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
51
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
52
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
53
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
54
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
55
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
56
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
57
- PIN_WRITE = 1 ;
58
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
59
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP ();
60
- r = !PIN_READ ;
61
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
62
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
63
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
64
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
65
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
66
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
67
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
68
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
69
- NOP (); NOP (); NOP (); NOP (); NOP ();NOP (); NOP (); NOP (); NOP (); NOP ();
70
- return r ;
71
- }
72
-
73
- #define OW_BIT_OUT (x ) BCF();\
74
- asm("BTFSC WREG,"x",0");BSF();\
75
- asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");\
76
- BSF();asm("NOP");asm("NOP");
77
- void ow_write_word (unsigned short data ) {
78
- WREG = data ;
79
- OW_BIT_OUT ("0" ); OW_BIT_OUT ("1" ); OW_BIT_OUT ("2" ); OW_BIT_OUT ("3" );
80
- OW_BIT_OUT ("4" ); OW_BIT_OUT ("5" ); OW_BIT_OUT ("6" ); OW_BIT_OUT ("7" );
81
-
82
- // WREG = (unsigned char)(data >> 8);
83
- WREG = * (((unsigned char * )& data )+ 1 );
84
- OW_BIT_OUT ("0" ); OW_BIT_OUT ("1" ); OW_BIT_OUT ("2" ); OW_BIT_OUT ("3" );
85
- OW_BIT_OUT ("4" ); OW_BIT_OUT ("5" ); OW_BIT_OUT ("6" ); OW_BIT_OUT ("7" );
86
- }
87
-
88
- #define OW_BIT_IN (x ) BCF();NOP();BSF();\
89
- NOP();\
90
- BTFSC();asm("BSF WREG,"x"&7,0");\
91
- NOP();NOP();NOP();NOP();NOP();NOP();NOP();\
92
- asm("Loop"x":");BTFSS();asm("GOTO Loop"x);
93
-
94
- //#define OW_BIT_IN(x) BCF();NOP();BSF();\
95
- //BTFSC();asm("BSF WREG,"x"&7,0");\
96
- //NOP();NOP();NOP();NOP();NOP();\
97
- //asm("Loop"x":");BTFSS();asm("GOTO Loop"x);
98
-
99
- unsigned short ow_read_word (void ) {
100
- unsigned char H ;
101
- unsigned char L ;
102
-
103
- WREG = 0 ;
104
- OW_BIT_IN ("0" ); OW_BIT_IN ("1" ); OW_BIT_IN ("2" ); OW_BIT_IN ("3" );
105
- OW_BIT_IN ("4" ); OW_BIT_IN ("5" ); OW_BIT_IN ("6" ); OW_BIT_IN ("7" );
106
- L = WREG ;
107
-
108
- WREG = 0 ;
109
- OW_BIT_IN ("8" ); OW_BIT_IN ("9" ); OW_BIT_IN ("10" ); OW_BIT_IN ("11" );
110
- OW_BIT_IN ("12" ); OW_BIT_IN ("13" ); OW_BIT_IN ("14" ); OW_BIT_IN ("15" );
111
- H = WREG ;
112
-
113
- return ((H <<8 ) | L );
114
- }
115
-
116
26
unsigned char MAX17320_read_word (unsigned short address , unsigned short * data ) {
117
27
#ifdef ONEWIRE
118
28
if (ow_reset ()) {
@@ -149,12 +59,10 @@ unsigned char MAX17320_init(void) {
149
59
volatile unsigned short x = 0x500a ;
150
60
unsigned char r = 0 ;
151
61
unsigned short data ;
152
- PIN_WRITE = 1 ;
153
- PIN_TRIS = 0 ;
154
- PIN_OD = 1 ;
155
- // PIN_ANSEL = 0;
156
- PIN_WPU = 1 ;
157
- PIN_INLVL = 1 ;
62
+
63
+ #ifdef ONEWIRE
64
+ ow_init ();
65
+ #endif
158
66
159
67
WPUE = 0xff ;
160
68
// putchar('c');
0 commit comments