From ebfecb951b76ddf8f1e3db9168bdf8e1c7f1b39e Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Tue, 18 Jun 2013 14:14:11 +0900 Subject: [PATCH] [LCD][4bit] Using bit-manipulation to communicate LCD. [LCD] Discard acm1602_printf(), using a lot of program-memory X( --- idle.c | 6 +- iodef.h | 23 +++- lcd_acm1602.c | 221 +++++++++++++++++----------------- lcd_acm1602.h | 8 +- main.c | 19 +-- nbproject/Makefile-default.mk | 32 ++--- nbproject/Makefile-genesis.properties | 2 +- nbproject/configurations.xml | 2 +- nbproject/private/configurations.xml | 2 +- ui.c | 4 +- 10 files changed, 174 insertions(+), 145 deletions(-) diff --git a/idle.c b/idle.c index fba5df1..7f8c24c 100644 --- a/idle.c +++ b/idle.c @@ -54,17 +54,17 @@ void idle(unsigned int initial) /* Enable IDLE */ osccon = OSCCON; -// osccon = osccon | _IDLEN | _SCS1 | _SCS0; - osccon = osccon | _IDLEN & 0b11111100; + // osccon = osccon | _IDLEN | _SCS1 | _SCS0; + osccon = osccon | _IDLEN; OSCCON = osccon; INTCON |= _TMR0IE; // Enable tmr0 as interrupt and clear interrupt flags. /* Set TMR0 for interrupt*/ /* Pre-scaler: 1/16, PSA=0(ON), TOSE=0, T0CS=0(INTERNAL), T08BIT=0(16bit), TMR0ON=1(START) */ contword = _T0PS0 | _T0PS1 | _TMR0ON; // _T0PS2 -// TMR0H = initial >> 8; TMR0H = initial >> 8; TMR0L = initial & 0xff; +// TMR0H = initial >> 8; T0CON = contword; Sleep(); diff --git a/iodef.h b/iodef.h index 4f4c485..b418c98 100644 --- a/iodef.h +++ b/iodef.h @@ -188,6 +188,20 @@ enum { /* * LCD Control: Default register values, You should re-define in iodef.h if you need. */ +typedef union { + unsigned char byte; + struct { + unsigned b0:1; + unsigned b1:1; + unsigned b2:1; + unsigned b3:1; + unsigned b4:1; + unsigned b5:1; + unsigned b6:1; + unsigned b7:1; + }; + } Bitdefs_t; + #ifdef _LCD_IF_4BIT /* * 4bit Interface, Used Below: @@ -202,15 +216,19 @@ enum { #define _LCDPORT_LATCH_DATA LATD #define _LCDPORT_BUSYMASK 0b10000000 #define _LCDPORT_READMASK TRIS_D_RVAL +#define _LCDPORT_DATA_SHIFT 4 #endif #ifndef _LCDPORT_CONT #define _LCDPORT_CONT PORTD #define _LCDPORT_TRIS_CONT TRISD +#define _LCDPORT_CONT_LATCH LATD +#define _LCDPORT_CONT_RSbit b0 +#define _LCDPORT_CONT_RWbit b1 +#define _LCDPORT_CONT_ENbit b2 #define _LCDPORT_CONT_RS _PORTD_RD0 #define _LCDPORT_CONT_RW _PORTD_RD1 #define _LCDPORT_CONT_EN _PORTD_RD2 -#define _LCDPORT_CONT_LATCH LATD #endif #else @@ -233,6 +251,9 @@ enum { #ifndef _LCDPORT_CONT #define _LCDPORT_CONT PORTE #define _LCDPORT_TRIS_CONT TRISE +#define _LCDPORT_CONT_RSbit 0 +#define _LCDPORT_CONT_RWbit 1 +#define _LCDPORT_CONT_ENbit 2 #define _LCDPORT_CONT_RS _PORTE_RE0 #define _LCDPORT_CONT_RW _PORTE_RE1 #define _LCDPORT_CONT_EN _PORTE_RE2 diff --git a/lcd_acm1602.c b/lcd_acm1602.c index ad74c94..8932bf5 100644 --- a/lcd_acm1602.c +++ b/lcd_acm1602.c @@ -107,44 +107,58 @@ unsigned char acm1602_getchar(unsigned char addr) return d; } #else // Parallel -static unsigned char lcd_busychk(unsigned char addr) -{ - unsigned char b, d; +static unsigned char lcd_readaddress(unsigned char addr) +{ + unsigned char h,l; + Bitdefs_t b; // Set mask for Tristate. - b = _LCDPORT_TRIS_DATA; - b |= _LCDPORT_READMASK;// Set mask for Tristate, direction = read. - _LCDPORT_TRIS_DATA = b; + b.byte = _LCDPORT_TRIS_DATA; + b.byte |= _LCDPORT_READMASK;// Set mask for Tristate, direction = read. + _LCDPORT_TRIS_DATA = b.byte; - b = _LCDPORT_CONT_LATCH; - b &= ~_LCDPORT_CONT_RS; - b |= _LCDPORT_CONT_RW; - _LCDPORT_CONT_LATCH = b; + b.byte = _LCDPORT_DATA & ~_LCDPORT_READMASK; + b._LCDPORT_CONT_RWbit = 1; // RW='1', Read. + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b |= _LCDPORT_CONT_EN; // Send CMD - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 1; // UPRISE Enable + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - d = _LCDPORT_DATA; + h = _LCDPORT_DATA & _LCDPORT_READMASK; // read upper nibble _ACM1602_TC_WAIT(); // Wait 2.5?us - b &= ~_LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 0; // Disable EN + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b |= _LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 1; // Re-enable + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b &= ~_LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + + l = (_LCDPORT_DATA & _LCDPORT_READMASK) >> _LCDPORT_DATA_SHIFT; + + b._LCDPORT_CONT_ENbit = 0; // Disable EN + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b = _LCDPORT_TRIS_DATA; - b &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write. - _LCDPORT_TRIS_DATA = b; + b.byte &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // Disable RS & RW + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us + b.byte = _LCDPORT_TRIS_DATA; + b.byte &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write. + _LCDPORT_TRIS_DATA = b.byte; + _ACM1602_TC_WAIT(); // Wait 2.5?us + return h | l; +} + +static unsigned char lcd_busychk(unsigned char addr) +{ + unsigned char d; + + d = lcd_readaddress(addr); if((d & _LCDPORT_BUSYMASK) != 0){ d = 0xff; // BUSY } else { @@ -167,46 +181,45 @@ void lcd_waitbusy(unsigned char addr, unsigned char flag) static void sendcmd(unsigned char addr, unsigned char cmd,unsigned char busyflag) { #ifdef _LCD_IF_4BIT - unsigned char b, d; + unsigned char d; unsigned char h,l; + Bitdefs_t b; - h = cmd & 0xf0; // Higher bit is used. - l = (cmd & 0x0f) << 4; // Higher bit is used. + h = cmd & _LCDPORT_READMASK; // Higher bit is used. + l = (cmd & (_LCDPORT_READMASK >> _LCDPORT_DATA_SHIFT)) << _LCDPORT_DATA_SHIFT; // Higher bit is used. // Higher NIBBLE if(busyflag != 0) lcd_waitbusy(addr, 0); d = _LCDPORT_TRIS_CONT; d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write. _LCDPORT_TRIS_CONT = d; + _ACM1602_TC_WAIT(); // Wait 2.5?us - b = _LCDPORT_CONT_LATCH; - b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // DATA=blank,RW='0',RS='0" - b |= h; - _LCDPORT_CONT_LATCH = b; - _ACM1602_TC_WAIT(); // Wait 2.5?us - b |= _LCDPORT_CONT_EN; - _LCDPORT_CONT_LATCH = b; + b.byte = _LCDPORT_DATA; + b.byte &= ~(_LCDPORT_CONT_RW | _LCDPORT_READMASK | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // DATA=blank,RW='0',RS='0" + b.byte |= h; + _LCDPORT_LATCH_DATA = b.byte; + //_ACM1602_TC_WAIT(); // Wait 2.5?us + + b._LCDPORT_CONT_ENbit = 1; // Enable + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b &= ~_LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + + b._LCDPORT_CONT_ENbit = 0; // Disable EN + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Lower NIBBLE -// if(busyflag != 0) lcd_waitbusy(addr, 0); - d = _LCDPORT_TRIS_CONT; - d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write. - _LCDPORT_TRIS_CONT = d; - b = _LCDPORT_CONT_LATCH; - b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // DATA=blank,RW='0',RS='0" - b |= l; - _LCDPORT_CONT_LATCH = b; + b.byte &= ~_LCDPORT_READMASK; // Clear Data area. + b.byte |= l; + b._LCDPORT_CONT_ENbit = 1; // Enable + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b |= _LCDPORT_CONT_EN; - _LCDPORT_CONT_LATCH = b; - _ACM1602_TC_WAIT(); // Wait 2.5?us - b &= ~_LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 0; // Disable EN + _LCDPORT_LATCH_DATA = b.byte; + _ACM1602_TC_WAIT(); + d = _LCDPORT_TRIS_CONT; d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write. @@ -245,27 +258,28 @@ static void sendcmd(unsigned char addr, unsigned char cmd,unsigned char busyflag static void sendonce(unsigned char addr, unsigned char cmd) { #ifdef _LCD_IF_4BIT - unsigned char b, d; + unsigned char d; unsigned char h; + Bitdefs_t b; - h = cmd & 0xf0; // Higher bit is used. + h = cmd & _LCDPORT_READMASK; // Higher bit is used. // Higher NIBBLE d = _LCDPORT_TRIS_CONT; d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = write. _LCDPORT_TRIS_CONT = d; - b = _LCDPORT_CONT_LATCH; - b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN); // RS='0',RW='0' - b |= h; - _LCDPORT_CONT_LATCH = b; + b.byte = _LCDPORT_DATA; + b.byte &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN); // RS='0',RW='0' + b.byte |= h; + _LCDPORT_CONT_LATCH = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b |= _LCDPORT_CONT_EN; // Send CMD - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 1; // Send CMD + _LCDPORT_CONT_LATCH = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b &= ~_LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 0; // Disable EN + _LCDPORT_CONT_LATCH = b.byte; _ACM1602_TC_WAIT(); d = _LCDPORT_TRIS_CONT; @@ -304,21 +318,21 @@ static void acm1602_ioinit(unsigned char addr) _ACM1602_LONG_LONG_WAIT(); #ifdef _LCD_IF_4BIT b = _LCDPORT_TRIS_CONT; - b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | 0xf0); + b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | _LCDPORT_READMASK); _LCDPORT_TRIS_CONT = b; // Clear Tristate bits, output. - b = _LCDPORT_CONT_LATCH; - b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | 0xf0); - _LCDPORT_CONT_LATCH = b; - // _LCDPORT_TRIS_DATA = 0x00; // OUT - // _LCDPORT_LATCH_DATA = 0x00; + b = _LCDPORT_DATA; + b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | _LCDPORT_READMASK); + _LCDPORT_LATCH_DATA = b; #else b = _LCDPORT_TRIS_CONT; b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN); _LCDPORT_TRIS_CONT = b; // Clear Tristate bits, output. + b = _LCDPORT_CONT_LATCH; b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN); _LCDPORT_CONT_LATCH = b; + _LCDPORT_TRIS_DATA = 0x00; // OUT _LCDPORT_LATCH_DATA = 0x00; #endif @@ -327,50 +341,52 @@ static void acm1602_ioinit(unsigned char addr) void acm1602_putchar(unsigned char addr, unsigned char c) { - unsigned char b, d; #ifdef _LCD_IF_4BIT + unsigned char d; + Bitdefs_t b; unsigned char h, l; - h = c & 0xf0; - l = (c & 0x0f)<<4; + h = c & _LCDPORT_READMASK; // Higher bit is used. + l = (c & (_LCDPORT_READMASK >> _LCDPORT_DATA_SHIFT)) << _LCDPORT_DATA_SHIFT; // Higher bit is used. lcd_waitbusy(addr, 0); d = _LCDPORT_TRIS_CONT; d &= ~(_LCDPORT_READMASK | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN | _LCDPORT_CONT_RS); // Clear mask for Tristate, direction = write. -// d = 0; _LCDPORT_TRIS_CONT = d; _ACM1602_TC_WAIT(); // Wait 2.5?us // Send high nibble - b = _LCDPORT_CONT_LATCH; - b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN); // DATA=blank,RW='0' - b |= _LCDPORT_CONT_RS; // RS='1" - b |= h; - _LCDPORT_CONT_LATCH = b; + b.byte = _LCDPORT_DATA; + b.byte &= ~(_LCDPORT_CONT_RW | _LCDPORT_READMASK | _LCDPORT_CONT_EN); // DATA=blank,RW='0' + b._LCDPORT_CONT_RSbit = 1; // RS='1" + b.byte |= h; + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b |= _LCDPORT_CONT_EN; // Do high write. - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 1; // Do high write. + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b &= ~_LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 0; // Disable EN + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_SHORT_WAIT(); -// lcd_waitbusy(addr, 0); - b &= ~(_LCDPORT_CONT_RW | 0xf0 | _LCDPORT_CONT_EN); // DATA=blank,RW='0' - b |= _LCDPORT_CONT_RS; // RS='1" - b |= l; -// _LCDPORT_CONT_LATCH = b; -// _ACM1602_TC_WAIT(); // Wait 2.5?us - - b |= _LCDPORT_CONT_EN; - _LCDPORT_CONT_LATCH = b; // Do low write. + b.byte &= ~_LCDPORT_READMASK; // DATA=blank,RW='0' + b.byte |= l; + _LCDPORT_LATCH_DATA = b.byte; _ACM1602_TC_WAIT(); // Wait 2.5?us - b &= ~_LCDPORT_CONT_EN; // Disable EN - _LCDPORT_CONT_LATCH = b; + b._LCDPORT_CONT_ENbit = 1; + _LCDPORT_LATCH_DATA = b.byte; // Do low write. _ACM1602_TC_WAIT(); // Wait 2.5?us + b._LCDPORT_CONT_ENbit = 0; // Disable EN + _LCDPORT_LATCH_DATA = b.byte; + _ACM1602_TC_WAIT(); + + d = _LCDPORT_TRIS_CONT; + d &= ~_LCDPORT_READMASK; // Clear mask for Tristate, direction = read. + _LCDPORT_TRIS_CONT = d; + _ACM1602_SHORT_WAIT(); // Wait 2.5?us #else lcd_waitbusy(addr, 0); @@ -408,7 +424,7 @@ unsigned char acm1602_getchar(unsigned char addr) // Recv high nibble b = _LCDPORT_CONT_LATCH; - b &= ~(0xf0 | _LCDPORT_CONT_EN); // DATA=blank + b &= ~(_LCDPORT_READMASK | _LCDPORT_CONT_EN); // DATA=blank b |= (_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // RS='1", RW='1' _LCDPORT_CONT_LATCH = b; _ACM1602_TC_WAIT(); // Wait 2.5?us @@ -417,30 +433,19 @@ unsigned char acm1602_getchar(unsigned char addr) _LCDPORT_CONT_LATCH = b; _ACM1602_TC_WAIT(); // Wait 2.5?us - h = _LCDPORT_DATA & 0xf0; + h = _LCDPORT_DATA & _LCDPORT_READMASK; _ACM1602_TC_WAIT(); // Wait 2.5?us b &= ~_LCDPORT_CONT_EN; // Disable EN _LCDPORT_CONT_LATCH = b; _ACM1602_TC_WAIT(); - lcd_waitbusy(addr, 0); - // Recv Low nibble. - d = _LCDPORT_TRIS_CONT; - d |= _LCDPORT_READMASK; // Set mask for Tristate, direction = read. - _LCDPORT_TRIS_CONT = d; - - b = _LCDPORT_CONT_LATCH; - b &= ~(0xf0 | _LCDPORT_CONT_EN); // DATA=blank - b |= (_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // RS='1", RW='1' - _LCDPORT_CONT_LATCH = b; - _ACM1602_TC_WAIT(); // Wait 2.5?us b |= _LCDPORT_CONT_EN; _LCDPORT_CONT_LATCH = b; _ACM1602_TC_WAIT(); // Wait 2.5?us - l = _LCDPORT_DATA & 0xf0; + l = _LCDPORT_DATA & _LCDPORT_READMASK; _ACM1602_TC_WAIT(); // Wait 2.5?us b &= ~_LCDPORT_CONT_EN; // Disable EN @@ -453,7 +458,7 @@ unsigned char acm1602_getchar(unsigned char addr) _ACM1602_SHORT_WAIT(); - d = h | (l >> 4); + d = h | (l >> _LCDPORT_DATA_SHIFT); return d; #else unsigned char e; @@ -528,6 +533,8 @@ void acm1602_home(unsigned char addr) _ACM1602_LONG_LONG_WAIT(); // Wait 5ms } +// sprintf() using a lot of program-meory, discard. +#if 0 void acm1602_printf(unsigned char addr, const char *fmt, ...) { char strbuf[32]; // Max 32 bytes. @@ -544,6 +551,7 @@ void acm1602_printf(unsigned char addr, const char *fmt, ...) acm1602_putchar(addr, strbuf[i]); } } +#endif void acm1602_cursordir(unsigned char addr, unsigned char right) { @@ -583,13 +591,10 @@ void acm1602_init(unsigned char addr, unsigned char cls) _ACM1602_SHORT_WAIT(); sendonce(addr, 0x20); // 2lines, 8x10dot fonts. _ACM1602_SHORT_WAIT(); - // Send twice on 4Bit Mode. -// sendonce(addr, 0x30); // 2lines, 8x10dot fonts. sendcmd(addr, 0x28, 0x00); // 2lines, 8x10dot fonts. -// sendcmd(addr, 0x28, 0x00); // 2lines, 8x10dot fonts. #endif #endif -// sendcmd(addr, 0x08, 0xff); // Display OFF. + sendcmd(addr, 0x08, 0xff); // Display OFF. sendcmd(addr, 0x0c, 0xff); // Display ON. sendcmd(addr, 0x06, 0xff); // Cursor increment,not shift. if(cls == 0){ @@ -597,8 +602,8 @@ void acm1602_init(unsigned char addr, unsigned char cls) } else { acm1602_cls(addr); } - _ACM1602_LONG_WAIT(); - //sendcmd(addr, 0x06, 0xff); + _ACM1602_LONG_LONG_WAIT(); +// sendcmd(addr, 0x06, 0xff); } /* * st7032 extensions. diff --git a/lcd_acm1602.h b/lcd_acm1602.h index fa9b22c..124a452 100644 --- a/lcd_acm1602.h +++ b/lcd_acm1602.h @@ -43,11 +43,11 @@ extern "C" { // Notes: Master clock = 8MHz(0.125uS) // Wait 5us -#define _ACM1602_TC_WAIT() delay10tcy(40) +#define _ACM1602_TC_WAIT() delay10tcy(4) // Wait 50us -#define _ACM1602_SHORT_WAIT() delay100tcy(40) +#define _ACM1602_SHORT_WAIT() delay10tcy(40) // Wait 5ms -#define _ACM1602_LONG_WAIT() delay10ktcy(40) +#define _ACM1602_LONG_WAIT() delay1ktcy(40) // Wait 50ms #define _ACM1602_LONG_LONG_WAIT() delay10ktcy(40) // Wait 5.5ms @@ -60,7 +60,9 @@ extern void acm1602_putchar(unsigned char addr, unsigned char c); extern void acm1602_locate_16x2(unsigned char addr, char x, char y); extern void acm1602_locate_8x2(unsigned char addr, char x, char y); extern void acm1602_home(unsigned char addr); +#if 0 extern void acm1602_printf(unsigned char addr, const char *fmt, ...); +#endif extern void acm1602_cursordir(unsigned char addr, unsigned char right); extern void acm1602_init(unsigned char addr, unsigned char cls); extern unsigned char acm1602_getchar(unsigned char addr); diff --git a/main.c b/main.c index 3bc72b3..acd0e3e 100644 --- a/main.c +++ b/main.c @@ -59,7 +59,7 @@ // For 4xK20 or 2xK20 Series #if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) || \ defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20) -//#pragma stack 0x200 +#pragma stack 0x200 256 #pragma config FOSC=HS,FCMEN=ON,PWRT=ON,BOREN=ON,BORV=22 #pragma config WDTEN=ON,WDTPS=32768,PBADEN=OFF,HFOFST=ON,LPT1OSC=OFF,MCLRE=ON #pragma config STVREN=ON,DEBUG=ON @@ -878,7 +878,7 @@ int main(void) #ifdef _LCD_DEBUG unsigned char power_flag; #endif - OSCCON = _IDLEN & 0b11111100; +// OSCCON = _IDLEN & 0b11111100; keyin_init(); keyin_ioinit(); @@ -886,7 +886,7 @@ int main(void) //i2c1_init(); - _AKC6955_WAIT_125_0MS(); // Wait 125ms +// _AKC6955_WAIT_125_0MS(); // Wait 125ms #ifdef _LCD_DEBUG power_flag = 0xff; #endif @@ -896,19 +896,22 @@ int main(void) ui_idlecount = 0xf800; acm1602_init(0xa0, 1); //Init LCD - _AKC6955_WAIT_125_0MS(); // Wait 125ms +// _AKC6955_WAIT_125_0MS(); // Wait 125ms _LOCATE(0,0); printstr("Hello;-)"); +// TRISD = 0x00; PORTDbits.RD3 = 1; - LATDbits.LATD3 = 1; +// LATDbits.LATD3 = 1; #if 1 i = 10001; do { - idle(0xf800); + idle(0xff00); ClrWdt(); - _LOCATE(0,1); - print_numeric_nosupress(i, 5); + _LOCATE(8,1); +// print_numeric_nosupress(i, 5); + print_numeric(i, 1); +// PORTDbits.RD3 = i & 1; i = i + 1; }while(1); #else diff --git a/nbproject/Makefile-default.mk b/nbproject/Makefile-default.mk index 772b806..26993e0 100644 --- a/nbproject/Makefile-default.mk +++ b/nbproject/Makefile-default.mk @@ -74,73 +74,73 @@ ifeq ($(TYPE_IMAGE), DEBUG_RUN) ${OBJECTDIR}/ui.o: ui.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/ui.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 ui.c -o${OBJECTDIR}/ui.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 ui.c -o${OBJECTDIR}/ui.o ${OBJECTDIR}/i2c_io.o: i2c_io.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/i2c_io.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 i2c_io.c -o${OBJECTDIR}/i2c_io.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 i2c_io.c -o${OBJECTDIR}/i2c_io.o ${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/main.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 main.c -o${OBJECTDIR}/main.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 main.c -o${OBJECTDIR}/main.o ${OBJECTDIR}/idle.o: idle.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/idle.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 idle.c -o${OBJECTDIR}/idle.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 idle.c -o${OBJECTDIR}/idle.o ${OBJECTDIR}/lcd_acm1602.o: lcd_acm1602.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/lcd_acm1602.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 lcd_acm1602.c -o${OBJECTDIR}/lcd_acm1602.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 lcd_acm1602.c -o${OBJECTDIR}/lcd_acm1602.o ${OBJECTDIR}/akc6955.o: akc6955.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/akc6955.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 akc6955.c -o${OBJECTDIR}/akc6955.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 akc6955.c -o${OBJECTDIR}/akc6955.o ${OBJECTDIR}/eeprom.o: eeprom.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/eeprom.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 eeprom.c -o${OBJECTDIR}/eeprom.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 eeprom.c -o${OBJECTDIR}/eeprom.o else ${OBJECTDIR}/ui.o: ui.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/ui.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 ui.c -o${OBJECTDIR}/ui.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 ui.c -o${OBJECTDIR}/ui.o ${OBJECTDIR}/i2c_io.o: i2c_io.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/i2c_io.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 i2c_io.c -o${OBJECTDIR}/i2c_io.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 i2c_io.c -o${OBJECTDIR}/i2c_io.o ${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/main.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 main.c -o${OBJECTDIR}/main.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 main.c -o${OBJECTDIR}/main.o ${OBJECTDIR}/idle.o: idle.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/idle.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 idle.c -o${OBJECTDIR}/idle.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 idle.c -o${OBJECTDIR}/idle.o ${OBJECTDIR}/lcd_acm1602.o: lcd_acm1602.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/lcd_acm1602.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 lcd_acm1602.c -o${OBJECTDIR}/lcd_acm1602.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 lcd_acm1602.c -o${OBJECTDIR}/lcd_acm1602.o ${OBJECTDIR}/akc6955.o: akc6955.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/akc6955.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 akc6955.c -o${OBJECTDIR}/akc6955.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 akc6955.c -o${OBJECTDIR}/akc6955.o ${OBJECTDIR}/eeprom.o: eeprom.c nbproject/Makefile-${CND_CONF}.mk ${MKDIR} ${OBJECTDIR} ${RM} ${OBJECTDIR}/eeprom.o - ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -c -mpic16 -p18f45k20 eeprom.c -o${OBJECTDIR}/eeprom.o + ${MP_CC} --debug-ralloc --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -c -mpic16 -p18f45k20 eeprom.c -o${OBJECTDIR}/eeprom.o endif @@ -149,11 +149,11 @@ endif ifeq ($(TYPE_IMAGE), DEBUG_RUN) dist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk /usr/local/share/sdcc/lib/pic16/libc18f.lib ${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} - ${MP_CC} --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -mpic16 -p18f45k20 ${OBJECTFILES} -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + ${MP_CC} --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -mpic16 -p18f45k20 ${OBJECTFILES} -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} else dist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk /usr/local/share/sdcc/lib/pic16/libc18f.lib ${MKDIR} dist/${CND_CONF}/${IMAGE_TYPE} - ${MP_CC} --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libc18f.lib libio18f25k22.lib -mpic16 -p18f45k20 ${OBJECTFILES} -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} + ${MP_CC} --debug-ralloc -Wl-c -Wl-m --use-non-free -V --pstack-model=small libio18f25k22.lib libc18f.lib -mpic16 -p18f45k20 ${OBJECTFILES} -odist/${CND_CONF}/${IMAGE_TYPE}/OPENI2CRADIO_6955.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} endif diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties index 3323fdc..2c5b453 100644 --- a/nbproject/Makefile-genesis.properties +++ b/nbproject/Makefile-genesis.properties @@ -1,5 +1,5 @@ # -#Sun Jun 16 12:31:30 JST 2013 +#Tue Jun 18 14:09:42 JST 2013 default.languagetoolchain.dir=/usr/local/bin default.br-unifei-rmaalmeida-toolchainSDCC-SDCCtoolchain.md5=b67cce1ad75b450308d7806e430931b3 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=8fe1589514540343a5279c082104bce0 diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index cbc683c..8969beb 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -124,7 +124,7 @@ - + diff --git a/nbproject/private/configurations.xml b/nbproject/private/configurations.xml index dc1db5a..1b84c05 100644 --- a/nbproject/private/configurations.xml +++ b/nbproject/private/configurations.xml @@ -4,7 +4,7 @@ 0 - :=MPLABCommUSB:=04D8:=900A:=0002:=Microchip Technology Inc.:=PICkit 3:=DEFAULT_PK3 :=x:=en + /usr/local/bin place holder 1 diff --git a/ui.c b/ui.c index 6dc0e0f..6042993 100644 --- a/ui.c +++ b/ui.c @@ -108,7 +108,7 @@ void keyin_ioinit(void) /* Initialize IOPORTS*/ PORTA = 0x00; LATA = 0x00; - ANSEL = 0x01; // Use RA0 AS ADC, Another is not used. + ANSEL = 0x00; // Use RA0 AS ADC, Another is not used. ANSELH = 0x00; // TRISA = TRIS_A_VAL; @@ -185,9 +185,7 @@ void print_numeric(int i, unsigned char supressf) if((i == 0) && (supressf != 0)){ unsigned char c; c = '0'; - _CURSOR_LEFT(); _PUTCHAR(c); - _CURSOR_RIGHT(); } else { int l; unsigned char supress = 0; -- 2.11.0