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

📄 mainloop.c

📁 USB code using I2C bus to communicate with other node
💻 C
字号:
/**************************************************************************
*					基于USB的EEPROM编程器程序(MCU)
*    本程序使用了DP-51实验板上的USB接口实现与上位机PC的通讯,由PC机对板上的
*EEPROM(CSI24WC02)行读写操作控制。程序中使用了USB51S.LIB的接口程序对USB芯片
*PDIUSBD12进行操作,USB51S.LIB的详细使用说明请参考<<D12 USB固件编程>>一文。
*
* File Name:	MAINLOOP.C
* Revision:		V0.1(2002-11-01)
* Use Library:	USB51S.LIB
* Note:		USB51S.LIB (不带DMA控制功能)
*      		www.zlgmcu.com
**************************************************************************/
#include <reg51.h>                

#include "isr.h"						/*包含头文件,使用USB51S.LIB*/
#include "vi2c_c51.h"


/**************************************************************************
  声明全局变量
**************************************************************************/
extern EPPFLAGS bEPPflags;				/*USB事件标志*/
extern unsigned char idata GenEpBuf[];	/*信号包缓冲区(命令区)*/
extern unsigned char idata EpBuf[];		/*信号包缓冲区(数据区)*/

extern unsigned int data D12_DATA;		/*D12数据的地址变量*/
extern unsigned int data D12_COMMAND;	/*D12命令的地址变量*/


byte_count    rwrom_addr;				/*EEPROM操作地址*/
byte_count    rwlen;					/*EEPROM操作字节数*/
/*EEPROM类型,01-24WC01,02-24WC02,03-24WC04,04-24WC08,05-24WC16,06-24WC64*/
byte_count	  rwrom_type;				/*EEPROM操作类型*/
unsigned char  eprom_sla;				/*EEPROM的从机地址*/
unsigned char  operate_type;			/*EEPROM操作,页类型号1--6*/
unsigned char  *eprom_sub;				/*EEPROM的子地址*/

				
unsigned char  idata ComEpBuf[8];		/*命令字节缓冲区(接收上位机的)*/
unsigned char  check_dat;				/*效验和,本例采用异或效验和*/


unsigned char code i2crom_mask[]=
{ /*页写掩字*/
  0x00,					
  0x07,					/*24c01*/
  0x07,					/*24c02*/
  0x0f,					/*24c04*/
  0x0f,					/*24c08*/
  0x0f,					/*24c16*/
  0x1f,					/*24C32,24c64,24C128,24C256*/
};


unsigned int code rom_size[]=
{ /*空间大小*/
  0x0000,					
  0x0080,				/*24c01*/
  0x0100,				/*24c02*/
  0x0200,				/*24c04*/
  0x0400,				/*24c08*/
  0x0800,				/*24c16*/
  0x8000,				/*24C32,24c64,24C128,24C256*/
};


/***************************************************************************
*名称:init_timer0()
*功能:设置定时器0,用于接收超时判断,
*      打开定时器0中断及全局中断允许(EA=1)
***************************************************************************/
void init_timer0(void)
{ TMOD &= 0XF0;
  TMOD |= 0X01;
  TL0 = 0X0;
  TH0 = 0X0;
  ET0 = 1;
  TR0 = 1;
  PT0 = 0;
  EA = 1;
}


/***************************************************************************
*名称:init_special_interrupts()
*功能:设置外部中断1的触发方式,并开放中断。USB中断使用。
*
***************************************************************************/
void init_special_interrupts(void)
{ IT1 = 0;
  EX1 = 1;
  PX1 = 1;
}


/***************************************************************************
*名称:init_port()
*功能:端口初始化,D12SUSPD复位为0
*
***************************************************************************/
void init_port()
{ P0 = 0XFF;
  P1 = 0XFF;
  P2 = 0XFF;
  P3 = 0XFF;
  D12SUSPD = 0;
}


/***************************************************************************
*名称:timer_isr()
*功能:定时器0中断,设置超时计时
*
***************************************************************************/
timer_isr() interrupt 1
{
	DISABLE;
	bEPPflags.bits.timer=1;		/*设置超时标志*/
	ENABLE;
}



/***************************************************************************
*名称:usb_isr()
*功能:外部中断1服务程序,即USB中断处理
*
***************************************************************************/
usb_isr() interrupt 2
{ DISABLE;				/*关闭中断*/
  fn_usb_isr();			/*调用USB51S.LIB中的中断处理*/
  ENABLE;				/*开放中断*/
}





/***************************************************************************
*名称:Write_CSI24WCxx()
*功能:进行EEPROM写操作。
*使用全局参数

⌨️ 快捷键说明

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