📄 usbp.lst
字号:
C51 COMPILER V7.20 USBP 11/15/2005 18:46:54 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE USBP
OBJECT MODULE PLACED IN USBP.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil Uvision V7.20\C51\BIN\C51.EXE USBP.C BROWSE DEBUG OBJECTEXTEND SYMBOLS
line level source
1 //*************************************************************************************************
2 // Module Name : USBP.C
3 // CreateDate : 2005-05-02
4 // ModifData : 2005-05-03
5 // Description :
6 // Author : 李远正
7 // Version : V1.0
8 //*************************************************************************************************
9 //
10 // U盘文件读写模块, 连接方式: 并口+( 中断 或 查询 )
11 // MCS-51单片机C语言示例程序, 仅适用于V2.5及以上版本的模块
12 // 因为使用U盘文件读写模块而不是使用U盘文件级子程序库,所以占用较少的单片机资源
13
14 #include <C8051F020.H>
15 #include <absacc.h>
16 #include "USBP.H"
17 /*
18 //-------------------------------------------------------------------------------------------------
19 //-------------------------------------------------------------------------------------------------
20 //
21 CMD_PARAM mCmdParam; // 默认情况下该结构将占用64字节的RAM,可以修改MAX_PATH_LEN常量,当修改为32时,只占用
-32字节的RAM
22
23 unsigned char mIntStatus; // CH375模块的中断状态或者操作完成状态
24 */
25 //*************************************************************************************************
26 // 对于模拟的并口读写时序或者其它并口读写方式,请修改以下3个子程序 mDelayuS( 1 );
27 #define CH375HM_INDEX_WR( Index ) { CH375HM_INDEX = ( Index ); } // 写索引地址
28 #define CH375HM_DATA_WR( Data ) { CH375HM_DATA = ( Data ); } // 写数据
29 #define CH375HM_DATA_RD( ) ( CH375HM_DATA ) // 读数据
30
31 //=================================================================================================
32 //=================================================================================================
33 // 并口连接方式
34 #if CH375HM_CONNECT == 1
35
36 //---------------------------------------------
37 // 中断方式
38 #if CH375HM_INT == 1
39
40 //-------------------------------------------------------------------------------------------------
41 // 1 uS Delay
42 void mDelayuS( unsigned char usecond )
43 {
44 1 unsigned char i;
45 1
46 1 while( usecond-- ) for( i=0; i<1; i++ );
47 1 }
48
49 //=================================================================================================
50 // 中断方式 : ExecCommand( );
51 //=================================================================================================
52 // 中断方式有两个子程序如下 :
53 //-------------------------------------------------------------------------------------------------
54 // CH375模块的中断服务程序
C51 COMPILER V7.20 USBP 11/15/2005 18:46:54 PAGE 2
55 void CH375HMInterrupt( ) interrupt CH375HM_INT_NO
56 {
57 1 unsigned char status, i;
58 1 #define DataCount status // 节约一个变量单元
59 1
60 1 CH375HM_INT_N( ); // 关闭中断
61 1
62 1 CH375HM_INDEX_WR( 63 ); // 写入索引地址63
63 1 status = CH375HM_DATA_RD( ); // 从索引地址63读取中断状态
64 1 CH375HM_STA = 1; // 中断应答,取消来自模块的中断请求
65 1 mDelayuS( 3 ); // 3 uS
66 1
67 1 // 正在从U盘读数据块,请求数据读出.( 每次传输过程必须在2mS 时间之内完成,否则有些U 盘可能会工作不正常。)
68 1 if ( status == USB_INT_DISK_READ )
69 1 {
70 2 DataCount = 64; // 计数,从CH421的索引地址00H开始,连续取走64 字节的数据块
71 2 i = 0;
72 2 do // 要提高文件数据读写速度,这段程序用汇编程序效率更高,在C51中,do+while比for或者while结构效率高
73 2 {
74 3 CH375HM_INDEX_WR( i++ );
75 3 *buffer++ = CH375HM_DATA_RD( ); // 从索引地址0到63依次读出64字节的数据,保存到外部缓冲区
76 3 } while ( -- DataCount ); // 上面这一小段C程序用汇编程序效率要高近一倍
77 2 CH375HM_STA = 0; // 产生下降沿通知模块继续,说明64字节数据已经读取完成
78 2 }
79 1
80 1 // 正在向U盘写数据块,请求数据写入.( 每次传输过程必须在2mS 时间之内完成,否则有些U 盘可能会工作不正常。)
81 1 else if ( status == USB_INT_DISK_WRITE )
82 1 {
83 2 CH375HM_INDEX_WR( 0 );
84 2 i = 64;
85 2 do // 要提高文件数据读写速度,这段程序用汇编程序写效率更高,在C51中,do+while比for或者while结构效率高
86 2 {
87 3 CH375HM_DATA_WR( *buffer++ ); // 向索引地址0到63依次写入64字节的数据,写入的数据来自外部缓冲区
88 3 } while ( -- i );
89 2 CH375HM_STA = 0; // 产生下降沿通知模块继续,说明64字节数据已经写入完成
90 2 }
91 1
92 1 // 读写数据块失败重试,应该向回修改缓冲区指针
93 1 else if ( status == USB_INT_DISK_RETRY )
94 1 {
95 2 CH375HM_INDEX_WR( 0 );
96 2 i = CH375HM_DATA_RD( ); // 大端模式下为回改指针字节数的高8位,如果是小端模式那么接收到的是回改指
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -