📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 03/30/2009 10:32:15 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <c8051f020.h>
2
3 #include "CH375INC.H"
4 #ifdef __CX51__
#ifndef __C51__
#define __C51__ 1
#endif
#endif
9
10 typedef unsigned char UINT8;
11 typedef unsigned short UINT16;
12 typedef unsigned long UINT32;
13 #ifdef __C51__
14 typedef unsigned char idata *PUINT8;
15 #else
typedef unsigned char *PUINT8;
#endif
18 #ifdef __C51__
19 typedef unsigned char xdata *PUINT8X;
20 #else
typedef unsigned char *PUINT8X;
#endif
23 #ifdef __C51__
24 typedef unsigned char code *PUINT8C;
25 #else
typedef unsigned char *PUINT8C;
#endif
28 #ifdef __C51__
29 #pragma NOAREGS
30 #endif
31
32
33 #ifndef MAX_DATA_SIZE
34 #define MAX_DATA_SIZE 32 /* 单次命令处理的最大数据长度,有效值是1到56 */
35 #endif
36
37 typedef struct _USB_DOWN_PACKET { /* 下传的数据包结构,用于命令/写数据 */
38 UINT8 mCommand; /* 命令码,见下面的定义 */
39 UINT8 mStatus;
40 UINT16 mAddress;
41 UINT8 mLength; /* 下面的缓冲区的长度,读写操作的字节数 */
42 UINT8 mBuffer[ MAX_DATA_SIZE ]; /* 数据缓冲区 */
43 } USB_DOWN_PKT;
44
45 typedef struct _USB_UP_PACKET { /* 上传的数据包结构,用于状态/读数据 */
46 UINT8 mStatus; /* 状态码,见下面的定义 */
47 //UINT8 mCommandNot; /* 命令码的反码,用于校验上传数据包 */
48 UINT8 mReserved[2];
49 UINT8 mLength; /* 下面的缓冲区的长度,读操作的字节数 */
50 UINT8 mBuffer[ MAX_DATA_SIZE ]; /* 数据缓冲区 */
51 } USB_UP_PKT;
52
53 typedef union _USB_DATA_PACKET { /* USB上传或者下传数据缓冲区 */
54 USB_DOWN_PKT down;
55 USB_UP_PKT up;
C51 COMPILER V7.06 MAIN 03/30/2009 10:32:15 PAGE 2
56 } USB_DATA_PKT;
57 /**延时MS**/
58 void Delay_ms(unsigned char m)
59 {
60 1 unsigned char a;
61 1 unsigned int b;
62 1 for(a=m;a!=0;a--)
63 1 for(b=595;b!=0;b--);
64 1 }
65 void Delay1us()
66 {
67 1 UINT8 i;
68 1 for(i=0;i!=0;i--);
69 1 }
70 void Delay2us()
71 {
72 1 UINT8 i;
73 1 for(i=1;i!=0;i--);
74 1 }
75 void IO_Init()
76 {
77 1 EA=0;
78 1 WDTCN=0xde;
79 1 WDTCN=0xad;
80 1 EA=1;
81 1 EA=0;
82 1 XBR0=0x05;
83 1 XBR1=0X14;
84 1 XBR2=0x04;
85 1 P2MDOUT|=0x21;
86 1 //P4MDOUT|=0xff;
87 1 P74OUT|=0xff;
88 1 XBR2|=0x40;
89 1 }
90 void Init_CLK()
91 {
92 1 unsigned short i;
93 1 OSCXCN=0x66;
94 1 for(i=0;i<256;i++);
95 1 while(!(OSCXCN&0x80));
96 1 OSCICN=0x08;
97 1 }
98 /* 与CH372/CH375有关的基本I/O操作 */
99
100 void CH375_WR_CMD_PORT( UINT8 cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */
101 1 P7=cmd;
102 1 P4&=0xf7;//置低片选
103 1 P4|=0x04; //A0置高
104 1 Delay2us();
105 1 P4&=0x7f; //WR=0
106 1 Delay2us();
107 1 P4|=0x80; //WR=1
108 1 Delay2us();
109 1 }
110
111 void CH375_WR_DAT_PORT( UINT8 dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 *
-/
112 1 P7=dat;
113 1 P4&=0xf7;//置低片选
114 1 P4&=0xfb; //A0置低
115 1 Delay1us();
116 1 P4&=0x7f; //WR=0
C51 COMPILER V7.06 MAIN 03/30/2009 10:32:15 PAGE 3
117 1 Delay1us();
118 1 P4|=0x80; //WR=1
119 1 Delay1us();
120 1 }
121 UINT8 CH375_RD_DAT_PORT( void ) { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */
122 1 UINT8 state;
123 1 P7=0xff;
124 1 P4&=0xf7;//置低片选
125 1 Delay1us();
126 1 P4&=0xfb; //A0置低
127 1 Delay1us();
128 1 P4&=0xbf; //WR=1,RD=0
129 1 Delay1us();
130 1 state=P7;
131 1 P4|=0x40; //WR=1,RD=1
132 1 Delay1us();
133 1 return state;
134 1 }
135 /* CH375初始化子程序 */
136 void CH375_Init( void ) {
137 1 UINT8 i;
138 1
139 1
140 1 /* 设置USB工作模式, 必要操作 */
141 1 CH375_WR_CMD_PORT( CMD_SET_USB_MODE );
142 1 CH375_WR_DAT_PORT( 2 ); /* 设置为使用内置固件的USB设备方式 */
143 1 for ( i=100; i!=0; i-- ) if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /* 等待操作成功,通常需要
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -