📄 mwire.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 + -