📄 driver.lst
字号:
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE DRIVER
OBJECT MODULE PLACED IN Driver.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Driver.C LARGE OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 /*
2 * Copyright (c) 2004,成都港顺科技发展有限公司
3 * All rights reserved.
4 *
5 * 编 译 器:Keil:C Compiler:7.20;Assembler:7.10
6 * 工程名称:POS-Test.UV2
7 * 文件名称:Common.C
8 /******************************************************************
9 * 摘 要:硬件驱动函数 硬件设备相关变量宏定义
10 *************************************************************************8
11 * 单 片 机:uPSD3254
12 * 当前版本:0.4
13 * 作 者:李凯、雍继兵
14 * 完成日期:2004-12-7 14:45
15 *
16 * LCD显示字库采用16×16 GBK字库,纵向取模
17 * VFD为10位9段显示
18 * 键盘8×8矩阵+键盘锁8档=8×9矩阵
19 */
20 /****************************************************************************
21 45行--- 130行 硬件设备相关变量宏 定义
22
23 135-----204 中断interrupt driver 驱动程序
24
25 211-----408 串口uart driver
26
27 416-----915 I2C总线 和 24C64 Driver
28
29
30 922--键盘----998-lock---1015-beep--1027- box--1035 key driver
31
32 1042----1576 lcd driver
33
34 1588---1865 SPI 总线 和 Flash driver
35
36 ////1872---1989 vfd driver
37
38 ///1999---2370 MU110 printer driver
39
40 *******************************************************************************/
41 #include "Main.h"
42
43
44 ///////////////////////////////////////////////////////////////////////////////
45 // KEY Control
46 #define KeyEnable P47 = 0
47 #define KeyDisable P47 = 1
48 #define KeyAdr 0xe00c
49
50
51
52
53 ///////////////////////////////////////////////////////////////////////////////
54
55 #define NandFalshE 0x800D
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 2
56
57 #define PrintAdr 0x800E
58
59 ///////////////////////////////////////////////////////////////////////////////
60 // Serial Flash Control
61
62 #define FlashDisable P4|=0X0F,P47=1
63 #define FlashEnable P47=0
64
65 #define Mcs1_Enable P4=(P4&0xF0)|0X03
66 #define Mcs2_Enable P4=(P4&0xF0)|0X04
67 #define Mcs3_Enable P4=(P4&0xF0)|0X0a
68 #define Mcs4_Enable P4=(P4&0xF0)|0X06
69
70 // M25P80 and M45PE80 and M25P16 Instruction
71 //
72
73 #define FlashWE 0x06 //Write Enable
74 #define FlashWD 0x04 //Write Disable
75 #define FlashRSR 0x05 //Read Status Register
76 #define FlashWSR 0x01 //Write Status Register
77 #define FlashRD 0x03 //FlashRD Data Bytes
78 #define FlashFRD 0x0B //FlashRD Data Bytes at Higher Speed
79 #define FlashPW 0x0A //Page Write
80 #define FlashPP 0x02 //Page Program
81 #define FlashPE 0xDB //Page Erase
82 #define FlashSE 0xD8 //Sector Erase
83 #define FlashBE 0xC7 //Bulk Erase
84 #define FlashDP 0xB9 //Deep Power-down
85 #define FlashRDP 0xAB //Release form Deep Power-down
86
87
88
89
90
91 ///////////////////////////////////////////////////////////////////////////////
92
93 //#define VFD_Enable P47=0,P4=(P4&0xF0)|0x02
94 //#define VFD_Forbid P4|=0X0F,P47=1
95 #define VFD_Enable P4=0x07
96 #define VFD_Forbid P4=0
97
98
99 ////////////////////////////////////////////////////////////////////////////
100
101 #define OpenCashbox P47=0,P4=(P4&0xF0)|0x01
102 #define CloseCashbox P4|=0X0F,P47=1
103
104
105 ////////////////////////////////////////////////////////////////////////////
106 #define BeepOn P47=0,P4&=0xF0
107 #define BeepOff P4|=0X0F,P47=1
108
109 ////////////////////////////////////////////////////////////////////////////
110 sbit VFDCLK=P4^4; //P4.1
111 sbit VFDSDA=P4^6; //p4.0 spi总线驱动
112
113 ////////////////////////////////////////////////////////////////////////////
114
115 sbit I2CSDA=P3^6;
116 sbit I2CSCK=P3^7;
117
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 3
118 ////////////////////////////////////////////////////////////////////////////
119
120 volatile uchar xdata SerialFlash[5] _at_ 0x6DFB;
121 volatile uchar xdata TxdBuf [256] _at_ 0x6F00; //Data Buffer for UART1、2 Transmitter
122 volatile uchar xdata RxdBuf [256] _at_ 0x6E00; //Data Buffer for UART1、2 Receiver
123 uint xdata TxdLen; //no. of data to FlashBE transimitted
124 uint xdata TxdNum; //no. of data transmitted
125 uint xdata RxdLen; //no. of data to FlashBE received
126 uint xdata RxdNum; //no. of data received
127 uchar xdata PwrFlg;
128 uchar xdata TxdFlg;
129 uchar xdata RxdFlg;
130 /****************************************************************************************************/
131
132
133
134 //---------------------------INT Begin--------------------------------------------------------------
135
136 void PowerInt(void) interrupt IE0_VECTOR //power interrupt
137 {
138 1 PwrFlg=1;
139 1 // LcdDisplay(0,16,"进入掉电中断!",3);
140 1 }
141
142
143 void SimInt (void) interrupt IE1_VECTOR //sim interrupt
144 {
145 1
146 1 }
147
148 /*-----------------------------------------------------------*/
149 // UART 0 Interrupt service routine
150 /* ----------------------------------------------------- */
151 void Uart0Int (void) interrupt SIO_VECTOR
152 {
153 1 if (RI)
154 1 {
155 2 if (RxdLen > RxdNum)
156 2 {
157 3 RxdBuf [RxdNum] = SBUF;
158 3 RxdNum++;
159 3 }
160 2 RI = 0;
161 2 if (RxdLen <= RxdNum)RxdFlg=1;
162 2 }
163 1 else
164 1 {
165 2 if (TxdLen > TxdNum)
166 2 {
167 3 SBUF = TxdBuf [TxdNum];
168 3 TxdNum++;
169 3 }
170 2 TI = 0;
171 2 if (TxdLen <= TxdNum)TxdFlg=1;
172 2 }
173 1 }
174
175 /*--------------------------------------------------------*/
176 // UART 1 Interrupt service routine
177 /* ------------------------------------------------------ */
178
179 void Uart1Int (void) interrupt SIO1_VECTOR
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 4
180 {
181 1 if ( SCON2 & 0x01)
182 1 {
183 2 SCON2 &= 0xFE; //RI = 0;
184 2 if (RxdNum<RxdLen)
185 2 {
186 3 RxdBuf [RxdNum] = SBUF2;
187 3 RxdNum+=1;
188 3 }
189 2 if (RxdLen <= RxdNum)RxdFlg=1;
190 2 }
191 1 else
192 1 {
193 2 SCON2 &= 0xFD;
194 2 if (TxdNum<TxdLen)
195 2 {
196 3 SBUF2 = TxdBuf [TxdNum];
197 3 TxdNum+=1; //TI = 0;
198 3 }
199 2 if (TxdLen <= TxdNum)TxdFlg=1;
200 2 }
201 1 }
202
203 //---------------------------INT End----------------------------------------------------
204
205
206
207
208
209
210 //---------------------------Uart Begin----------------------------------------------------------------
211 /*
212 Timer1:
213 模式1、3波特率= 2SMOD/32 × fosc/12×[256 - (TH1)]
214 timer_reg_value = (unsigned char)(256 - (OSC * baud_ratio)/ (32 * 12 * baudrate));
215
216 Timer2:
217 模式1、3波特率=fosc/(32×[65536-(RC2H,RC2L)])
218 timer_reg_value = (unsigned int) (65536 - (OSC / (32 * baudrate)));
219 */
220 void UartSet(uchar ch,uchar timer,uchar mode,uchar net,uint baudrate)
221 {
222 1 unsigned char ratio,sconx;
223 1 unsigned int value;
224 1 // unsigned long tp;
225 1
226 1 sconx=0;
227 1 switch(mode)
228 1 {
229 2 case 0: break;
230 2 case 1: sconx |= 0x40; break;
231 2 case 2: sconx |= 0x80; break;
232 2 case 3: sconx |= 0xC0; break;
233 2 default : sconx |= 0x40; break;
234 2 }
235 1 if(net==1)sconx |= 0x20; //如果允许多机通信
236 1
237 1 RCLK=0;
238 1 TCLK=0;
239 1 PCON &= 0xF3; //RCLK1,TCLK1=0
240 1
241 1 if(ch==0)
C51 COMPILER V8.01 DRIVER 03/28/2006 09:48:45 PAGE 5
242 1 {
243 2 REN=0; //禁止UART0接收
244 2 ES = 0; //关UART0中断
245 2 if(timer==2){RCLK=1;TCLK=1;}//TCLK和RCLK=1,使用Timer2 for UART1
246 2 }
247 1 else
248 1 {
249 2 SCON2 &= 0xEF; //禁止UART1接收,REN2=0
250 2 IEA &= 0xEF; //关UART1中断,ES2 = 0;
251 2 if(timer==2)PCON |= 0x0C; //TCLK1和RCLK1=1,使用Timer2 for UART2
252 2 }
253 1
254 1 if(timer==1)
255 1 {//timer 1:24MHz时钟时,最好不用Timer1做波特率时钟,误差太大
256 2 ET1=0; //关定时器1中断
257 2 TR1=0;
258 2 TMOD &= 0x0F; // clear timer 1 mode bits
259 2 TMOD |= 0x20; //Set timer1 自动重载模式,按定时器操作来配置
260 2 if(baudrate==9600 || baudrate==38400)
261 2 {
262 3 ratio=2;
263 3 if(ch==0)PCON |= 0x80; //SMOD=1;
264 3 else PCON |= 0x40; //SMOD1=1;
265 3 }
266 2 else
267 2 {//baudrate==19200 or 4800,19200误差比较大
268 3 ratio=1;
269 3 if(ch==0)PCON &= 0x7F; //SMOD=0;
270 3 else PCON &= 0xBF; //SMOD1=0;
271 3 }
272 2 if(mode==1 || mode==3)
273 2 {//Mode 1 or Mode 3
274 3 // tp = OSC/384; //12*32=384
275 3 // TH1 = 256 - (unsigned char)(tp*ratio/baudrate);
276 3 TH1 = 256 - (unsigned char)(Timer1Baudrate*ratio/baudrate);
277 3 TL1 = TH1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -