Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <at89c51ed2.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdarg.h>
- #include "i2c.h"
- #include "delay.h"
- //#include "stddef.h"
- //#include "lcd_i2c.h"
- //#include "stdutils.h"
- #include "eeprom.h"
- #include "timers.h"
- #include "uart.h"
- #include "stdutils.h"
- //#include <reg52.h>
- //#include <8052.h>
- //#define __STC12C5A60S2__
- #ifdef __STC12C5A60S2__
- __sfr __at(0x97) CLK_DIV;
- #endif // __STC12C5A60S2__
- //#define __W78E516D__
- #ifdef __W78E516D__
- __sfr __at(0xF6) CHPENR;
- __sfr __at(0xBF) CHPCON;
- #define CLR_POR() PCON &= ~0b00010000 // clear power on reset flag in W78E516D
- __sfr __at(0x86) P0UPR;
- #define CLR_P0UP() P0UPR &= ~0b00000001 // port 0 pins are open drain in W78E516D
- #define SET_P0UP() P0UPR |= 0b00000001 // port 0 pins are internally pull up, same as port 2 in W78E516D
- #endif // __W78E516D__
- // eeprom via SPI on the other board (e.g. AT24C02)
- #define _AT89C51ED2_SPI_EEPROM
- #ifdef _AT89C51ED2_SPI_EEPROM
- /*#define _AT89C51ED2_SPI*/
- // select only one from 2 following
- //#define _SPI_AS_MASTER
- #define _SPI_AS_SLAVE
- // uncomment to use chip select /SS
- #define _SPI_USE_SS
- #ifdef _SPI_AS_MASTER
- #ifdef _SPI_USE_SS
- #define SPI_MASTER_SLAVE_SS P1_1
- #endif
- #endif // _SPI_AS_MASTER
- #define SPI_EEPROM_READ 'R'
- #define SPI_EEPROM_WRITE 'W'
- #define MAX_EEPROM_ADDR 255
- volatile unsigned char SPI_INT_Serial_Data_IN;
- #ifdef _SPI_AS_SLAVE
- //volatile unsigned char SPI_INT_Serial_Data_OUT;
- #endif
- volatile unsigned char SPI_INT_Transmit_Completed = 0;
- void ED2_SPI_EEPROM_Init(void);
- void ED2_SPI_EEPROM_WriteByte(uint16_t var_eepromAddress_u16, uint8_t var_eepromData_u8);
- uint8_t ED2_SPI_EEPROM_ReadByte(uint16_t var_eepromAddress_u16);
- void it_SPI(void) __interrupt(9); /* interrupt address is 0x004B */
- void ED2_SPI_EEPROM_Init(void)
- {
- // SPCON = 0x14; // default state after reset
- // SPCON |= SPEN | MSTR | SPR2 | SPR1; // set enable_spi, master, baud rate divisor is 128 (0xd2)
- /*
- // P1 port configuration
- #ifdef _SPI_AS_MASTER
- P1 |= 0b00100000;
- #elif defined(_SPI_AS_SLAVE)
- P1 |= 0b01000010;
- #endif
- */
- #ifdef _SPI_AS_MASTER
- SPCON |= 0x10; // set master mode
- SPCON |= 0x82; /* Fclk Periph/128 */
- #elif defined(_SPI_AS_SLAVE)
- SPCON &= ~0x10; // set slave mode
- #endif
- //SPCON |= 0x10; /* Master mode */
- //SPCON |= 0x82; /* Fclk Periph/128 */
- #ifdef _SPI_USE_SS
- SPCON &= ~0x20; /* P1.1 is available as SPI /SS pin */
- #ifdef _SPI_AS_MASTER
- SPI_MASTER_SLAVE_SS = 0;
- #endif
- #else
- SPCON |= 0x20; /* P1.1 is available as standard I/O pin */
- #endif
- SPCON &= ~0x08; /* CPOL=0; transmit mode example */
- // SPCON |= 0x04; /* CPHA=1; transmit mode example */
- SPCON &= ~0x04; /* CPHA=0; transmit mode example */
- IEN1 |= 0x04; /* enable spi interrupt */
- SPCON |= 0x40; /* run spi */
- }
- #ifdef _SPI_AS_MASTER // this functions can be in master mode
- void ED2_SPI_EEPROM_WriteByte(uint16_t var_eepromAddress_u16, uint8_t var_eepromData_u8)
- {
- if(var_eepromAddress_u16 > MAX_EEPROM_ADDR) return;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = SPI_EEPROM_WRITE;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = var_eepromAddress_u16 >> 8;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = var_eepromAddress_u16 & 0xFF;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = var_eepromData_u8;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- }
- #define ui16_SPI_EEP_RESP_TIME 250
- uint8_t ED2_SPI_EEPROM_ReadByte(uint16_t var_eepromAddress_u16)
- {
- uint8_t var_eepromData_u8;
- if(var_eepromAddress_u16 > MAX_EEPROM_ADDR) return 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = SPI_EEPROM_READ;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = var_eepromAddress_u16 >> 8;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = var_eepromAddress_u16 & 0xFF;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- DELAY_ms(ui16_SPI_EEP_RESP_TIME);
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 1; // inform slave to start operation
- #endif
- SPDAT = 0x00;
- while (!SPI_INT_Transmit_Completed);
- SPI_INT_Transmit_Completed = 0;
- var_eepromData_u8 = SPI_INT_Serial_Data_IN;
- #ifdef _SPI_USE_SS
- SPI_MASTER_SLAVE_SS = 0; // no operation with slave
- #endif
- return var_eepromData_u8;
- }
- #endif // _SPI_AS_MASTER
- void it_SPI(void) __interrupt(9) /* interrupt address is 0x004B */
- {
- switch( SPSTA ) /* read and clear spi status register */
- {
- case 0x80:
- SPI_INT_Serial_Data_IN = SPDAT; /* read receive data */
- SPI_INT_Transmit_Completed = 1;/* set software flag */
- break;
- case 0x10:
- /* put here for mode fault tasking */
- break;
- case 0x40:
- /* put here for overrun tasking */
- break;
- }
- #ifdef _SPI_AS_SLAVE
- SPDAT = SPI_INT_Serial_Data_IN; /* needed to complete clearing sequence */
- #endif
- }
- #endif // _AT89C51ED2_SPI_EEPROM
- /**** includes at89c51ed2.h ****
- //#define _AT89C51ED2_SPI
- #ifdef _AT89C51ED2_SPI
- __sfr __at (0xC3) SPCON; //SPI Control Register
- #define SPR2 0x80 //SPI Clork Rate select bit 2.
- #define SPEN 0x40 //SPI enable bit. When set enables SPI.
- #define SSDIS 0x20 //Cleared to enable SS in both Master and Slave modes.
- #define MSTR 0x10 //1=master mode. 0=slave mode.
- #define CPOL 0x08 //1=SCK is high when idle (active low), 0=SCK is low when idle (active high).
- #define CPHA 0x04 //1=shift triggered on the trailing edge of SCK. 0=shift trig. on leading edge.
- #define SPR1 0x02 //SPI Clork Rate select bit 1.
- #define SPR0 0x01 //SPI Clork Rate select bit 0.
- //SPR2 SPR1 SPR0 Baud Rate Divisor
- // 0 0 0 2
- // 0 0 1 4
- // 0 1 0 8
- // 0 1 1 16
- // 1 0 0 32
- // 1 0 1 64
- // 1 1 0 128
- // 1 1 1 Invalid: Don't Use
- __sfr __at (0xC4) SPSTA; //Serial Peripheral Status register
- #define SPIF 0x80 //Serial Peripheral Data Transfer Flag
- #define WCOL 0x40 //Write collision Flag.
- #define SSERR 0x20 //Synchronous Serial Slave Error Flag
- #define MODF 0x10 //Mode Fault Flag
- __sfr __at (0xC5) SPDAT; //SPI Data
- #endif // _AT89C51ED2_SPI
- **** includes at89c51ed2.h ****/
- #define _WATCHDOG_TIMER
- #ifdef _WATCHDOG_TIMER
- void rst_Watchdog( void );
- #define _AT89C51ED2_WDT
- #ifdef _AT89C51ED2_WDT
- __sfr __at(0xA6) WDTRST;
- __sfr __at(0xA7) WDTPRG;
- #endif
- //#define _AT89C51ED2_PCA_WDT
- #ifdef _AT89C51ED2_PCA_WDT
- __sfr __at(0xD8) ED2_PCA_CCON;
- __sfr __at(0xD9) ED2_PCA_CMOD;
- __sfr __at(0xDE) ED2_PCA_CCAPM4;
- __sfr __at(0xE9) ED2_PCA_CL;
- __sfr __at(0xF9) ED2_PCA_CH;
- __sfr __at(0xEE) ED2_PCA_CCAP4L;
- __sfr __at(0xFE) ED2_PCA_CCAP4H;
- #endif
- //#define _W78E516D_WDT
- #ifdef _W78E516D_WDT
- __sfr __at(0x8F) WDTC;
- #endif
- //#define __AT89S52__
- #ifdef __AT89S52__
- __sfr __at(0xA6) WDTRST;
- //__sfr __at(0xA7) WDTPRG;
- #endif
- #endif
- // eeprom which uses I2C (e.g. AT24C02)
- #define _I2C_EEPROM // can be used by SPI interface
- // eeprom which contains AT89C51ED2
- //#define _AT89C51ED2_EEPROM
- #ifdef _AT89C51ED2_EEPROM
- __sfr __at(0x0D2) ED2_EEP_EECON;
- #define ED2_EEP_EEE 0x02
- #define ED2_EEP_EEBUSY 0x01
- void ED2_EEPROM_WriteByte(uint16_t var_eepromAddress_u16, uint8_t var_eepromData_u8);
- uint8_t ED2_EEPROM_ReadByte(uint16_t var_eepromAddress_u16);
- void ED2_EEPROM_WriteByte(uint16_t var_eepromAddress_u16, uint8_t var_eepromData_u8)
- {
- __xdata uint8_t *p;
- p = var_eepromAddress_u16;
- if(var_eepromAddress_u16 > 2047) return;
- while(ED2_EEP_EECON & ED2_EEP_EEBUSY);
- EA = 0;
- ED2_EEP_EECON |= ED2_EEP_EEE;
- /* __asm
- MOV DPTR, var_eepromAddress_u16;
- MOV ACC, var_eepromData_u8
- MOVX @DPTR, A
- __endasm;
- */
- *p = var_eepromData_u8;
- ED2_EEP_EECON &= ~ED2_EEP_EEE;
- EA = 1;
- }
- uint8_t ED2_EEPROM_ReadByte(uint16_t var_eepromAddress_u16)
- {
- __xdata uint8_t *p;
- p = var_eepromAddress_u16;
- uint8_t var_eepromData_u8;
- if(var_eepromAddress_u16 > 2047) return 0;
- while(ED2_EEP_EECON & ED2_EEP_EEBUSY);
- EA = 0;
- ED2_EEP_EECON |= ED2_EEP_EEE;
- /* __asm
- MOV DPTR, var_eepromAddress_u16;
- MOV ACC, var_eepromData_u8
- MOVX @DPTR, A
- __endasm;
- */
- var_eepromData_u8 = *p;
- ED2_EEP_EECON &= ~ED2_EEP_EEE;
- EA = 1;
- return var_eepromData_u8;
- }
- #endif // _AT89C51ED2_EEPROM
- //#define BUF_SIZE 8
- #define BUF_SIZE 16
- #define S2_KEY P3_2
- #define S3_KEY P3_3
- #define S4_KEY P3_4
- #define S5_KEY P3_5
- // ZS5110 dev board
- //#define BRD_ZS5110
- // JZ-K3 dev board
- #define BRD_JZK3
- #ifdef BRD_ZS5110
- #define LED_PORT P2
- #endif // BRD_ZS5110
- #ifdef BRD_JZK3
- #define LED_PORT P1
- #define SEG3 P2_7
- #define SEG2 P2_6
- #define SEG1 P2_5
- #define SEG0 P2_4
- #endif // BRD_JZK3
- #define KEY_PORT P3
- void software_Reset(void);
- void prn_b_delay(void);
- #ifdef BRD_JZK3
- void disp_b_delay(void);
- #endif // BRD_JZK3
- void led_on(void);
- void led_off(void);
- int get_input(int end_char, char *buf, int max_length, int *recv_length);
- void timer_intr(void);
- void timer_events(void);
- void S2_KEY_events(void);
- void S3_KEY_events(void);
- /*------------------------------------------------------------------------------
- rst_Watchdog() : Resets the watchdog timer to avoid microcontroller reset
- For __AT89C51ED2__
- This is done by writing to the WDTRST sfr with 0x1E and
- then 0xE1. This will reset the timer to 0x0.
- ------------------------------------------------------------------------------*/
- #ifdef _WATCHDOG_TIMER
- void rst_Watchdog( void )
- {
- #ifdef _AT89C51ED2_WDT
- WDTPRG |= 0x00; // minimum delay
- // WDTPRG |= 0x07; // maximum delay
- WDTRST = 0x1E;
- WDTRST = 0xE1;
- #endif
- #ifdef _AT89C51ED2_PCA_WDT
- // ED2_PCA_CL = 0xFF;
- // ED2_PCA_CH = 0xFF;
- ED2_PCA_CCAP4L = 0xFF;
- ED2_PCA_CCAP4H = 0xFF;
- ED2_PCA_CCAPM4 = 0x48; // ECOM & MAT
- ED2_PCA_CMOD |= 0x40; // WDTE
- ED2_PCA_CCON |= 0x40; // turn on counter
- #endif
- #ifdef _W78E516D_WDT
- WDTC |= 0x80; // minimum delay
- // WDTC |= 0x87; // maximum delay
- #endif
- #ifdef __AT89S52__
- WDTRST = 0x1E;
- WDTRST = 0xE1;
- #endif
- }
- #endif
- void software_Reset(void) {
- // wdt_enable(WDTO_15MS);
- //while(1) { }
- //wdt_reset();
- /* EA = 0;
- WDTRST = 0x1E; // Enable the watchdog
- WDTRST = 0xE1;
- for (;;); // Infinite loop*/
- #ifdef _WATCHDOG_TIMER
- rst_Watchdog();
- while(1);
- #else
- void (*reset)(void);
- reset = 0x0000;
- reset();
- #endif
- }
- /*
- void _delay_ms(uint16_t delayTimeMS)
- {
- delay_ms(delayTimeMS);
- }
- */
- volatile unsigned char b_delay;
- void prn_b_delay(void) {
- // uint16_t tmp;
- // int8_t i;
- UART_Printf("b_delay: %4d\n\r", (sint16_t) b_delay*50 );
- /* lcd_i2c_setCursor(13,1);
- lcd_i2c_setCursor(12,1);
- lcd_i2c_setCursor(11,1);
- lcd_i2c_setCursor(10,1);
- */
- /* tmp = b_delay * 50;
- i = 3;
- while(i >= 0) {
- lcd_i2c_setCursor(10 + i, 1);
- lcd_i2c_write(0x30 + (tmp % 10));
- i--;
- tmp /= 10;
- }
- lcd_i2c_setCursor(14,1);
- lcd_i2c_write('m');
- lcd_i2c_write('s');*/
- }
- #ifdef BRD_JZK3
- unsigned char LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
- void disp_b_delay(void) {
- unsigned int ds = b_delay * 5;
- // switch(cur_seg) {
- // case 2:
- P0 = LEDDis[ds/100];
- P0 &= 0x7f;
- SEG2=0;
- DELAY_us(10);
- SEG2=1;
- // cur_seg = 1;
- // break;
- // case 1:
- P0=LEDDis[(ds-(ds/100)*100)/10];
- SEG1=0;
- DELAY_us(10);
- SEG1=1;
- // case 0:
- P0=LEDDis[(ds-(ds/100)*100)-((ds-(ds/100)*100)/10)*10];
- SEG0=0;
- DELAY_us(10);
- SEG0=1;
- // }
- }
- #endif // BRD_JZK3
- void led_on(void)
- {
- //PORTD |= _BV(PD4); //Pin 2 of MCU as output
- LED_PORT &= 0x00;
- }
- void led_off(void)
- {
- //PORTD &= ~_BV(PD4);
- LED_PORT |= 0xff;
- }
- int get_input(int end_char, char *buf, int max_length, int *recv_length)
- {
- int lastRead;
- static int idx = 0;
- /*
- if (RI) {
- lastRead = UART_RxChar();
- UART_Printf(" - %c\n\r", (char) lastRead);
- }
- */
- // when there are no characters to read, or the character isn't a newline
- if (RI) {
- // something to read
- if (end_char != (lastRead = UART_RxChar())) {
- buf[idx] = lastRead;
- idx++;
- if (idx == max_length) {
- *recv_length = idx;
- idx = 0;
- return 1;
- }
- } else {
- *recv_length = idx;
- idx = 0;
- return 1; // when we get a newline, break out of loop
- }
- }
- return 0;
- }
- volatile unsigned char led_flag = 1;
- volatile unsigned int timer0_run = 1;
- volatile unsigned int TimerCount0 = 0;
- void timer_intr(void)
- {
- if(timer0_run) TimerCount0 ++;
- }
- void timer_events(void)
- {
- if(TimerCount0 >= b_delay) {
- timer0_run = 0;
- TimerCount0 = 0;
- if(led_flag) {
- led_flag = 0;
- led_on();
- } else {
- led_flag = 1;
- led_off();
- }
- timer0_run = 1;
- }
- }
- volatile unsigned char S2_processed = 1;
- volatile unsigned char S3_processed = 1;
- //unsigned char S4_processed = 1;
- //unsigned char S5_processed = 1;
- void S2_KEY_events(void)
- {
- //if( KEY_PORT & S2_KEY ) { // not pressed
- if( S2_KEY ) { // not pressed
- S2_processed = 1;
- } else { // pressed
- if( S2_processed == 1 ) {
- S2_processed = 0;
- //_delay_ms(20);
- //TIMER_Stop(0);
- b_delay += 1;
- if( b_delay > 100 ) b_delay = 100;
- #ifdef _AT89C51ED2_EEPROM
- ED2_EEPROM_WriteByte(0, b_delay);
- #endif
- #ifdef _I2C_EEPROM
- EEPROM_WriteByte(0, b_delay);
- #endif
- #if defined(_AT89C51ED2_SPI_EEPROM) && defined(_SPI_AS_MASTER)
- //#ifdef _AT89C51ED2_SPI_EEPROM
- ED2_SPI_EEPROM_WriteByte(0, b_delay);
- #endif
- if( b_delay == 1 ) {
- timer0_run = 1;
- }
- prn_b_delay();
- }
- }
- }
- void S3_KEY_events(void)
- {
- //if( KEY_PORT & S3_KEY ) { // not pressed
- if( S3_KEY ) { // not pressed
- S3_processed = 1;
- } else { // pressed
- if( S3_processed == 1 ) {
- S3_processed = 0;
- //_delay_ms(20);
- if( b_delay > 0 ) {
- b_delay -= 1;
- #ifdef _AT89C51ED2_EEPROM
- ED2_EEPROM_WriteByte(0, b_delay);
- #endif
- #ifdef _I2C_EEPROM
- EEPROM_WriteByte(0, b_delay);
- #endif
- #if defined(_AT89C51ED2_SPI_EEPROM) && defined(_SPI_AS_MASTER)
- //#ifdef _AT89C51ED2_SPI_EEPROM
- ED2_SPI_EEPROM_WriteByte(0, b_delay);
- #endif
- if( b_delay == 0 ) {
- timer0_run = 0;
- }
- }
- prn_b_delay();
- }
- }
- }
- volatile char last_command[BUF_SIZE];
- volatile char sbuf[BUF_SIZE];
- void main(void)
- {
- // int temp;
- // int readbytes;
- uint8_t eep_cmd = 0;
- uint16_t eep_address = 0;
- // if(EA == 0) {
- // EnableGlobalInterrupts();
- // software_Reset();
- // }
- //
- // DisableGlobalInterrupts();
- #ifdef __STC12C5A60S2__
- // CLK_DIV = 0x03; // divide crystal frequency to 2^3 (8)
- CLK_DIV = 0x00; // divide crystal frequency to 2^0 (1)
- #endif // __STC12C5A60S2__
- #ifdef __W78E516D__
- if(PCON & 0x00010000) { // power on reset flag is set?
- CLR_POR(); // clear power on reset flag
- } else {
- CHPENR = 0x87;
- CHPENR = 0x59; // enter CHPCON configuration
- //CHPCON = 0b00010000; // enable swreset, enable AUX-RAM, start from APROM,
- CHPCON = 0x80; // software reset
- // CHPENR = 0x00; // exit CHPCON configuration
- }
- #endif
- #ifdef __W78E516D__
- // SET_P0UP();
- // CLR_P0UP();
- #endif
- DELAY_ms(500);
- P3 |= 0b00111100; // set as input
- i2c_init();
- DELAY_ms(50);
- //lcd_i2c_init(0x3f, 20, 4);
- // lcd_i2c_init(0x27, 20, 4);
- DELAY_ms(20);
- // lcd_i2c_setCursor(0,0);
- // lcd_i2c_printstr("Engine");
- /*
- lcd_i2c_setCursor(0,1);
- lcd_i2c_printstr("12345678901234567890");
- // lcd_i2c_printstr("1234567890 ");
- lcd_i2c_setCursor(0,2);
- lcd_i2c_printstr("AAAAAAAAAAAAAAAAAAAA");
- lcd_i2c_setCursor(0,3);
- lcd_i2c_printstr("It's Work.!!!");
- // lcd_backlight(ON);
- // transceiver(LCD_BACKLIGHT);
- while(1) {
- lcd_i2c_setCursor(13,3);
- // lcd_i2c_setCursor(12,1);
- sprintf(str, "%03u", i++);
- lcd_i2c_printstr(str);
- //transceiver(LCD_BACKLIGHT);
- DELAY_ms(1);
- }
- */
- /*
- led_on();
- DELAY_ms(500);
- led_off();
- DELAY_ms(500);
- */
- #ifdef _AT89C51ED2_SPI_EEPROM
- ED2_SPI_EEPROM_Init();
- #endif
- b_delay = 1;
- #ifdef _AT89C51ED2_EEPROM
- b_delay = ED2_EEPROM_ReadByte(0);
- #endif
- #ifdef _I2C_EEPROM
- b_delay = EEPROM_ReadByte(0);
- #endif
- #if defined(_AT89C51ED2_SPI_EEPROM) && defined(_SPI_AS_MASTER)
- //#if _AT89C51ED2_SPI_EEPROM
- b_delay = ED2_SPI_EEPROM_ReadByte(0);
- #endif
- if(b_delay > 100) {
- b_delay = 100;
- #ifdef _I2C_EEPROM
- EEPROM_WriteByte(0, b_delay);
- #endif
- }
- /*
- strcpy(last_command, "help");
- TIMER_Init(0, 50000);
- TIMER_AttachInterrupt(0, timer_intr);
- TIMER_Start(0); // Timer Number, Interrupts (Enabled,Disabled);
- // Open serial communications and wait for port to open:
- //UART_Init(9600);
- UART_Init(12000000, 9600);
- // UART_Init(12000000, 19200);
- // UART_Init(12000000, 38400);
- // UART_Init(11059200, 115200);
- EnableGlobalInterrupts();
- UART_TxString("\033[2J\033[;HStart\n\r");
- prn_b_delay();
- UART_TxString("cmd: \n\r");
- //RI = 0; // clear receive flag
- //TI = 0; // clear transmit flag
- //rst_Watchdog();
- */
- SPI_INT_Transmit_Completed = 0;
- EnableGlobalInterrupts();
- while (1) { // run over and over
- if(SPI_INT_Transmit_Completed) {
- eep_cmd = SPI_INT_Serial_Data_IN;
- // SPDAT = SPI_INT_Serial_Data;
- SPI_INT_Transmit_Completed = 0;
- }
- if(eep_cmd == 'W') {
- eep_address = 0;
- while(!SPI_INT_Transmit_Completed);
- eep_address = SPI_INT_Serial_Data_IN << 8;
- // SPDAT = SPI_INT_Serial_Data;
- SPI_INT_Transmit_Completed = 0;
- while(!SPI_INT_Transmit_Completed);
- eep_address |= SPI_INT_Serial_Data_IN;
- // SPDAT = SPI_INT_Serial_Data;
- SPI_INT_Transmit_Completed = 0;
- while(!SPI_INT_Transmit_Completed);
- b_delay = SPI_INT_Serial_Data_IN;
- // SPDAT = SPI_INT_Serial_Data;
- SPI_INT_Transmit_Completed = 0;
- #ifdef _I2C_EEPROM
- EEPROM_WriteByte(0, b_delay);
- #endif
- eep_cmd = 0;
- }
- if(eep_cmd == 'R') {
- eep_address = 0;
- while(!SPI_INT_Transmit_Completed);
- eep_address = SPI_INT_Serial_Data_IN << 8;
- // SPDAT = SPI_INT_Serial_Data;
- SPI_INT_Transmit_Completed = 0;
- while(!SPI_INT_Transmit_Completed);
- eep_address |= SPI_INT_Serial_Data_IN;
- // SPDAT = SPI_INT_Serial_Data;
- SPI_INT_Transmit_Completed = 0;
- #ifdef _I2C_EEPROM
- b_delay = EEPROM_ReadByte(0);
- #endif
- // SPI_INT_Serial_Data = b_delay;
- while(!SPI_INT_Transmit_Completed);
- // SPDAT = SPI_INT_Serial_Data;
- SPDAT = b_delay;
- SPI_INT_Transmit_Completed = 0;
- eep_cmd = 0;
- }
- /*
- timer_events();
- S2_KEY_events();
- S3_KEY_events();
- if( 0 < (temp = get_input('\r', sbuf, BUF_SIZE - 1, &readbytes)) ) {
- sbuf[readbytes] = '\0';
- UART_TxString("input: \n\r");
- UART_Printf("%s\n\r", sbuf);
- if( strcmp(sbuf, "a") != 0 ) strcpy(last_command, sbuf); // save last meaningful command
- repeat_last_command:
- if( strcmp(sbuf, "ledon") == 0 ) {
- //TIMER_Stop(0);
- b_delay += 1;
- if( b_delay > 100 ) b_delay = 100;
- #ifdef _AT89C51ED2_EEPROM
- ED2_EEPROM_WriteByte(0, b_delay);
- #endif
- #ifdef _I2C_EEPROM
- EEPROM_WriteByte(0, b_delay);
- #endif
- #ifdef _AT89C51ED2_SPI_EEPROM
- ED2_SPI_EEPROM_WriteByte(0, b_delay);
- #endif
- if( b_delay == 1 ) TIMER_Start(0);
- prn_b_delay();
- } else if( strcmp(sbuf, "ledoff") == 0 ) {
- if( b_delay > 0 ) {
- b_delay -= 1;
- #ifdef _AT89C51ED2_EEPROM
- ED2_EEPROM_WriteByte(0, b_delay);
- #endif
- #ifdef _I2C_EEPROM
- EEPROM_WriteByte(0, b_delay);
- #endif
- #ifdef _AT89C51ED2_SPI_EEPROM
- ED2_SPI_EEPROM_WriteByte(0, b_delay);
- #endif
- if( b_delay == 0 ) TIMER_Stop(0);
- }
- prn_b_delay();
- } else if( strcmp(sbuf, "r") == 0 ) {
- #ifdef _AT89C51ED2_EEPROM
- b_delay = ED2_EEPROM_ReadByte(0);
- #endif
- #ifdef _I2C_EEPROM
- b_delay = EEPROM_ReadByte(0);
- #endif
- #ifdef _AT89C51ED2_SPI_EEPROM
- b_delay = ED2_SPI_EEPROM_ReadByte(0);
- #endif
- prn_b_delay();
- } else if( strcmp(sbuf, "a") == 0 ) {
- UART_Printf("rep cmd: %s\n\r", last_command);
- strcpy(sbuf, last_command); // restore last meaningful command
- goto repeat_last_command;
- } else if( strcmp(sbuf, "rst") == 0 ) {
- software_Reset(); // reset arduino
- }
- UART_TxString("cmd: \n\r");
- }
- #ifdef BRD_JZK3
- disp_b_delay();
- #endif // BRD_JZK3
- */
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment