?? mainloop.c
字號(hào):
/**************************************************************************
* 基于USB的EEPROM編程器程序(MCU)
* 本程序使用了DP-51實(shí)驗(yàn)板上的USB接口實(shí)現(xiàn)與上位機(jī)PC的通訊,由PC機(jī)對(duì)板上的
*EEPROM(CSI24WC02)行讀寫操作控制。程序中使用了USB51S.LIB的接口程序?qū)SB芯片
*PDIUSBD12進(jìn)行操作,USB51S.LIB的詳細(xì)使用說(shuō)明請(qǐng)參考<<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事件標(biāo)志*/
extern unsigned char idata GenEpBuf[]; /*信號(hào)包緩沖區(qū)(命令區(qū))*/
extern unsigned char idata EpBuf[]; /*信號(hào)包緩沖區(qū)(數(shù)據(jù)區(qū))*/
extern unsigned int data D12_DATA; /*D12數(shù)據(jù)的地址變量*/
extern unsigned int data D12_COMMAND; /*D12命令的地址變量*/
byte_count rwrom_addr; /*EEPROM操作地址*/
byte_count rwlen; /*EEPROM操作字節(jié)數(shù)*/
/*EEPROM類型,01-24WC01,02-24WC02,03-24WC04,04-24WC08,05-24WC16,06-24WC64*/
byte_count rwrom_type; /*EEPROM操作類型*/
unsigned char eprom_sla; /*EEPROM的從機(jī)地址*/
unsigned char operate_type; /*EEPROM操作,頁(yè)類型號(hào)1--6*/
unsigned char *eprom_sub; /*EEPROM的子地址*/
unsigned char idata ComEpBuf[8]; /*命令字節(jié)緩沖區(qū)(接收上位機(jī)的)*/
unsigned char check_dat; /*效驗(yàn)和,本例采用異或效驗(yàn)和*/
unsigned char code i2crom_mask[]=
{ /*頁(yè)寫掩字*/
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()
*功能:設(shè)置定時(shí)器0,用于接收超時(shí)判斷,
* 打開(kāi)定時(shí)器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()
*功能:設(shè)置外部中斷1的觸發(fā)方式,并開(kāi)放中斷。USB中斷使用。
*
***************************************************************************/
void init_special_interrupts(void)
{ IT1 = 0;
EX1 = 1;
PX1 = 1;
}
/***************************************************************************
*名稱:init_port()
*功能:端口初始化,D12SUSPD復(fù)位為0
*
***************************************************************************/
void init_port()
{ P0 = 0XFF;
P1 = 0XFF;
P2 = 0XFF;
P3 = 0XFF;
D12SUSPD = 0;
}
/***************************************************************************
*名稱:timer_isr()
*功能:定時(shí)器0中斷,設(shè)置超時(shí)計(jì)時(shí)
*
***************************************************************************/
timer_isr() interrupt 1
{
DISABLE;
bEPPflags.bits.timer=1; /*設(shè)置超時(shí)標(biāo)志*/
ENABLE;
}
/***************************************************************************
*名稱:usb_isr()
*功能:外部中斷1服務(wù)程序,即USB中斷處理
*
***************************************************************************/
usb_isr() interrupt 2
{ DISABLE; /*關(guān)閉中斷*/
fn_usb_isr(); /*調(diào)用USB51S.LIB中的中斷處理*/
ENABLE; /*開(kāi)放中斷*/
}
/***************************************************************************
*名稱:Write_CSI24WCxx()
*功能:進(jìn)行EEPROM寫操作。
*使用全局參數(shù)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -