📄 mainloop.lst
字号:
C51 COMPILER V7.06 MAINLOOP 09/06/2003 16:55:54 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN Mainloop.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Mainloop.c OPTIMIZE(2,SPEED) DEBUG OBJECTEXTEND
stmt level source
1 /**************************************************************************
2 * 基于USB的EEPROM编程器程序(MCU)
3 * 本程序使用了DP-51实验板上的USB接口实现与上位机PC的通讯,由PC机对板上的
4 *EEPROM(CSI24WC02)行读写操作控制。程序中使用了USB51S.LIB的接口程序对USB芯片
5 *PDIUSBD12进行操作,USB51S.LIB的详细使用说明请参考<<D12 USB固件编程>>一文。
6 *
7 * File Name: MAINLOOP.C
8 * Revision: V0.1(2002-11-01)
9 * Use Library: USB51S.LIB
10 * Note: USB51S.LIB (不带DMA控制功能)
11 * www.zlgmcu.com
12 **************************************************************************/
13 #include <reg51.h>
14
15 #include "isr.h" /*包含头文件,使用USB51S.LIB*/
16 #include "vi2c_c51.h"
17
18
19 /**************************************************************************
20 声明全局变量
21 **************************************************************************/
22 extern EPPFLAGS bEPPflags; /*USB事件标志*/
23 extern unsigned char idata GenEpBuf[]; /*信号包缓冲区(命令区)*/
24 extern unsigned char idata EpBuf[]; /*信号包缓冲区(数据区)*/
25
26 extern unsigned int data D12_DATA; /*D12数据的地址变量*/
27 extern unsigned int data D12_COMMAND; /*D12命令的地址变量*/
28
29
30 byte_count rwrom_addr; /*EEPROM操作地址*/
31 byte_count rwlen; /*EEPROM操作字节数*/
32 /*EEPROM类型,01-24WC01,02-24WC02,03-24WC04,04-24WC08,05-24WC16,06-24WC64*/
33 byte_count rwrom_type; /*EEPROM操作类型*/
34 unsigned char eprom_sla; /*EEPROM的从机地址*/
35 unsigned char operate_type; /*EEPROM操作,页类型号1--6*/
36 unsigned char *eprom_sub; /*EEPROM的子地址*/
37
38
39 unsigned char idata ComEpBuf[8]; /*命令字节缓冲区(接收上位机的)*/
40 unsigned char check_dat; /*效验和,本例采用异或效验和*/
41
42
43 unsigned char code i2crom_mask[]=
44 { /*页写掩字*/
45 0x00,
46 0x07, /*24c01*/
47 0x07, /*24c02*/
48 0x0f, /*24c04*/
49 0x0f, /*24c08*/
50 0x0f, /*24c16*/
51 0x1f, /*24C32,24c64,24C128,24C256*/
52 };
53
54
55 unsigned int code rom_size[]=
C51 COMPILER V7.06 MAINLOOP 09/06/2003 16:55:54 PAGE 2
56 { /*空间大小*/
57 0x0000,
58 0x0080, /*24c01*/
59 0x0100, /*24c02*/
60 0x0200, /*24c04*/
61 0x0400, /*24c08*/
62 0x0800, /*24c16*/
63 0x8000, /*24C32,24c64,24C128,24C256*/
64 };
65
66
67 /***************************************************************************
68 *名称:init_timer0()
69 *功能:设置定时器0,用于接收超时判断,
70 * 打开定时器0中断及全局中断允许(EA=1)
71 ***************************************************************************/
72 void init_timer0(void)
73 { TMOD &= 0XF0;
74 1 TMOD |= 0X01;
75 1 TL0 = 0X0;
76 1 TH0 = 0X0;
77 1 ET0 = 1;
78 1 TR0 = 1;
79 1 PT0 = 0;
80 1 EA = 1;
81 1 }
82
83
84 /***************************************************************************
85 *名称:init_special_interrupts()
86 *功能:设置外部中断1的触发方式,并开放中断。USB中断使用。
87 *
88 ***************************************************************************/
89 void init_special_interrupts(void)
90 { IT1 = 0;
91 1 EX1 = 1;
92 1 PX1 = 1;
93 1 }
94
95
96 /***************************************************************************
97 *名称:init_port()
98 *功能:端口初始化,D12SUSPD复位为0
99 *
100 ***************************************************************************/
101 void init_port()
102 { P0 = 0XFF;
103 1 P1 = 0XFF;
104 1 P2 = 0XFF;
105 1 P3 = 0XFF;
106 1 D12SUSPD = 0;
107 1 }
108
109
110 /***************************************************************************
111 *名称:timer_isr()
112 *功能:定时器0中断,设置超时计时
113 *
114 ***************************************************************************/
115 timer_isr() interrupt 1
116 {
117 1 DISABLE;
C51 COMPILER V7.06 MAINLOOP 09/06/2003 16:55:54 PAGE 3
118 1 bEPPflags.bits.timer=1; /*设置超时标志*/
119 1 ENABLE;
120 1 }
121
122
123
124 /***************************************************************************
125 *名称:usb_isr()
126 *功能:外部中断1服务程序,即USB中断处理
127 *
128 ***************************************************************************/
129 usb_isr() interrupt 2
130 { DISABLE; /*关闭中断*/
131 1 fn_usb_isr(); /*调用USB51S.LIB中的中断处理*/
132 1 ENABLE; /*开放中断*/
133 1 }
134
135
136
137
138
139 /***************************************************************************
140 *名称:Write_CSI24WCxx()
141 *功能:进行EEPROM写操作。
142 *使用全局参数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -