4 * Copyright (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2,
10 * or (at your option) any later version.
11 * This library / program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this library; see the file COPYING. If not, write to the
18 * Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
21 * As a special exception, if you link this(includeed from sdcc) library
22 * with other files, some of which are compiled with SDCC,
23 * to produce an executable, this library does not by itself cause
24 * the resulting executable to be covered by the GNU General Public License.
25 * This exception does not however invalidate any other reasons why
26 * the executable file might be covered by the GNU General Public License.
34 #define _XTAL_FREQ 8000000
43 // If you use I2C-Type ACM1602, You should define, otherwise #undef.
48 * Machine depended flags
51 #if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22)
52 #define _I2C_IO_TWO_MSSPS
53 #define _PIO_HAS_THREE
56 #if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
57 #define _I2C_IO_ONE_MSSP
58 #define _PIO_HAS_THREE
61 #if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20)
62 #define _I2C_IO_ONE_MSSP
66 #if defined(__18F23K22) || defined(__18F24k22) || defined(__18F25K22) || defined(__18F26K22)
67 #define _I2C_IO_TWO_MSSPS
68 #define _PIO_HAS_THREE
71 #if defined(__18F23K20) || defined(__18F24K20) || defined(__18F25K20) || defined(__18F26K20)
72 #define _I2C_IO_ONE_MSSP
73 #define _PIO_HAS_THREE
76 #if defined(__18F43K20) || defined(__18F44K20) || defined(__18F45K20) || defined(__18F46K20)
77 #define _I2C_IO_ONE_MSSP
85 * RE3: VPP (ICSP Programming Voltage) / MCLR, Dont use for I/O.
87 * PORTA/B/C USED basic.
89 * PORTA: RA0 : ADC(IN) to measure battery .
92 * RA6-RA7 : Used for CLOCK, connect to 8MHz resonator.
94 * PORTB: RB0 : Light Out
108 * In addition, usage of PARALLEL-LCD,You should use 40Pin(or greater) PIC.
115 * RD4-RD7 : LCD DATA(DB4-DB7)
117 * PORTD: RE0: FM AMP SW(OUT)
118 * RE1: MW AMP SW(OUT)
119 * RE2: SW AMP SW(OUT)
120 * RE3: VPP (ICSP Programming Voltage) / MCLR
123 * PORTD: RD0-RD7 : LCD DATA(DB0-DB7)
127 * RE3: VPP (ICSP Programming Voltage) / MCLR
130 #define TRIS_A_VAL 0b11000000
131 #define AN_A_VAL 0b00000000
132 #define TRIS_B_VAL 0b11111111 /* PORTB as INPUT.*/
133 #define AN_B_VAL 0b00000000
134 #define TRIS_C_VAL_O 0b11011000 /* FOR I2C-WRITE */
135 #define TRIS_C_VAL_I 0b11011000 /* FOR I2C-WRITE */
136 #define AN_C_VAL 0b00000000
137 #define TRIS_D_VAL 0b00000000 /* FOR OUTPUT, LCD(Optional) */
139 #define TRIS_D_RVAL 0xf0 /* FOR INPUT*/
141 #define TRIS_D_RVAL 0b11111111 /* FOR INPUT*/
143 #define TRIS_E_VAL 0b00000100 /* FOR OUTPUT, ADC, PSP=OFF */
144 #define _BATT_ADC AN7
145 #define _ADC_INITF _ANS7
146 #define _ADCH_INITF 0x00
147 #define _PORT_MUTE LATEbits.LATE0
148 #define _PORT_RADIOPOW LATEbits.LATE1
150 #define _LCD_BACKLIGHT _PORTC_RC2
152 #define _LCD_BACKLIGHT _PORTC_RC2_MASK
154 #define _LCD_PORT LATC
155 #define _AM_STATLAMP LATAbits.LATA4
156 #define _FM_STATLAMP LATAbits.LATA5
157 #define _POW_STATLAMP LATDbits.LATD3
159 #define _KEY_SENDPORT LATA
160 #define _KEY_RECVPORT PORTB
161 #define _KEY_GRP1MASK 0x01
162 #define _KEY_GRP2MASK 0x02
163 #define _KEY_GRP3MASK 0x04
164 #define _KEY_GRP4MASK 0x08
165 #define _KEY_SENDPORTMASK (_KEY_GRP1MASK | _KEY_GRP2MASK | _KEY_GRP3MASK | _KEY_GRP4MASK)
166 #define _KEY_SEND_GRP1 LATAbits.LATA0
167 #define _KEY_SEND_GRP2 LATAbits.LATA1
168 #define _KEY_SEND_GRP3 LATAbits.LATA2
169 #define _KEY_SEND_GRP4 LATAbits.LATA3
170 #define _KEY_POS1MASK(p) p.b0
171 #define _KEY_POS2MASK(p) p.b1
172 #define _KEY_POS3MASK(p) p.b2
173 #define _KEY_POS4MASK(p) p.b3
198 unsigned char byte[2];
219 // Special keys was removed.
223 * LCD Control: Default register values, You should re-define in iodef.h if you need.
229 * 4bit Interface, Used Below:
233 * RD4-RD7: DATA(4-7).
235 #ifndef _LCDPORT_DATA
236 #define _LCDPORT_DATA PORTD
237 #define _LCDPORT_TRIS_DATA TRISD
238 #define _LCDPORT_LATCH_DATA LATD
239 #define _LCDPORT_BUSYMASK 0b10000000
240 #define _LCDPORT_READMASK TRIS_D_RVAL
241 #define _LCDPORT_DATA_SHIFT 4
244 #ifndef _LCDPORT_CONT
245 #define _LCDPORT_CONT PORTD
246 #define _LCDPORT_TRIS_CONT TRISD
247 #define _LCDPORT_CONT_LATCH LATD
248 #define _LCDPORT_CONT_RSbit b0
249 #define _LCDPORT_CONT_RWbit b1
250 #define _LCDPORT_CONT_ENbit b2
251 #define _LCDPORT_CONT_BLbit b3
253 #define _LCDPORT_CONT_RS _PORTD_RD0
254 #define _LCDPORT_CONT_RW _PORTD_RD1
255 #define _LCDPORT_CONT_EN _PORTD_RD2
257 #define _LCDPORT_CONT_RS _PORTD_RD0_MASK
258 #define _LCDPORT_CONT_RW _PORTD_RD1_MASK
259 #define _LCDPORT_CONT_EN _PORTD_RD2_MASK
265 * 8bit Interface, Used Below:
269 * PORTD: RD0-RD7: DATA(0-7).
272 #ifndef _LCDPORT_DATA
273 #define _LCDPORT_DATA PORTD
274 #define _LCDPORT_TRIS_DATA TRISD
275 #define _LCDPORT_LATCH_DATA LATD
276 #define _LCDPORT_BUSYMASK 0b10000000
277 #define _LCDPORT_READMASK TRIS_D_RVAL
280 #ifndef _LCDPORT_CONT
281 #define _LCDPORT_CONT PORTE
282 #define _LCDPORT_TRIS_CONT TRISE
283 #define _LCDPORT_CONT_RSbit 0
284 #define _LCDPORT_CONT_RWbit 1
285 #define _LCDPORT_CONT_ENbit 2
286 #define _LCDPORT_CONT_RS _PORTE_RE0
287 #define _LCDPORT_CONT_RW _PORTE_RE1
288 #define _LCDPORT_CONT_EN _PORTE_RE2
289 #define _LCDPORT_CONT_LATCH LATE