Test - lowercase jpg

PIC12C508 Read and Write 93LC46 Program

/************************************************* ***********
* Processor: MicroChip PIC12C508
* Compiler: Hi-TECH PICC 8.00PL2
* Writer: Jason Kuo
* Description: It can read/write 93LC46 (64x16-bit organization)
************************************************** ***********/

static volatile unsigned char RTCC @ 0x01;
static volatile unsigned char TMR0 @ 0x01;
static volatile unsigned char PCL @ 0x02;
static volatile unsigned char STATUS @ 0x03;
static unsigned char FSR @ 0x04;
static volatile unsigned char OSCCAL @ 0x05;
static volatile unsigned char GPIO @ 0x06;

static unsigned char controlOPTION @ 0x00;
static volatile unsigned char controlTRIS @ 0x06;

/* STATUS bits */
static bit GPWUF @(unsigned) & STATUS * 8 + 7;
static bit PA0 @(unsigned) & STATUS * 8 + 5;
static bit TO @(unsigned) & STATUS * 8 + 4;
static bit PD @(unsigned) & STATUS * 8 + 3;
static bit ZERO @(unsigned) & STATUS * 8 + 2;
static bit DC @(unsigned) & STATUS * 8 + 1;
static bit CARRY @(unsigned) & STATUS * 8 + 0;

/* OPTION bits */
#define GPWU (1 << 7)
#define GPPU (1 << 6)
#define T0CS (1 << 5)
#define T0SE (1 << 4)
#define PSA (1 << 3)
#define PS2 (1 << 2)
#define PS1 (1 << 1)
#define PS0 (1 << 0);

/* OSCCAL bits */
static volatile bit CAL3 @(unsigned) & OSCCAL * 8 + 7;
static volatile bit CAL2 @(unsigned) & OSCCAL * 8 + 6;
static volatile bit CAL1 @(unsigned) & OSCCAL * 8 + 5;
static volatile bit CAL0 @(unsigned) & OSCCAL * 8 + 4;

static volatile bit GP5 @(unsigned) & GPIO * 8 + 5;
static volatile bit GP4 @(unsigned) & GPIO * 8 + 4;
static volatile bit GP3 @(unsigned) & GPIO * 8 + 3;
static volatile bit GP2 @(unsigned) & GPIO * 8 + 2;
static volatile bit GP1 @(unsigned) & GPIO * 8 + 1;
static volatile bit GP0 @(unsigned) & GPIO * 8 + 0;

#define CONFIG_ADDR 0xFFF
/* code protection */
#define MCLREN 0xFFFF // memory clear enable
#define MCLRDIS 0xFFEF // memory clear disable
/* watchdog */
#define WDTEN 0xFFFF // watchdog timer enable
#define WDTDIS 0xFFFB // watchdog timer disable
/* code protection */
#define PROTECT 0xFFF7 // protect the program code
#define UNPROTECT 0xFFFF // do not protect the program code
/* osc configurations */
#define EXTRC 0xFFFF // external resistor/capacitor
#define INTRC 0xFFFE // internal
#define XT 0xFFFD // crystal/resonator
#define LP 0xFFFC // low power crystal/resonator
/* 93LC46 I/O PIN define */
#define CSGP0 // Chip Select
#define CLKGP1 // Serial Data Clock
#define DIGP2 // Serial Data Input
#define DOGP4 // Serial Data Output

void Delay(unsigned int counter);
void Pulse(void);
void StartBit(void);
void EWEN(void);
void EWDS(void);
extern void Write93LC46(unsigned char Offset_Addr, unsigned int tx_data);
extern unsigned int Read93LC46(unsigned char Offset_Addr);
void InitPIC(void);

#define CLRWDT() asm("clrwdt")
#define SLEEP() asm("sleep")

#define ___mkstr1(x) #x
#define ___mkstr(x) ___mkstr1(x)
#define __CONFIG(x) asm(" psect config, CONFIG, delta=2");\
asm(" global config_word");\
asm(" config_word");\
asm(" dw" ___mkstr(x))
#define __IDLOC(w) asm(" psect idloc, IDLOC, delta=2");\
asm(" global idloc_word");\
asm(" idloc_word");\
asm(" irpc __arg," ___mkstr(w));\
asm(" dw 0&__arg&h");\
asm(" endm")

__CONFIG(MCLRDIS & WDTDIS & EXTRC & PROTECT);

/*------------------------------------------------ ----
Function: Delay
Input: unsigned int (counter)
Output: None
Description: Delay routine
If counter = 1, delay 35us, if counter = 10, delay 134us,
If counter = 100, delay 1.12ms,
These delays are based on internal 4MHz
-------------------------------------------------- ----*/

