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.
95 * RA6-RA7 : Used for CLOCK, connect to 8MHz resonator.
106 * RC0 : RF AMP SEL bit0
107 * RC1 : LCD-Backlight
108 * RC2 : RF AMP SEL bit1
113 * In addition, usage of PARALLEL-LCD,You should use 40Pin(or greater) PIC.
121 * RD4-RD7: LCD DB4-DB7
126 * RE2: ADC(IN) to measure battery
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 0b00011000 /* FOR I2C-WRITE */
135 #define TRIS_C_VAL_I 0b00011000 /* 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 LATC
151 #define _LCD_BACKLIGHT_BIT b1
152 #define _LCD_BACKLIGHT_TRIS TRISC
154 //#define _LCD_BACKLIGHT _PORTC_RC2_MASK
157 #define _LCD_PORT LATC
168 #define _RFAMP_SEL_B0 LATCbits.LATC0
169 #define _RFAMP_SEL_B1 LATCbits.LATC2
171 #define _AM_STATLAMP LATAbits.LATA4
172 #define _FM_STATLAMP LATAbits.LATA5
173 #define _POW_STATLAMP LATDbits.LATD3
176 #define _KEY_SENDPORT LATA
177 #define _KEY_RECVPORT PORTB
178 #define _KEY_GRP1MASK 0x01
179 #define _KEY_GRP2MASK 0x02
180 #define _KEY_GRP3MASK 0x04
181 #define _KEY_GRP4MASK 0x08
182 #define _KEY_SENDPORTMASK (_KEY_GRP1MASK | _KEY_GRP2MASK | _KEY_GRP3MASK | _KEY_GRP4MASK)
183 #define _KEY_SEND_GRP1 LATAbits.LATA0
184 #define _KEY_SEND_GRP2 LATAbits.LATA1
185 #define _KEY_SEND_GRP3 LATAbits.LATA2
186 #define _KEY_SEND_GRP4 LATAbits.LATA3
187 #define _KEY_POS1MASK(p) p.b0
188 #define _KEY_POS2MASK(p) p.b1
189 #define _KEY_POS3MASK(p) p.b2
190 #define _KEY_POS4MASK(p) p.b3
215 unsigned char byte[2];
236 // Special keys was removed.
240 * LCD Control: Default register values, You should re-define in iodef.h if you need.
246 * 4bit Interface, Used Below:
250 * RD4-RD7: DATA(4-7).
252 #ifndef _LCDPORT_DATA
253 #define _LCDPORT_DATA PORTD
254 #define _LCDPORT_TRIS_DATA TRISD
255 #define _LCDPORT_LATCH_DATA LATD
256 #define _LCDPORT_BUSYMASK 0b10000000
257 #define _LCDPORT_READMASK TRIS_D_RVAL
258 #define _LCDPORT_DATA_SHIFT 4
261 #ifndef _LCDPORT_CONT
262 #define _LCDPORT_CONT PORTD
263 #define _LCDPORT_TRIS_CONT TRISD
264 #define _LCDPORT_CONT_LATCH LATD
265 #define _LCDPORT_CONT_RSbit b0
266 #define _LCDPORT_CONT_RWbit b1
267 #define _LCDPORT_CONT_ENbit b2
268 #define _LCDPORT_CONT_BLbit b3
270 #define _LCDPORT_CONT_RS LATDbits.LATD0
271 #define _LCDPORT_CONT_RW LATDbits.LATD1
272 #define _LCDPORT_CONT_EN LATDbits.LATD2
274 #define _LCDPORT_CONT_RS _PORTD_RD0_MASK
275 #define _LCDPORT_CONT_RW _PORTD_RD1_MASK
276 #define _LCDPORT_CONT_EN _PORTD_RD2_MASK
282 * 8bit Interface, Used Below:
286 * PORTD: RD0-RD7: DATA(0-7).
289 #ifndef _LCDPORT_DATA
290 #define _LCDPORT_DATA PORTD
291 #define _LCDPORT_TRIS_DATA TRISD
292 #define _LCDPORT_LATCH_DATA LATD
293 #define _LCDPORT_BUSYMASK 0b10000000
294 #define _LCDPORT_READMASK TRIS_D_RVAL
297 #ifndef _LCDPORT_CONT
298 #define _LCDPORT_CONT PORTE
299 #define _LCDPORT_TRIS_CONT TRISE
300 #define _LCDPORT_CONT_RSbit 0
301 #define _LCDPORT_CONT_RWbit 1
302 #define _LCDPORT_CONT_ENbit 2
303 #define _LCDPORT_CONT_RS _PORTE_RE0
304 #define _LCDPORT_CONT_RW _PORTE_RE1
305 #define _LCDPORT_CONT_EN _PORTE_RE2
306 #define _LCDPORT_CONT_LATCH LATE