⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mwire.c

📁 microwire protocol for cypress 63513 and microwire eeprom
💻 C
字号:
/* This example application does not compile with the
 * demo version of the compiler.
 ***/
#pragma option f0 /* no page breaks in listing file */
#pragma option CALLMAP /* add a program call map to listing file */

#include <dev\c63513.h> /* target processor description file */

#include <port.h>
#include <delay.h>
#include <mwire_ee.h>
#include <keypad.h>
#include <lcd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define KEYPAD_PORT             PORT0           /* a keypad on PORT0 */

#define LCD_DATA                PORT0           /* LCD data lines on PORT0 */
#define LCD_E_PORT              PORT1
#define LCD_E_PIN               2
#define LCD_RS_PORT             PORT1
#define LCD_RS_PIN              0               /* LCD control lines on PORT1 */
#define LCD_RW_PORT             PORT1
#define LCD_RW_PIN              1

#define MWIRE_EEPROM_SIZE       128             /* 128 X 16 bits */
#define MWIRE_CONTROL           PORT1
#define MWIRE_CLK	              0               /* microwire clock */
#define MWIRE_CS	              3               /* microwire chip select */
#define MWIRE_DATA              PORT1
#define MWIRE_DO	              1               /* microwire data output */
#define MWIRE_DI	              1               /* microwire data input */

#define putch(CH)               lcd_putch(CH)   /* output characters to LCD */
#define getch()                 keypad_getch()  /* input characters from keypad */
#define clrscr()                lcd_clrscr()
#define kbhit()                 keypad_kbhit()

#define MWIRE_PORT_DDR_READ()                    PORT1IE=0xf2; PORT_SET_BIT(MWIRE_DATA,MWIRE_DI)
#define MWIRE_PORT_DDR_WRITE()                   PORT1IE=0xf0
#define MWIRE_PORT_DDR()                         PORT1IE=0xf0
#define LCD_DATA_IN_CONTROL_OUT()  PORT0IE=0xff; PORT1IE=0xf0; PORT_WRITE(LCD_DATA,0xff)
#define LCD_DATA_OUT_CONTROL_OUT() PORT0IE=0x00; PORT1IE=0xf0; PORT0=PORT0_S
#define KEYPAD_READ()              PORT0IE=0xf0;               PORT0=0xf0
#define KEYPAD_RESTORE_PORT()      PORT0IE=0x00;               PORT0=PORT0_S

#define itoa(VAL,STR,RADIX)     ui16toa(VAL,STR,RADIX) /* itoa() : unsigned 16bit integer to ASCII */
#define atoi(STR)               atoi16(STR) /* atoi() : ASCII to 16bit integer */

const char keypad_table[] = "123a"
                            "456b"
                            "789c"
                            "f0x\n";

#define keypad_debounce_delay() delay_ms(0x28)

#define mwire_bus_delay() NOP();NOP();NOP()

char str[16];
unsigned int address;
unsigned long val;

void __STARTUP(void)
{
    GPIO_CONFIG = PORT0_CMOS      | PORT1_CMOS      | PORT2_RESISTIVE | PORT3_RESISTIVE;

    LCD_DATA_IN_CONTROL_OUT();

    PORT0 = PORT1 = PORT2 = PORT3 = PORT0_S = PORT1_S = PORT2_S = PORT3_S = 0xff;

    PORT_CLEAR_BIT(LCD_E_PORT,LCD_E_PIN);
    PORT_CLEAR_BIT(MWIRE_CONTROL,MWIRE_CS);
}

void main(void)
{
    lcd_init();
    clrscr();
    puts("   Byte Craft");
    puts("    Limited.");

    (void)getch();
    mwire_send_address(MWIRE_EWEN); /* enable microwire eeprom */
    PORT_CLEAR_BIT(MWIRE_CONTROL,MWIRE_CS);

    while(1)
    {
        /* display a menu */
        clrscr();
        puts("[1] edit  EEPROM");
        lcd_gotoXY(0,1);
        puts("[2] clear EEPROM");
        switch(getch())
        {

        case '1':
                clrscr();
                puts("address to edit");
                lcd_gotoXY(0,1);
                puts("$>");

                gets(str,sizeof(str));
                address=atoi(str);

                clrscr();

                puts("enter new value");
                lcd_gotoXY(0,1);
                itoa(address,str,16);
                puts(str);
                putch(':');
                val=mwire_read(address);
                itoa(val,str,16);
                puts(str);
                putch('>');
                gets(str,sizeof(str));
                val=atoi(str);
                mwire_write(address,val);
                break;
        case '2':
                mwire_write_all(0);
                clrscr();
                puts("MWIRE EEPROM");
                lcd_gotoXY(0,1);

                puts("has been cleared");
                (void)getch();
                break;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -