/****************************************
********** 93c46的51单片机C源程序*****************************************/
#include <reg51.h>
#include <intrins.h>
sbit cs= P1^7;
sbit sk= P1^6;
sbit di= P1^5;
sbit dod= P1^4;
sbit led_r= P1^3;
sbit led_g= P1^2;
/*
#define cs P1^7
#define sk P1^6
#define di P1^5
#define dod P3^7
#define led_g P1^3
#define led_r P1^3*/
//#define de 100 //8
#define uchar unsigned char
#define uint unsigned int
unsigned char de=100;
/***********************************
@ = _at_ (c51); _delay(de)=_nop(c51)
_pac ,pcc ,pbc ,pdc is control i/o port
************************************/
//unsigned char r_data1 _at_ 0x40;
void _delay(uchar de)
{
while(de){de--; _nop_();}
}
/****************************************
start bit: 1, op: 10, addr : A6--A0;*****
addrx=1 10 a6a5a4a3a2a1a0 : 10 number ***
******* read_9346() 8bit
****************************************/
unsigned char read_9346(uchar addrx)
{
uchar i;
unsigned char j=0x00;
cs=1; _delay(de);
sk=0; _delay(de);
di=1; //1 1 0
sk=1; _delay(de);
sk=0; _delay(de);
di=1;
sk=1;_delay(de);
sk=0;_delay(de);
di=0;
sk=1;_delay(de);
sk=0;_delay(de);
// a6---a0 valid 7 bit data;so follow
for(i=0;i<7;i++)
{ addrx<<=1;
di=(addrx&0x80);
sk=1;_delay(de);
sk=0;_delay(de);
}
dod=1;
// return char 8 bit data;
for(i=0;i<8;i++)
{//j=(j<<1)|dod;
sk=1;_delay(de);
j=(j<<1)|dod;
sk=0;_delay(de);
}
cs=0;
return j;
}
/****************************************
********** en_ dis write_ erase() 8bit
*****************************************/
void en_dis(uchar a)
{
uchar i,en_dis;
cs=1; _delay(de);
sk=0; _delay(de);
di=1; //1 0 0
sk=1; _delay(de);
sk=0; _delay(de);
di=0;
sk=1;_delay(de);
sk=0;_delay(de);
di=0;
sk=1;_delay(de);
sk=0;_delay(de);
if(a>=1)en_dis=0xc0;else en_dis=0x00; //11x_xxxxb
for(i=0;i<7;i++)
{
di=en_dis&0x80;
sk=1;_delay(de);
sk=0;_delay(de);
en_dis<<=1;
}
cs=0;
}
/*********************************************
******* void erase_all93c46(void)***********
a>0 write a=0; erase
*********************************************/
void erase(void)
{
uchar i,erase;
cs=1; _delay(de);
sk=0; _delay(de);
di=1; //1 0 0
sk=1; _delay(de);
sk=0; _delay(de);
di=0;
sk=1;_delay(de);
sk=0;_delay(de);
di=0;
sk=1;_delay(de);
sk=0;_delay(de);
//if(a>0)erase=0x40;else erase=0x20;
erase=0x80;
for(i=0;i<7;i++)
{
di=erase&0x80;
sk=1;_delay(de);
sk=0;_delay(de);
erase<<=1;
}
cs=0;
}
/*********************