📄 rom.h
字号:
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define _Nop() _nop_()
sbit sdar= P2^0; /*串行数据*/
sbit sclr= P2^1; /*串行时钟*/
sbit jk=P0^0;
bit ACK_flagr;
/************************函数列表**********************/
void delay(unsigned int ms);
void start(void);
void stop(void);
void ackr(void);
void noackr(void);
void sendbyte(unsigned char senddata);
unsigned char recbyte(void);
/*发送起始条件*/
void start(void) /*起始条件*/
{
sdar = 1;
_Nop();
sclr = 1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
sdar = 0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
sclr = 0;
_Nop();
}
void stop(void) /*停止条件*/
{
sdar=0;
_Nop();
sclr=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
sdar=1;
_Nop();
}
void ackr(void) /*应答位*/
{
sdar=0;
_Nop();
_Nop();
_Nop();
_Nop();
sclr=1;
_Nop();
_Nop();
_Nop();
_Nop();
sclr=0;
}
void noackr(void) /*反向应答位*/
{
sdar=1;
_Nop();
_Nop();
_Nop();
_Nop();
sclr=1;
_Nop();
_Nop();
_Nop();
_Nop();
sclr=0;
}
/***************发送字节数据子程序*****************/
void sendbyte(unsigned char senddata)
{
unsigned char i;
for(i=0;i<8;i++)
{
sdar=(bit)(senddata&0x80); /*取最高位*/
senddata=senddata<<1;
_Nop();
sclr=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
sclr=0;
}
ackr();
_Nop();
_Nop();
_Nop();
_Nop();
if(sdar==1)
{
ACK_flagr=0; //数据发送错误
}
else
{
ACK_flagr=1; //数据发送正确
}
}
unsigned char recbyte(void)
{
unsigned char i;
unsigned char recdata=0; //接受到的数据
sdar=1;
for(i=0;i<8;i++)
{
_Nop();
sclr=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
sclr=1;
_Nop();
_Nop();
recdata=recdata<<1;
if(sdar==1)
{
recdata++;
_Nop();
_Nop();
}
sclr=0;
_Nop();
_Nop();
}
return(recdata);
}
bit WrToFRam(unsigned char slv_addr,unsigned int sub_addr,unsigned char *s,unsigned char no)
{
unsigned char i;
unsigned char addrh; //存放存储单元地址高8位
unsigned char addrl;
addrh = (char)(sub_addr/256); //取高八位
addrl = (char)(sub_addr & 0x00ff); //取低八位
start(); /*发送启动信号*/
sendbyte(slv_addr); /*发送SLA+W*/
if(ACK_flagr==0)return(0);
sendbyte(addrh); /*发送高位地址*/
if(ACK_flagr==0)return(0);
sendbyte(addrl); /*发送低位地址*/
if(ACK_flagr==0)return(0);
for(i=0;i<no;i++)
{
sendbyte(*s);
if(ACK_flagr==0)
return(0);
s++;
}
stop();
return(1);
}
bit RdFromFRam(unsigned char slv_addr,unsigned int sub_addr,unsigned char *s,unsigned char no)
{
unsigned char addrh,addrl;//,tempdata; //存放存储单元地址高8位
unsigned char i;
addrh = (char)(sub_addr/256); //取高八位
addrl = (char)(sub_addr& 0x00ff);
start();
sendbyte(slv_addr-1);
if(ACK_flagr==0)return(0);
sendbyte(addrh);
if(ACK_flagr==0)return(0);
sendbyte(addrl);
if(ACK_flagr==0)return(0);
stop();
_Nop();
_Nop();
start();
sendbyte(slv_addr);
if(ACK_flagr==0)return(0);
for(i=0;i<no-1;i++)
{
*s=recbyte();
ackr();
s++;
}
*s=recbyte();
noackr();
sclr=0;
stop();
// return(tempdata);
return(1);
}
// 延时总时间=cnt*16+24us
void delay(unsigned int cnt)
{
for(cnt;cnt>0;cnt--);
}
//arg1[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
/*
void main()
{
unsigned char arg1[3]={0xbb,0x0a,0x73};
unsigned char arg2[8]={0x5b,0xca,0xd9,0xf9,0x0b,0xfb,0xdb,0xeb};
WrToFRam(0xa0,0x00dd,arg1,3);
delay(31250);
delay(31250);
WrToFRam(0xa0,0x0100,arg2,8);
delay(31250);//延时500ms,24us忽略
delay(31250);
arg1[0]=0x00;arg1[1]=0x00;arg1[2]=0x00;
arg2[0]=0x00;arg2[1]=0x00;arg2[2]=0x00;arg2[3]=0x00;arg2[4]=0x00;arg2[5]=0x00;arg2[6]=0x00;arg2[8]=0x00;arg2[7]=0x00;
delay(31250);
RdFromFRam(0xa1,0x00fd,arg1,3);
delay(31250);
RdFromFRam(0xa1,0x0100,arg2,8);
delay(31250);
while(1)
{
P1=arg1[0];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg1[1];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg1[2];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[0];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[1];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[2];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[3];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[4];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[5];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[6];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
P1=arg2[7];
delay(31250);
delay(31250);
delay(31250);//延时500ms,24us忽略
};
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -