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

📄 56165.c

📁 keil c open
💻 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 + -