void Delay(unsigned int counter)
{
while (counter > 0) counter--;
}

/*------------------------------------------------ ----
Function: Pulse
Input: None
Output: None
Description: Send a pulse (10) to Serial Data Clock (CLK)
-------------------------------------------------- ----*/

void Pulse(void)
{
CLK = 1;
Delay(25);
CLK = 0;
}

/*------------------------------------------------ ----
Function: StartBit
Input: None
Output: None
Description:
1. Set Chip Select (CS) = 1 (high)
2. Set a Start Bit (1) to Serial Data Input (DI)
-------------------------------------------------- ----*/

void StartBit(void)
{
CS = 1;
DI = 1;
Pulse();
}

/*------------------------------------------------ ----
Function: EWEN
Input: None
Output: None
Description: ERASE/WRITE Enable
-------------------------------------------------- ----*/

void EWEN(void)
{
unsigned char i, temp;
StartBit(); /*1*/
temp = 0x80; /*0011xxxx, (opcode: 00, Address: 11xxxx)*/
for (i = 0; i < 8; i++)
{
if (0x30 & temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
CS = 0;
}

/*------------------------------------------------ ----
Function: EWDS
Input: None
Output: None
Description: ERASE/WRITE Disable
-------------------------------------------------- ----*/

void EWDS(void)
{
unsigned char i;
StartBit(); /*1*/
DI = 0; /*0000xxxx, (opcode: 00, Address: 00xxxx)*/
for (i = 0; i < 8; i++)
Pulse();
CS = 0;
}

/*------------------------------------------------ ----
Function: Write93LC46
Input: unsigned char Offset_Address, unsigned int tx_data
Output: None
Description: Write 16 bits data into 93LC46 Offset_Address
-------------------------------------------------- ----*/

void Write93LC46(unsigned char Offset_Addr, unsigned int tx_data)
{
unsigned char Addr, i;
unsigned int temp;
EWEN();
StartBit(); /*1*/
Offset_Addr = Offset_Addr & 0x3F; /*6 bits address*/
Addr = Offset_Addr + 0x40; /*01 AAAAAA, (opcode: 01, address: AAAAAA)*/
temp = 0x0080;
for (i = 0; i < 8; i++)
{
if (Addr & temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
temp = 0x8000; /*DDDDDDDDDDDDDDDD (16 bits data)*/
for (i = 0; i < 16; i++)
{
if (tx_data & temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
CS = 0;
EWDS();
}

/*------------------------------------------------ ----
Function: Read93LC46
Input: unsigned char Offset_Address
Output: unsigned int
Description: Read 16 bits data from 93LC46 offset address
-------------------------------------------------- ----*/

unsigned int Read93LC46(unsigned char Offset_Addr)
{
unsigned char Addr, i, temp;
unsigned int rx_data;
StartBit(); /*1*/
Offset_Addr = Offset_Addr & 0x3F; /*6 bits address*/
Addr = Offset_Addr + 0x80; /*10 AAAAAA, (opcode: 10, address: AAAAAA)*/
temp = 0x80;
for (i = 0; i < 8; i++)
{
if (Addr & temp)
DI = 1;
else
DI = 0;
Pulse();
temp >>= 1;
}
rx_data = 0x0000; /*DDDDDDDDDDDDDDDD (16 bits data)*/
for (i = 0; i < 16; i++)
{
Pulse();
if (DO)
rx_data |= 0x0001;
if (i < 15)
rx_data <<= 1;
}
CS = 0;
return(rx_data);
}

void InitPIC(void)
{
OPTION = (GPWU | GPPU | PS2 | PS1 | PS0);
TRIS = 0x10;
CS = 0;
CLK = 0;
DI = 0;
}

/* Main routine */
void main(void)
{
unsigned char addr;
unsigned int rx_buf;
InitPIC();
/* Read a word then +1 and write back to 93LC46 */
for (addr = 0; addr < 10; addr++)
{
rx_buf = Read93LC46(addr);
rx_buf = rx_buf + 1;
Write93LC46(addr, rx_buf);
}
}

12W Universal Charger

Power 12W ,output voltage 3-12V, output current Max 1A, 6 dc tips. We can meet your specific requirement of the products, like label design. The material of this product is PC+ABS. All condition of our product is 100% brand new.

Our products built with input/output overvoltage protection, input/output overcurrent protection, over temperature protection, over power protection and short circuit protection. You can send more details of this product, so that we can offer best service to you!


12W Wall Adapter, 12W Wall Power Supply,12W Power Cord In Wall, 12W Wall Power Adapter

Shenzhen Waweis Technology Co., Ltd. , https://www.waweis.com