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

📄 93c46读写程序.txt

📁 93C46读写控制程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
    SETB  C                 ;产生启始条件。
    MOV   R6,#09H
READ1:  
     CLR   SK_93C46
     MOV   DI_93C46,C
     SETB  SK_93C46 
     RLC   A
     DJNZ  R6,READ1
        
     MOV   R6,#09H      ;连续读取两个字节的数据加一位伪数据位。
READ2:  
     CLR   SK_93C46
     SETB  DO_93C46
     MOV   C,DO_93C46
     SETB  SK_93C46
     RLC   A
     DJNZ  R6,READ2
     MOV   DATA_HIGH,A
     MOV   R6,#08H
READ3:
    CLR    SK_93C46
    SETB   DO_93C46
    MOV    C,DO_93C46
    SETB   SK_93C46
    RLC    A
    DJNZ   R6,READ3
    MOV     DATA_LOW, A
    CLR     SK_93C46
    CLR     CS_93C46
    CLR     DI_93C46
    CLR     DO_93C46
    SETB     EA
    RET

;******************************************************************
;名称:写指令(WRITE指令)
;功能:把DATA_HIGH(H),DATA_LOW(L)的数据
;     写到93C46中DATA_ADDRESS所指向的存储器中
;******************************************************************
WRITE_93C46:   
        CLR     EA
        SETB    DI_93C46
        SETB    CS_93C46
        MOV     A, #30H      ;写允许操作码0011XXXXB
        SETB    C
        MOV     R6, #09H     
WRIT1:  
    CLR     SK_93C46
    MOV     DI_93C46, C
    SETB    SK_93C46
    RLC     A
    DJNZ    R6, WRIT1
    CLR     CS_93C46
     
    NOP    
    MOV     A,DATA_ADDRESS    ;送入写操作码和地址。
    ORL     A,#40H
    SETB    CS_93C46
    SETB    C
    MOV     R6,#09H
WRIT3: 
    CLR     SK_93C46
    MOV     DI_93C46,C
    SETB    SK_93C46
    RLC     A
    DJNZ    R6,WRIT3
        
    MOV     R6,#08H     ;写入高八位。
    MOV     A,DATA_HIGH 
WRIT4:  
    CLR     SK_93C46
    RLC     A
    MOV     DI_93C46,C
    NOP
    SETB    SK_93C46
    NOP
    DJNZ    R6,WRIT4
    
    MOV     R6,#08H    ;写入低八位。
    MOV     A,DATA_LOW    
WRIT5:  
    CLR     SK_93C46
    RLC     A
    MOV     DI_93C46,C
    NOP
    SETB    SK_93C46
    NOP
    DJNZ    R6,WRIT5
    SETB    DO_93C46
    CLR     CS_93C46
    NOP
    SETB    CS_93C46
    JNB     DO_93C46,$  ;检测就绪状态。
    CLR     CS_93C46
        
    SETB    CS_93C46
    MOV     A,#00H       ;写禁止操作码0000XXXXB
    SETB    C
    MOV     R6,#09H
WRIT6:
    CLR     SK_93C46
    MOV     DI_93C46,C
    RLC     A
    SETB    SK_93C46
    NOP
    DJNZ    R6,WRIT6
    
    CLR     CS_93C46
    CLR     SK_93C46
    CLR     DI_93C46
    CLR     DI_93C46
    SETB    EA
    RET   
93c46-8bit.c(day_new)
 

#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;
}

/*****************************************
********void  write_all_93c46(uchar a)
*****************************************/

void   write_all(unsigned char  ax)
{
uchar i,erase;
cs=0; _delay(de);
sk=0; _delay(de);
cs=1; _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);
erase=0x40; //01x_xxxxb
//if(a>0)erase=0x40;else erase=0x20;
for(i=0;i<7;i++)
{

di=erase&0x80;//if((erase&0x80)>0)di=1;else di=0;
sk=1;_delay(de);
sk=0;_delay(de);
erase<<=1;
}
//dod=1;
for(i=0;i<8;i++)
{
di=ax&0x80;

sk=1;_delay(de);
sk=0;_delay(de);
ax<<=1;

}
//ax<<=1;
//di=ax&0x80;
cs=0;_delay(30);dod=1;;cs=1;
sk=1;_delay(de);
sk=0;_delay(de);
//_delay(de);cs=1;
/*_delay(de); dod=1;
cs=1; sk=1;_delay(de);
while(dod==0) {
sk=0;_delay(de);
sk=1;_delay(de);
}
sk=0;*/ cs=0;
}

/**********************************
**********************************/
void main(void)
{ uchar xdata b=0,r_data1;
//_pac=0x8;
dod=1;
r_data1=0x00;
 led_g=1;led_r=1;
//_pbc=0x00;
r_data1=read_9346(b);
en_dis(1);
//_delay(de);
erase();
en_dis(0);
r_data1=read_9346(b);

en_dis(1);
//_delay(de);
write_all(0xaa);
_delay(200);
en_dis(0);
r_data1=read_9346(b);
// led_g=0;led_r=0;
for(b=0;b<=127;b++)
{
r_data1=read_9346(b);
if(r_data1==0xaa){led_g=0;
led_r=1;}
else {led_g=1;
led_r=0;
while(1);
}
}
en_dis(1);
erase();
en_dis(0);
_delay(300);
en_dis(1);
write_all(0x55);
_delay(200);
en_dis(0);
r_data1=read_9346(b);
 //led_g=0;led_r=0;
for(b=0;b<=127;b++)
{
r_data1=read_9346(b);
if(r_data1==0x55){led_g=0;
led_r=1;}
else {led_g=1;
led_r=0;
while(1);
}
}
en_dis(1);
erase();
en_dis(0);
while(1);// _clrwdt();
} 


 

⌨️ 快捷键说明

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