📄 ep5x.lst
字号:
C51 COMPILER V7.01 EP5X 03/09/2008 14:31:20 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE EP5X
OBJECT MODULE PLACED IN EP5X.OBJ
COMPILER INVOKED BY: D:\c51\C51\BIN\C51.EXE EP5X.c BROWSE DEBUG OBJECTEXTEND TABS(10)
stmt level source
1 //////////////////////////////////////////////////////////////////////////////////////////////////
2 //E51Pro.c
3 //Easy 51Pro编程器主程序,负责通讯,管理编程操作
4 ///////////////////////////////////////////////////////////////////////////////////////////////////
5
6 #include <E51Pro.h>
7
8 BYTE ComBuf[18];//串口通讯数据缓存,发送和接收都使用
9 UINT nAddress;//ROM中地址计数
10 UINT nTimeOut;//超时计数
11 ProWork pw;//编程器一般操作
12
13 void Delay_us(BYTE nUs)//微秒级延时<255us
14 {
15 1 TH0=0;
16 1 TL0=0;
17 1 TR0=1;
18 1 while(TL0<nUs)//利用T0做定时计数器,循环采样,直到达到定时值
19 1 {
20 2 }
21 1 TR0=0;
22 1 }
23
24 void Delay_ms(UINT nMs)//豪秒级的延时<65535ms
25 {
26 1 UINT n=0;
27 1 TR0=1;
28 1 while(n<nMs)////利用T0做定时计数器,循环采样,直到达到定时值
29 1 {
30 2 TH0=0;
31 2 TL0=20;
32 2 while(TH0<4)
33 2 {
34 3 }
35 2 n++;
36 2 }
37 1 TR0=0;
38 1 }
39
40 BOOL WaitComm()//等待上位机的命令,18字节
41 {
42 1 BYTE n=0;
43 1 RI=0;
44 1 while(!RI){}//等待第一个字节
45 1 ComBuf[n]=SBUF;
46 1 RI=0;
47 1 n++;
48 1 for(n;n<=17;n++)
49 1 {
50 2 nTimeOut=0;
51 2 while(!RI)
52 2 {
53 3 nTimeOut++;
54 3 if(nTimeOut>10000)//后17个字节都有超时限制
55 3 return 0;
C51 COMPILER V7.01 EP5X 03/09/2008 14:31:20 PAGE 2
56 3 }
57 2 ComBuf[n]=SBUF;
58 2 RI=0;
59 2 }
60 1 return 1;
61 1 }
62
63 BOOL WaitResp()//等待上位机回应,1字节,有超时限制
64 {
65 1 nTimeOut=0;
66 1 RI=0;
67 1 while(!RI)
68 1 {
69 2 nTimeOut++;
70 2 if(nTimeOut>50000)
71 2 {
72 3 return 0;
73 3 }
74 2 }
75 1 RI=0;
76 1 ComBuf[0]=SBUF;
77 1 return 1;
78 1 }
79
80 BOOL WaitData()//写器件时等待上位机数据,18字节,有超时限制
81 {
82 1 BYTE n;
83 1 RI=0;
84 1 for(n=0;n<=17;n++)
85 1 {
86 2 nTimeOut=0;
87 2 while(!RI)
88 2 {
89 3 nTimeOut++;
90 3 if(nTimeOut>10000)
91 3 {
92 4 return 0;
93 4 }
94 3 }
95 2 RI=0;
96 2 ComBuf[n]=SBUF;
97 2 }
98 1 return 1;
99 1 }
100
101 void SendData()//发送数据或回应操作完成,18字节
102 {
103 1 BYTE n=0;
104 1 for(n;n<=17;n++)
105 1 {
106 2 TI=0;
107 2 SBUF=ComBuf[n];
108 2 while(!TI){}
109 2 TI=0;
110 2 }
111 1 }
112
113 void SendResp()//回应上位机1个字节,在写器件函数中使用
114 {
115 1 TI=0;
116 1 SBUF=ComBuf[0];
117 1 while(!TI){}
C51 COMPILER V7.01 EP5X 03/09/2008 14:31:20 PAGE 3
118 1 TI=0;
119 1 }
120
121 void SetVpp5V()//设置Vpp为5v
122 {
123 1 P3_4=0;
124 1 P3_3=0;
125 1 }
126
127 void SetVpp0V()//设置Vpp为0v
128 {
129 1 P3_3=0;
130 1 P3_4=1;
131 1 }
132
133 void SetVpp12V()//设置Vpp为12v
134 {
135 1 P3_4=0;
136 1 P3_3=1;
137 1 }
138
139 void RstPro()//编程器复位
140 {
141 1 pw.fpProOver();//直接编程结束
142 1 SendData();//通知上位机,表示编程器就绪,可以直接用此函数因为协议号(ComBuf[0])还没被修改,下同
143 1 }
144
145 void ReadSign()//读特征字
146 {
147 1 pw.fpReadSign();
148 1 SendData();//通知上位机,送出读出器件特征字
149 1 }
150
151 void Erase()//擦除器件
152 {
153 1 pw.fpErase();
154 1 SendData();//通知上位机,擦除了器件
155 1 }
156
157 void Write()//写器件
158 {
159 1 BYTE n;
160 1 pw.fpInitPro();//编程前的准备工作
161 1 SendData();//回应上位机表示进入写器件状态,可以发来数据
162 1 while(1)
163 1 {
164 2 if(WaitData())//如果等待数据成功
165 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -