📄 mainloop.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 + -