📄 serires sub.c
字号:
#include <reg54.h>
#include <delay subroutine.h>
#include <byteone.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit BDR=P1^5;
sbit BDT=P3^5;
sbit RES=P1^7;
uchar xdata Eeprom[4096];
extern uchar Instruction[5];
/*
void Timer_ini()
{
TH1=0xff;
TL1=0x01;
TMOD=0x20;
SCON=0x50;
PCON=0x80;
}
void timer1_isr(void) interrupt 3 using 0
{
TH1=0x75;
TL1=0x5f;
}
void Timer_Delay(uchar TL1_value,TH1_value)
{
TR1=0;
TH1=TH1_value;
TL1=TL1_value;
TMOD=0x10;
TR1=1; //启动定时器1
while(TF1!=1);
// TF1=0;
TR1=0;
}*/
uint Baud_Config()
{
int ii;
uchar bytehh,bytell;
uint Baud_byte_r;
uint Baud_vh;
Baud_vh=1;
// Baud_vl=1;
BDT=0;
RES=0;
delay100ms();
RES=1;
delay100ms();
BDT=1;
delay100ms();
Trbyte(0x90,Baud_vh,Baud_vh);
delay10ms();
for(ii=0;ii<1000;ii++)
{
delay10ms();
Baud_byte_r=Baud_vh+1;
Trbyte(0xe0,Baud_vh,Baud_vh);Trbyte(0x00,Baud_vh,Baud_vh);Trbyte(0x0b,Baud_vh,Baud_vh);//e0 00 0b
delay10us();delay10us();
bytehh=RecByte(Baud_byte_r);
bytell=RecByte(Baud_byte_r);
// output(bytell);
// delay1ms();
if(bytell!=0x00)
{
Baud_vh+=1;
// Baud_vl+=1;
continue;
}
break;
}
Trbyte(0xe4,Baud_vh,Baud_vh);Trbyte(0xff,Baud_vh,Baud_vh);Trbyte(0x01,Baud_vh,Baud_vh);//e4 ff 01
delay10us();delay10us();
bytehh=RecByte(Baud_byte_r);
bytell=RecByte(Baud_byte_r);
// output(bytell); //
if((bytell & 0xc0) == 0xc0)
{
output(0x55);
output(0xbb);
}
else
{
output(0xaa);
output(0x00);
P4 &= ~(1 << 3); //报错点亮红灯+
P4 &= ~(1 << 1);
delay200ms();delay200ms();
P4 |= (1 << 1); //蜂鸣器
delay200ms();delay200ms();
P4 &= ~(1 << 1);
delay200ms();delay200ms();
P4 |= (1 << 1); //蜂鸣器
delay200ms();delay200ms();
P4 &= ~(1 << 1);
delay200ms();delay200ms();
P4 |= (1 << 1); //蜂鸣器
#pragma asm
ljmp 8000h
#pragma endasm
}
return(Baud_vh);
}
void Tr_write_sequence(uchar byte1,byte2,byte3,byte4,byte5,uint byte_config_sub)
{
Trbyte(byte1,byte_config_sub,byte_config_sub);
Trbyte(byte2,byte_config_sub,byte_config_sub);
Trbyte(byte3,byte_config_sub,byte_config_sub);
Trbyte(byte4,byte_config_sub,byte_config_sub);
Trbyte(byte5,byte_config_sub,byte_config_sub);
}
void Config_Eeprom(uint byte_config)
{
delay104us();
Tr_write_sequence(0xc0,0x00,0x12,0x41,0x41,byte_config);
delay1ms();delay1ms();
Tr_write_sequence(0xc0,0x00,0x10,0x00,0x00,byte_config);
delay1ms();delay1ms();
Tr_write_sequence(0xc0,0x01,0x10,0x05,0x05,byte_config); //4a
delay1ms();delay1ms();
Tr_write_sequence(0xc0,0x01,0x12,0x00,0x00,byte_config);
delay1ms();delay1ms();
Tr_write_sequence(0xc0,0x01,0x14,0xff,0xff,byte_config);
delay1ms();delay1ms();
// Tr_write_sequence(0xc0,0x01,0x15,0x32,0x32,byte_config);
delay1ms();delay1ms();
}
void Read_datas()
{
uchar addrll,addrhh;
int r_cycle;
uint Crystal,Crystal_r;
uint Data_Size_Read;
uchar byte_h,byte_l;
Crystal=Baud_Config();
Crystal_r=Crystal+1;
addrhh=Instruction[1];
addrll=Instruction[2];
Data_Size_Read=(Instruction[3])*256+Instruction[4];
//Trbyte(0x90,Crystal,Crystal);
delay10ms();
Config_Eeprom(Crystal);
delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
for(r_cycle=0;r_cycle<Data_Size_Read;r_cycle+=2)
{
Trbyte(0xe8,Crystal,Crystal);Trbyte(addrhh,Crystal,Crystal);Trbyte(addrll,Crystal,Crystal);
delay10us();delay10us();
byte_h=RecByte(Crystal_r);
byte_l=RecByte(Crystal_r);
output(byte_h);
output(byte_l);
delay104us();delay104us();
addrll+=2;
if(addrll!=0)
continue;
addrhh+=1;
}
}
/*********************************************************
*function name :void In_datas();
*function describe:receive datas from the pc
*********************************************************/
void In_datas()
{
int j_in;
uint In_size;
In_size=(Instruction[3])*256+Instruction[4];
for(j_in=0;j_in<In_size;j_in++)
{
Eeprom[j_in]=(input());
}
}
void Write_datas()
{
uchar addrll,addrhh;
int w_cycle;
uint Crystal,Crystal_r;
uint Data_Size_Write;
// uchar byte_h,byte_l;
uchar back_byte_h,back_byte_l;
Crystal=Baud_Config();
In_datas();
output(0xee);
Crystal_r=Crystal+1;
addrhh=Instruction[1];
addrll=Instruction[2];
Data_Size_Write=(Instruction[3])*256+Instruction[4];
//Trbyte(0x90,Crystal,Crystal);
delay10ms();
Config_Eeprom(Crystal);
delay100ms();
for(w_cycle=0;w_cycle<Data_Size_Write;w_cycle+=4)
{
Trbyte(0xC8,Crystal,Crystal);Trbyte(addrhh,Crystal,Crystal);Trbyte(addrll,Crystal,Crystal);
Trbyte(0xff,Crystal,Crystal);Trbyte(0xff,Crystal,Crystal);
delay104us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x16,Crystal,Crystal);Trbyte(0x40,Crystal,Crystal);Trbyte(0x40,Crystal,Crystal);//C0 01 16 40 40 Erase two words(fore bytes)
delay104us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);//C0 01 15 80 80 Programme a word(two bytes)
delay104us();
do
{
delay104us();
Trbyte(0xE0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);back_byte_h=RecByte(Crystal_r);back_byte_l=RecByte(Crystal_r);
}
while((back_byte_l & 0x80)!=0x80); //Erase 4 bytes
delay10ms();
// delay52us();
// start to write byte1
Trbyte(0xC8,Crystal,Crystal);Trbyte(addrhh,Crystal,Crystal);Trbyte(addrll,Crystal,Crystal);
Trbyte(Eeprom[w_cycle],Crystal,Crystal);Trbyte(Eeprom[w_cycle+1],Crystal,Crystal);
delay104us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x16,Crystal,Crystal);Trbyte(0x20,Crystal,Crystal);Trbyte(0x20,Crystal,Crystal);//C0 01 16 20 20 Programme a word(two bytes)
delay104us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);//C0 01 15 80 80 Programme a word(two bytes)
delay104us();
do
{
delay104us();
Trbyte(0xE0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);back_byte_h=RecByte(Crystal_r);back_byte_l=RecByte(Crystal_r);
}
while((back_byte_l & 0x80)!=0x80);
delay10ms();
addrll+=2;
if(addrll==0)
{addrhh+=1;}
delay52us();
// start to write byte2
Trbyte(0xC8,Crystal,Crystal);Trbyte(addrhh,Crystal,Crystal);Trbyte(addrll,Crystal,Crystal);
Trbyte(Eeprom[w_cycle+2],Crystal,Crystal);Trbyte(Eeprom[w_cycle+3],Crystal,Crystal);
delay104us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x16,Crystal,Crystal);Trbyte(0x20,Crystal,Crystal);Trbyte(0x20,Crystal,Crystal);//C0 01 16 20 20 Programme a word(two bytes)
delay104us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);//C0 01 15 80 80 Programme a word(two bytes)
delay104us();
do
{
delay104us();
Trbyte(0xE0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);back_byte_h=RecByte(Crystal_r);back_byte_l=RecByte(Crystal_r);
}
while((back_byte_l & 0x80)!=0x80);
delay104us();
addrll+=2;
if(addrll==0)
{addrhh+=1;}
delay10ms();
}
// delay200ms();
output(0x55);
output(0xff);
}
/*
void Erase_datas()
{
uchar addrll,addrhh;
int w_cycle;
uint Crystal,Crystal_r;
uint Data_Size_Write;
// uchar byte_h,byte_l;
uchar back_byte_h,back_byte_l;
Crystal=Baud_Config();
Crystal_r=Crystal+1;
addrhh=Instruction[1];
addrll=Instruction[2];
Data_Size_Write=(Instruction[3])*256+Instruction[4];
delay10ms();
Config_Eeprom(Crystal);
delay10ms();
for(w_cycle=0;w_cycle<Data_Size_Write;w_cycle+=4)
{
Trbyte(0xC8,Crystal,Crystal);Trbyte(addrhh,Crystal,Crystal);Trbyte(addrll,Crystal,Crystal);
Trbyte(0xff,Crystal,Crystal);Trbyte(0xff,Crystal,Crystal);
delay52us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x16,Crystal,Crystal);Trbyte(0x40,Crystal,Crystal);Trbyte(0x40,Crystal,Crystal);//C0 01 16 40 40 Erase two words(fore bytes)
delay52us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);//C0 01 15 80 80 Programme a word(two bytes)
delay52us();
do
{
delay104us();
Trbyte(0xE0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);back_byte_h=RecByte(Crystal_r);back_byte_l=RecByte(Crystal_r);
}
while((back_byte_l & 0x80)!=0x80); //Erase 4 bytes
delay10ms();
addrll+=4;
if(addrll==0)
{addrhh+=1;}
}
output(0x55);
output(0xff);
}*/
void Erase_datas()
{
uchar addrll,addrhh;
// int w_cycle;
uint Crystal,Crystal_r;
uint Data_Size_Write;
// uchar byte_h,byte_l;
uchar back_byte_h,back_byte_l;
Crystal=Baud_Config();
Crystal_r=Crystal+1;
addrhh=Instruction[1];
addrll=Instruction[2];
Data_Size_Write=(Instruction[3])*256+Instruction[4];
delay10ms();
Config_Eeprom(Crystal);
delay10ms();
Trbyte(0xC8,Crystal,Crystal);Trbyte(addrhh,Crystal,Crystal);Trbyte(addrll,Crystal,Crystal);
Trbyte(0xff,Crystal,Crystal);Trbyte(0xff,Crystal,Crystal);
delay52us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x16,Crystal,Crystal);Trbyte(0x41,Crystal,Crystal);Trbyte(0x41,Crystal,Crystal);//C0 01 16 40 40 Erase two words(fore bytes)
delay52us();
Trbyte(0xC0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);Trbyte(0x80,Crystal,Crystal);//C0 01 15 80 80 Programme a word(two bytes)
delay52us();
do
{
delay104us();
Trbyte(0xE0,Crystal,Crystal);Trbyte(0x01,Crystal,Crystal);Trbyte(0x15,Crystal,Crystal);back_byte_h=RecByte(Crystal_r);back_byte_l=RecByte(Crystal_r);
}
while((back_byte_l & 0x80)!=0x80); //Erase 4 bytes
output(0x55);
output(0xff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -