📄 56165.c
字号:
/*
*********************************************************************************************************
* 56165.c
* 实时内核
*
* (c) Copyright 2003-9-10: pearmani
* 版权所有
*
* MCU-51 专用代码
* KEIL C51大模式编译
*
* 文件名56165.C
* 作者 :caochengfu
* 改编 :
*********************************************************************************************************
*/
#include "extern.h"
void wren_cmd(void)
{
uchar data aa;
SCK=0;/* Bring SCK low */
CS=0;/* Bring /CS low */
aa=WREN_INST;
outbyt(aa);/* Send WREN instruction */
SCK=0;/* Bring SCK low */
CS=1;/* Bring /CS high */
}
/*写使能复位子程序*/
void wrdi_cmd(void)
{
uchar data aa;
SCK=0;/* Bring SCK low */
CS=0;/* Bring /CS low */
aa=WRDI_INST;
outbyt(aa);/* Send WRDI instruction */
SCK=0;/* Bring SCK low */
CS=1;/* Bring /CS high */
}
void wrsr_cmd(void)
{
uchar data aa;
SCK=0;/* Bring SCK low */
CS=0;/* Bring /CS low */
aa=WRSR_INST;
outbyt(aa) ;/* Send WRSR instruction */
aa=STATUS_REG;
outbyt(aa);/* Send status register */
SCK=0;/* Bring SCK low */
CS=1;/* Bring /CS high */
wip_poll();/* Poll for completion of write cycle */
}
/*读状态寄存器,读出的数据放入到aa中*/
uchar rdsr_cmd (void)
{
uchar data aa;
SCK=0;
CS=0;
aa=RDSR_INST;
outbyt(aa);
aa=inputbyt();
SCK=0;
CS=1;
return aa;
}
/*字节写入,aa为写入的数据,dd为写入的地址,对于25045而言为000-1FF*/
void byte_write(uchar aa,uint dd)
{
SCK=0;
CS=0;
outbyt((uchar)(WRITE_INST));
outbyt((uchar)(dd/256));
outbyt((uchar)(dd%256));
outbyt(aa);
SCK=0;
CS=1;
wip_poll();
}
/*字节读出,其中dd为读出的地址,返回的值为读出的数据*/
uchar byte_read(uint dd)
{
uchar cc;
SCK=0;
CS=0;
outbyt((uchar)(READ_INST));
outbyt((uchar)(dd/256));
outbyt((uchar)(dd%256));
cc=inputbyt(); /*得到读出的数据*/
SCK=0;
CS=1;
return cc;
}
/*复位DOG*/
void rst_wdog (void)
{
CS=0;
_nop_();
_nop_();
_nop_();
CS=1;
}
/*检测写入的过程是否结束*/
void wip_poll(void)
{
uchar aa;
uchar idata my_flag;
for (aa=1;aa<MAX_POLL;aa++)
{
my_flag=rdsr_cmd();
if ((my_flag&&0x01)==0) {aa=MAX_POLL;}/*判断是否WIP=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等待直到达到最大记数值*/
}
}
/*输出一个数据到25045,此数据可能为地址,先导字,写入的数据等*/
void outbyt(aa)
uchar aa;
{
uchar my_flag1,i;
SI_50163=0;
my_flag1=aa;
for (i=0;i<8;i++)
{
my_flag1=aa;
SCK=0;
_nop_();_nop_();_nop_();
SI_50163=((my_flag1)&(0x80>>i));
SCK=1;
}
SI_50163=0; /*使SI处于确定的状态*/
}
/*得到一个数据,此数据可能为状态寄存器数据,读出的单元数据等*/
uchar inputbyt(void)
{
uchar aa=0,my_flag=0;
char i=0;
for (i=7;i>=0;i--)
{
SCK=0;
_nop_();_nop_();_nop_();
my_flag=(uchar)(SO);
SCK=1;
aa=(aa|(my_flag<<i));
my_flag=0x00;
}
rst_wdog();
return aa;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -