diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..09af0a0 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "mc8051fun"] + path = mc8051fun + url = https://git.planix.org/7u83/mc8051fun.git diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a13d35c --- /dev/null +++ b/Makefile @@ -0,0 +1,65 @@ +-include defs.mak + +SDCC ?= sdcc +SDAR ?= sdar +SDAS ?= sdas + +STCCODESIZE ?= 8192 +SDCCOPTS ?= +SDCCREV ?= -Dstc15f204ea +STCGAL ?= stcgal +STCGALOPTS ?= +STCGALPORT ?= /dev/ttyUSB0 +STCGALPROT ?= auto +FLASHFILE ?= main.ihx +PRGOPTS ?= + + +SYSCLK ?= 11059 +FOSC ?=11059200L +CFLAGS ?= + +LIBSRC = + +LIBNAME = mc8051fun/mc8051fun.lib + +PRGSRC = calc.c + +PRGOBJ =$(patsubst %.c,%.rel, $(PRGSRC)) + +$(FLASHFILE): $(LIBNAME) $(PRGOBJ) + $(SDCC) -o $(FLASHFILE) $(SDCCOPTS) $(SDCCREV) $(CFLAGS) $(PRGOBJ) $(LIBNAME) + + +$(LIBNAME): $(LIBOBJ) + $(SDAR) -rc $(LIBNAME) $(LIBOBJ) +#all: +# make uart2.ihx + + + +%.rel: %.c + $(SDCC) $(SDCCOPTS) $(PRGOPTS) $(SDCCREV) -DFOSC=$(FOSC) -o $@ -c $< + + + +eeprom: + sed -ne '/:..1/ { s/1/0/2; p }' main.hex > eeprom.hex + +flash: $(FLASHFILE) + $(STCGAL) -p $(STCGALPORT) -P $(STCGALPROT) -t $(SYSCLK) $(STCGALOPTS) $(FLASHFILE) + +clean: + rm -f *.obj + rm -f *.ihx *.hex *.bin *.rst + rm -f *.map + rm -f *.rel + rm -f *.lst + rm -f *.sym + rm -f *.lk + rm -f *.mem + rm -f *.lib + rm -f *.asm + +cpp: SDCCOPTS+=-E +cpp: main diff --git a/README.md b/README.md index 8badbcd..7c064da 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # calc8051 +git submodule update --init --recursive + diff --git a/calc.c b/calc.c new file mode 100644 index 0000000..99113e0 --- /dev/null +++ b/calc.c @@ -0,0 +1,90 @@ + +#include "mc8051fun/mc8051fun.h" +#include "mc8051fun/lcd.h" + +#define NBYTES 8 +#define BCDBYTES (NBYTES+NBYTES/2) + +__xdata uint8_t val0[NBYTES]; +__xdata uint8_t val1[NBYTES]; +__xdata uint8_t result[NBYTES]; +__xdata uint8_t rest[NBYTES]; +__xdata uint8_t bcd[BCDBYTES]; + + +static void init (void) +{ + lcd_cmd(LCD_SET_FUNCTION | LCD_FUNCTION_8BIT | LCD_FUNCTION_2LINE); + lcd_cmd(LCD_SET_DISPLAY | LCD_DISPLAY_ON); + lcd_cmd(LCD_CLEAR_DISPLAY); + lcd_cmd(LCD_SET_DDADR); +} + +static void putchar(char c) +{ + lcd_chr(c); +} +static void lcd_str (char *p) +{ + while(*p){ + putchar(*p++); + } +} + +static void zero_val(__xdata uint8_t * ptr) +{ + for(int i=0; i=0; i--){ + b=bcd[i]>>4; + putchar(b+0x30); + b=bcd[i]&0xf; + putchar(b+0x30); + } +} + +static void val0val1_add() +{ + __asm + mov r0,#_val0 + mov r1,#_val1 + mov r7,#NBYTES + lcall long_xadd + __endasm; + +} + + +void main() +{ + init(); + zero_val(val0); + zero_val(val1); + + val1[0]=0x01; + lcd_str("Hello World!"); + while(1){ + val0val1_add(); + val0tobcd(); + + lcd_cmd(LCD_GOTO_LINE2); + printbcdval(); + } +} diff --git a/mc8051fun b/mc8051fun new file mode 160000 index 0000000..9a906c3 --- /dev/null +++ b/mc8051fun @@ -0,0 +1 @@ +Subproject commit 9a906c35ad0974b1e3f9b34468a87a4b0e46dd51