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

📄 eetest.c

📁 Hitech microchip PIC C18 Compiler
💻 C
字号:
#include <pic18.h>#include "eedemo.h"#include <stdio.h>	/* NOTE: This project shall not function for PIC18Cxxx devices. *//* fill the EEPROM with initial values */__EEPROM_DATA(0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07);__EEPROM_DATA(0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F);__EEPROM_DATA(0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17);__EEPROM_DATA(0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F);__EEPROM_DATA(0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27);__EEPROM_DATA(0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F);__EEPROM_DATA(0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37);__EEPROM_DATA(0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F);__EEPROM_DATA(0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47);__EEPROM_DATA(0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F);__EEPROM_DATA(0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57);__EEPROM_DATA(0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F);__EEPROM_DATA(0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67);__EEPROM_DATA(0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F);__EEPROM_DATA(0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77);__EEPROM_DATA(0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F);void interrupt ISR(void);void init(void);void write(void);unsigned char read(void);void putch(unsigned char);void main(void){	volatile unsigned char data=0;	unsigned char eeprom_size;		eeprom_size=0xFF;	init();	while(1)	{		if(TMR1IF)	/* a new action begins each time timer 1 overflows */		{				TMR1IF=0;						LED=(LED^1);	/* toggle LED to indicate a new action has begun */						printf("\rAddress %x was ",EEADR);	/* output the current address */			if(READ)			{				data=read();				printf("read, value = %x. ",data);	/* output the action */			}			else			{				EEDATA=BLUE_DIP;				write();				printf("written with %x.  ",EEDATA);	/* output the action */			}				if(EEADR == eeprom_size)	/* after the last EEPROM address */				EEADR=0;		/* return to the first */			else				EEADR++;	/* increment EEPROM address pointer */		}		}}void init (void){	T1CON=0x91;	/* Timer 1 is enabled, 1:2 prescale timer */		TMR1IE=0;	TMR1IF=0;	TRISA=0x10;	/* read/write select switch connect to PORTA4 */	TRISB=0xFF;	/* PORTB0:3 = RED_DIP1, PORTB5 = pushbutton in */	TRISC=0x0F;	/*RED_DIP2 switches connect to PORTC */		TRISD=0xFF;	/* Data (blue) DIP switches connect to PORTD */	RBIE=1;	/* PORTB interrupt on change is enabled */		/* The EEPROM address can be reloaded by */	RBIF=0;	/* the pushbutton on PORTB5 */	GIE=1;	IPEN=0;	/* interrupt priorities are not enabled */	SPEN=1;	/* enable serial port */	TXEN=1;	/* serial transmit enabled */	TXIE=0;	/* not interrupt driven */	EEADR=0;}void write(void)	/* write a byte of data to EEPROM */{	GIE=0;		// disable interrupts	WREN=1;		// enable writes	EECON2=0x55;	// required sequence for EEPROM update	EECON2=0xAA;	WR=1;	while(WR)continue;	EEIF=0;	WREN=0;	GIE=1;	// re-enable interrupts}unsigned char read(void)	/* read a byte of data from EEPROM */{	unsigned char eeprom_data;	// in PIC18Fxx2 devices, the data needs					// to be collected in the next instruction	GIE=0;				// following RD=1. A temporary variable is	RD=1;				// created to do this.	eeprom_data=EEDATA;	GIE=1;	return eeprom_data;}void putch(unsigned char c){	TXREG=c;	while(!TXIF)continue;	TXIF=0;}void interrupt ISR(void)	/* interrupt triggered by the pushbuttons */{	if((RBIE)&&(RBIF))	{		RBIF=0;		if(ADDRESS_RESET)	/* if the pushbutton is depressed */			EEADR=RED_DIP;	/* load the red DIP switch to the EEPROM address */	}}

⌨️ 快捷键说明

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