Keil uVision2仿真软件的使用说明
μVision2集成开发环境
μVision2IDE是德国Keil公司开发的基于Windows平台的单片机集成开发环境,它包含一个高效的编译器、一个项目管理器和一个MAKE工具。其中KeilC51是一种专门为单片机设计的高效率C语言编译器,符合ANSI标准,生成的程序代码运行速度极高,所需要的存储器空间极小,完全可以与汇编语言媲美。
1.关于开发环境
μVision2的界面如图1-1所示,μVision2允许同时打开、浏览多个源文件。
图1-1 μVision2界面图
2.菜单条、工具栏和快捷键
下面的表格列出了μVision2菜单项命令,工具栏图标,默认的快捷以及他们的描述。
1)编辑菜单和编辑器命令Edit(如表1-1所示)
表1-1 编辑菜单和编辑器命令Edit
菜单 | 工具栏 | 快捷键 | 描述 |
Home | 移动光标到本行的开始 | ||
End | 移动光标到本行的末尾 | ||
Ctrl+Home | 移动光标到文件的开始 | ||
Ctrl+End | 移动光标到文件的结束 | ||
Ctrl+<- | 移动光标到词的左边 | ||
Ctrl+-> | 移动光标到词的右边 | ||
Ctrl+A | 选择当前文件的所有文本内容 | ||
Undo | Ctrl+Z | 取消上次操作 | |
Redo | Ctrl+Shift+Z | 重复上次操作 | |
Cut | Ctrl+X Ctrl+Y | 剪切所选文本 剪切当前行的所有文本 | |
Copy | Ctrl+C | 复制所选文本 | |
Paste | Ctrl+V | 粘贴 | |
Indent Selected Text | 将所选文本右移一个制表键的距离 | ||
Unindent Selected Text | 将所选文本左移一个制表键的距离 | ||
Toggle Bookmark | Ctrl+F2 | 设置/取消当前行的标签 | |
Goto Next Bookmark | F2 | 移动光标到下一个标签处 | |
GotoPrevious bookmark | Shift+F2 | 移动光标到上一个标签处 | |
Clear All Bookmarks | 清除当前文件的所有标签 | ||
Find | 在当前文件中查找文本 | ||
F3 | 向前重复查找 | ||
Shift+F3 | 向后重复查找 | ||
Ctrl+F3 | 查找光标处的单词 | ||
Ctrl+] | 寻找匹配的大括号、圆括号、方括号(用此命令将光标放到大括号、圆括号或方括号的前面) | ||
Replace | 替换特定的字符 | ||
Find in Files… | 在多个文件中查找 | ||
Goto Matching brace | 选择匹配的一对大括号、圆括号或方括号中的内容 |
2)选择文本命令
在μVision2中,可以通过按住Shift键和相应的键盘上的方向键来选择文本。如Ctrl+→可以移动光标到下一个词,那么,Ctrl+Shift+→就是选择当前光标位置到下一个词的开始位置间的文本。当然,也可以用鼠标来选择文本。
3)项目菜单Project和项目命令Project(如表1-2所示)
表1-2 项目菜单和项目命令Project
菜单 | 工具栏 | 快捷键 | 描述 |
New Project… | 创建新项目 | ||
Import μ Vision1 Project… | 转化μ Vision1的项目 | ||
Open Project… | 打开一个已经存在的项目 | ||
Close Project… | 关闭当前的项目 | ||
Target Environment | 定义工具、包含文件和库的路径 | ||
Targets,Groups,Files | 维护一个项目的对象、文件组和文件 | ||
Select Device for Target | 选择对象的CPU | ||
Remove … | 从项目中移走一个组或文件 | ||
Options … | Alt+F7 | 设置对象、组或文件的工具选项 | |
File Extensions | 选择不同文件类型的扩展名 | ||
Build Target | F7 | 编译修改过的文件并生成应用 | |
Rebuild Target | 重新编译所有的文件并生成应用 | ||
Translate … | Ctrl+F7 | 编译当前文件 | |
Stop Build | 停止生成应用的过程 | ||
1~7 | 打开最近打开过的项目 |
4)调试菜单Debug和调试命令(如表1-3所示)
表1-3 调试菜单和调试命令Debug
菜单 | 工具栏 | 快捷键 | 描述 |
Start/Stop Debugging | Ctrl+F5 | 开始/停止调试模式 | |
Go | F5 | 运行程序,直到遇到一个中断 | |
Step | F11 | 单步执行程序,遇到子程序则进入 | |
Step over | F10 | 单步执行程序,跳过子程序 | |
Step out of | Ctrl+F11 | 执行到当前函数的结束 | |
Current function stop Runing | Esc | 停止程序运行 | |
Breakpoints… | 打开断点对话框 | ||
Insert/Remove Breakpoint | 设置/取消当前行的断点 | ||
Enable/Disable Breakpoint | 使能/禁止当前行的断点 | ||
Disable All Breakpoints | 禁止所有的断点 | ||
Kill All Breakpoints | 取消所有的断点 | ||
Show Next Statement | 显示下一条指令 | ||
Enable/Disable Trace Recording | 使能/禁止程序运行轨迹的标识 | ||
View Trace Records | 显示程序运行过的指令 | ||
Memory Map… | 打开存储器空间设置对话框 | ||
Performance Analyzer… | 打开设置性能分析的窗口 | ||
Inline Assembly… | 对某一行重新汇编,可以修改汇编代码 | ||
Function Editor… | 编辑调试函数和调试设置文件 |
5)外围器件菜单Peripherals(如表1-4所示)
表1-4 外围器件菜单Peripherals
菜单 | 工具栏 | 描述 |
Reset CPU | 复位CPU | |
以下为单片机外围器件的设置对话框(对话框的种类及内容依赖于你选择的CPU) | ||
Interrupt | 中断观察 | |
I/O-Ports | I/O口观察 | |
Serial | 串口观察 | |
Timer | 定时器观察 | |
A/D Conoverter | A/D转换器 | |
D/A Conoverter | D/A转换器 | |
I2C Conoverter | I2C总线控制器 | |
Watchdog | 看门狗 |
6)工具菜单Tool(如表1-5所示)
利用工具菜单,可以设置并运行Gimpel PC-Lint、Siemens Easy-Case和用户程序。通过CustomizeTools Menu…菜单,可以添加需要的程序。
表1-5 工具菜单Tool
菜单 | 描述 |
Setup PC-Lint… | 设置Gimpel Software的PC- Lint程序 |
Lint | 用PC- Lint处理当前编辑的文件 |
Lint all C Source Files | 用PC- Lint处理项目中所有的C源代码文件 |
Setup Easy-Case… | 设置Siemens的Easy-Case程序 |
Start/Stop Easy-Case | 运行/停止Siemens的Easy-Case程序 |
Show File (Line) | 用Easy-Case处理当前编辑的文件 |
Customize Tools Menu… | 添加用户程序到工具菜单中 |
3.创建项目实例
μVision2包括一个项目管理器,它可以使8x51应用系统的设计变得简单。要创建一个应用,需要按下列步骤进行操作:
l启动μVision2,新建一个项目文件并从器件库中选择一个器件。
l新建一个源文件并把它加入到项目中。
l增加并设置选择的器件的启动代码
l针对目标硬件设置工具选项。
l编译项目并生成可编程PROM的HEX文件。
下面将逐步地进行描述,从而指引读者创建一个简单的μVision2项目。
1)选择【Project】/【New Project】选项,如图1-2所示。
图1-2 Project菜单
2)在弹出的“Create NewProject”对话框中选择要保存项目文件的路径,比如保存到Exercise目录里,在“文件名”文本框中输入项目名为example,如图1-3所示,然后单击“保存”按钮。
图1-3 Create New Project对话框
3)这时会弹出一个对话框,要求选择单片机的型号。读者可以根据使用的单片机型号来选择,KeilC51几乎支持所有的51核的单片机,这里只是以常用的AT89C51为例来说明,如图1-4所示。选择AT89C51之后,右边Description栏中即显示单片机的基本说明,然后单击“确定”按钮。
图1-4 选择单片机的型号对话框
4)这时需要新建一个源程序文件。建立一个汇编或C文件,如果已经有源程序文件,可以忽略这一步。选择【File】/【New】选项,如图1-5所示。
5)在弹出的程序文本框中输入一个简单的程序,如图1-6所示。
图1-5新建源程序文件对话框图图1-6 程序文本框
6)选择【File】/【Save】选项,或者单击工具栏 按钮,保存文件。
在弹出的如图1-7所示的对话框中选择要保存的路径,在“文件名”文本框中输入文件名。注意一定要输入扩展名,如果是C程序文件,扩展名为.c;如果是汇编文件,扩展名为.asm;如果ini文件,扩展名为.ini。这里需要存储ASM源程序文件,所以输入.asm扩展名(也可以保存为其他名字,比如new.asm等),单击“保存”按钮。
图1-7 Save As对话框图
7)单击Target1前面的+号,展开里面的内容Source Group1,如图1-8所示。
图1-8 Target展开图
8)用右键单击Source Group1,在弹出的快捷菜单中选择Add File to Group‘SourceGroup1’选项,如图1-9所示。
图1-9 Add Files to Group‘SourceGroup1’菜单
9)选择刚才的文件example.asm,文件类型选择Asm Source file(*.C)。如果是C文件,则选择CSource file;如果是目标文件,则选择Object file;如果是库文件,则选择Libraryfile。最后单击“Add”按钮,如果要添加多个文件,可以不断添加(注意:在用汇编语言编写的程序文件时只能添加一个文件,否则会显示错误信息)。添加完毕后单击“Close”按钮,关闭该窗口,如图1-10所示
图1-10 Add Files to Group‘SourceGroup1’对话框
10)这时在Source Group1目录里就有example.asm文件,如图1-11所示。
图1-11 example.asm文件
11)接下来要对目标进行一些设置。用鼠标右键(注意用右键)单击Target1,在弹出的右键菜单中选择Options forTarget‘Target 1’选项,如图1-12所示。
图1-12 ptions for Target ‘Target1’选项
12)弹出Options for Target ‘Target 1’对话框,其中有8个选项卡。
①默认为Target选项卡(如图1-13所示)
图1-13 Target选项卡
lXtal(MHZ):设置单片机工作的频率,默认是24.0MHz。
lUse On-chip ROM(0x0-0XFFF):表示使用片上的Flash ROM,At89C51有4KB的可重编程的FlashROM,该选项取决于单片机应用系统,如果单片机的EA接高电平,则选中这个选项,表示使用内部ROM,如果单片机的EA接低电平,表示使用外部ROM,则不选中该项。这里选中该选项。
lOff-chip Codememory:表示片外ROM的开始地址和大小,如果没有外接程序存储器,那么不需要填任何数据。这里假设使用一个片外ROM,地址从0x8000开始,一般填16进制的数,Size为片外ROM的大小。假设外接ROM的大小为0x1000字节,则最多可以外接3块ROM。
lOff-chip Xdata memory:那么可以填上外接Xdata外部数据存储器的起始地址和大小,一般的应用是62256,这里特殊的指定Xdata的起始地址为0x2000,大小为0x8000。
lCode Banking:是使用CodeBanking技术。Keil可以支持程序代码超过64KB的情况,最大可以有2MB的程序代码。如果代码超过64KB,那么就要使用CodeBanking技术,以支持更多的程序空间。CodeBanking支持自动的Bank的切换,这在建立一个大型系统时是必需的。例如:在单片机里实现汉字字库,实现汉字输入法,都要用到该技术。
lMemory Model:单击Memory Model后面的下拉箭头,会有3个选项,如图1-14所示。
图1-14 Memory Model选项
lSmall:变量存储在内部RAM里。
lCompact:变量存储在外部RAM里,使用8位间接寻址。
lLarge:变量存储在外部RAM里,使用16位间接寻址。
一般使用Small来存储变量,此时单片机优先将变量存储在内部RAM里,如果内部RAM空间不够,才会存在外部RAM中。Compact的方式要通过程序来指定页的高位地址,编程比较复杂,如果外部RAM很少,只有256字节,那么对该256字节的读取就比较快。
如果超过256字节,而且需要不断地进行切换,就比较麻烦,Compact模式适用于比较少的外部RAM的情况。Large模式是指变量会优先分配到外部RAM里。需要注意的是,3种存储方式都支持内部256字节和外部64KB的RAM。因为变量存储在内部RAM里运算速度比存储在外部RAM要快得多,大部分的应用都是选择Small模式。
使用Small模式时,并不说明变量就不可以存储在外部,只是需要特别指定,比如:
unsigned char xdata a:变量a存储在内部RAM。
unsigned char a:变量存储在内部RAM。
但是使用Large的模式时:
unsigned char xdata a:变量a存储在外部RAM。
unsigned char a:变量a同样存储在外部RAM。
这就是它们之间的区别,可以看出这几个选项只影响没有特别指定变量的存储空间的情况,默认存储在所选模式的存储空间,比如上面的变量定义unsignedchar a。
lCode Rom Size:单击Code Rom Size后面的下拉箭头,将有3个选项,如图1-15所示。
图1-15 Code Rom Size选项
Small:program2K orless,适用于AT89C2051这些芯片,2051只有2KB的代码空间,所以跳转地址只有2KB,编译的时候会使用ACALLAJMP这些短跳指令,而不会使用LCALL,LJMP指令。如果代码地址跳转超过2KB,那么会出错。
Compact:2K functiongs,64Kprogram,表示每个子函数的代码大小不超过2K,整个项目可以有64K的代码。就是说在main()里可以使用LCALL,LJMP指令,但在子程序里只会使用ACALL,AJMP指令。只有确定每个子程序不会超过2KB,才可以使用Compact方式。
Large:64KB program,表示程序或子函数代码都可以大到64KB,使用codebank还可以更大。通常都选用该方式。选择Large方式速度不会比Small慢很多,所以一般没有必要选择Compact和Small方式。这里选择Large方式。
lOperating:单击Operating后面的下拉箭头,会有3个选项,如图1-16所示。
图1-16 Operating选项
None:表示不使用操作系统。
RTX-51 Tiny Real-Time OS:表示使用Tiny操作系统。
RTX-51 Full Real -Time OS:表示使用Full操作系统。
Tiny是一个多任务操作系统,使用定时器0做任务切换。在11.0592MHz时,切换任务的速度为30ms。如果有10个任务同时运行,那么切换时间为300ms。不支持中断系统的任务切换,也没有优行级,因为切换的时间太长,实时性大打折扣。多任务情况下(比如5个),轮循一次需要150ms,即150ms才处理一个任务,这连键盘扫描这些事情都实现不了,更不要说串口接收、外部中断了。同时切换需要大概1000个机器周期,对CPU的浪费很大,对内部RAM的占用也很严重。实际上用到多任务操作系统的情况很少。
Keil C51 Full Real -TimeOS是比Tiny要好一些的系统(但需要用户使用外部RAM),支持中断方式的多任务和任务优先级,但是KeilC51里不提供该运行库,要另外购买。
这里选择None。
②设置Output选项卡(如图1-17所示)
图1-17 设置Output卡
lSelect Folder forObjects:单击该按钮可以选择编译后目标文件的存储目录,如果不设置,就存储在项目文件的目录里。
lName ofExecutable:设置生成的目标文件的名字,缺省情况下和项目的名字一样。目标文件可以生成库或者obj、HEX的格式。
lCreate Executable:如果要生成OMF以及HEX文件,一般选中Debug Information和BrowseInformation。选中这两项,才有调试所需的详细信息,比如要调试C语言程序,如果不选中,调试时将无法看到高级语言写的程序。
lCreate HEXFile:要生成HEX文件,一定要选中该选项,如果编译之后没有生成HEX文件,就是因为这个选项没有被选中。默认是不选中的。
lCreate Library:选中该项时将生成lib库文件。根据需要决定是否要生成库文件,一般应用是不生成库文件的。
lAfter Make:栏中有以下几个设置。
lBeep when complete:编译完成之后发出咚的声音。
lStart Debugging:马上启动调试(软件仿真或硬件仿真),根据需要来设置,一般是不选中。
lRun User Program #1,Run User Program#2:这个选项可以设置编译完之后所要运行的其他应用程序(比如有些用户自己编写了烧写芯片的程序,编译完便执行该程序,将HEX文件写入芯片),或者调用外部的仿真器程序。根据自己的需要设置。
③设置Listing选项卡(如图1-18所示)
图1-18 设置Listing选项卡
KeilC51在编译之后除了生成目标文件之外,还生*.lst、*m51的文件。这两个文件可以告诉程序员程序中所用的idata、data、bit、xdata、code、RAM、ROM、stack等的相关信息,以及程序所需的代码空间。
选中AssemblyCode会生成汇编的代码。这是很有好处的,如果不知道如何用汇编来写一个long型数的乘法,那么可以先用C语言来写,写完之后编译,就可以得到用汇编实现的代码。对于一个高级的单片机程序员来说,往往既要熟悉汇编,同时也要熟悉C语言,才能更好地编写程序。某些地方用C语言无法实现,便用汇编语言却很容易。有些地方用汇编语言,很繁琐,用C语言就很方便。
单击Select Folder forListings按钮后,在出现的对话框中可以选择生成的列表文件的存放目录。不做选择时,使用项目文件所在的目录。
④设置Debug选项卡(如图1-19所示)
这里有两类仿真形式可选:Use Simulator和Use:Keil Monitor-51Driver,前一种是纯软件仿真,后一种是带有Monitor-51目标仿真器的仿真。
lLoad Application at Start:选择这项之后,Keil才会自动装载程序代码。
图1-19 设置Debug选项卡
lGo till main:调试C语言程序时可以选择这一项,PC会自动运行到main程序处。
这里选择Use Simulator。
如果选择Use:Keil Monitor-51Driver,还可以单击图1-19中的Settings按钮,打开新的窗口如图1-20,其中的设置如下。
lPort:设置串口号,为仿真机的串口连接线COM_A所连接的串口。
lBaudrate:设置为9600,仿真机固定使用9600bit/s跟Keil通信。
lSerial Inerrupt:允许串行中断,选中它。
lCache Options:可以选也可以不选,推荐选它,这样仿真机会运行得快一点。
最后单击OK按钮关闭窗口。
图1-20 Target设置
13)编译程序,选择【Project】/【Rebuild all target files】选项,如图1-21所示。
图1-21 Rebuild all targetfiles
或者单击工具栏中的 按钮,如图1-22所示,开始编译程序。
图1-22 工具栏中的按钮
如果编译成功,开发环境下面会显示编译成功的信息,如图1-23所示。
图1-23 编译成功信息
14)编译完毕之后,选择【Debug】/【Start/Stop DebugSession】选项,即就进入仿真环境,如图1-24所示。
图1-24 仿真
或者单击工具栏中的 铵钮,如图1-25所示。
图1-25 工具栏仿真按钮
15)装载代码之后,开发环境下面显示如图1-26所示的信息。
图1-26 装载代码
附录二 使用PTS组件实现KeiluVision2的在线调试
1.硬件准备:
首先您必须具备PTS组件硬件系统和THKL-C51仿真器,还需要一条串口线(串口线的接法是2-3/3-2/5-5也就是交叉接法,不是平行接法)。
2.软件准备:
您需要准备Keil uVision2软件一套,版本最好是7.0之后的,我们产品附带光盘就包含了最新的KeiluVision2软件,如果老用户无法得到这个版本软件,可以上网寻找,也可以到Keil公司的网站下载 www.keil.com下载,当然您还可以和我们销售联络,获得光盘。
3.系统设置:
实验箱联接好电源线,串口线联接好PC机和THKL-C51仿真器,把仿真器插入单片机最小应用系统的锁紧插座。
请注意仿真器插入方 向,缺口应朝上。
4.软件设置:
首先,打开KeiluVision2软件,新建项目文件或打开已有的项目文件,再新建并添加源文件,详见附录一。开始软件设置,单击按钮或选中项目文件窗口中的‘Target 1’,找到图2-1所示菜单项。
图2-1 Project菜单
选中以后找到图2-2所示的对话框,按照图2-2里面的图示方法,进行端口设置。选择硬件仿真(Use: KeilMonitor-51 Driner;部分实验只这需要软件软件仿真时选择Use Simulator)。
图2-2 设置Debug选项卡
单击“Settings”进入Target设置,如图2-3。选择串行口,波特率选择38400,这样就设置好了。
图2-3 Target设置
5.开始调试
按实验指导提供的方法连接好实验导线。打开相关模块的电源开关(关闭不相关模块的电源开关),打开总电源开关。先单击按钮编译项目文件,单击按钮 选择菜单“Project”里的“Rebuild all targetfiles”如图2.1所示。再按图2-4中的按钮 开始调试。
图2-4 调试窗口
这时候如果出现图2-5所示对话框,那么硬件系统应复位一次,关闭总电源开关2秒后从新打开电源。
图2-5 联接失败对话框
然后按图2-5所示的“Try Again”,可进入调试阶段。如图2-6所示。
图2-6 调试窗口
按图2-6 中 按钮,即可运行程序。
如果想停止运行程序,应按一下THKL-C51仿真器的复位按钮,等待约2秒后,程序便停止运行,再次按图2-6中的按钮可返回到图2-4界面。
附录三 Keil uVision2软件仿真
我们来根据一个实例看看软件仿真的过程。 本实例指定外部存储器的起始地址和长度,将其内容赋同一值。
程序如下:
ADDR | EQU 8000H | ;地址:8000H |
ORG | 0000H | |
MOV | DPTR,#ADDR | |
MOV | R0,#20 | ;赋值个数:20 |
MOV | A,#0FFH | ;赋值:0FFH |
LOOP: MOVX | @DPTR,A | |
INC | DPTR | |
DJNZ | R0,LOOP | |
END |
1.软件设置
点击按钮,按照图3-1 里面的图示方法,进行端口设置:
图3-1 设置Debug 选项卡
2.编译
点击 按钮,无误后点击 按钮,如图3-2。编译无误后点击按钮 开始调试。
图3-2 编译
3.调试
打开View 菜单下 Memory Window (存储器窗口),在存储器窗口的Address 输入框中输入:
X:0x8000 (如需查看单片机内RAM单元则输入D:0x**,如:D:0x30)
接着按回车键,存储器窗口显示8000H 起始的存储数据(都为0)。点击 按钮,运行程序,如图3-3。
程序运行结束后,存储器窗口显示8000H 起始的20 个单元的数据变为“0FFH”,如图3-4。
图3-3 调试窗口
图3-4 调试窗口
4.设置断点
在需设断点的指令行的空白处双击左键,指令行的前端出现红色方块即可。同样,取消断点设置,也在空白处双击左键,红色方块消失。如图3-5。
图3-5 调试窗口
按钮 分别为:复位CPU、运行、停止、单步执行程序(遇到子程序则进入)和单步执行程序(跳过子程序)。
5.如何生成.HEX格式文件
因为烧录器一般只支持.HEX格式文件,而KeiluVision2的默认设置中不会生成该格式的文件,这就需要我们来设置了。如图3.6设置Output选项卡中的选中“Create HEXFi:”前的复选框,然后在编译后就会生成和项目主文件名同名扩展名为“.HEX”的文件。
图3-6 设置Output选项卡
附录四 THKL-C51 仿真器介绍
1.联机和自检的正确操作步骤
不要带电插拔串口,以防止由此产生的浪涌电流损坏MAX232通讯芯片,下面的操作顺序可以避免带电插拔:
联机正确顺序:插好仿真用串口旋紧固定螺栓→插上USB电源接口→连接目标硬件,目标硬件可以是任何51系列单片机系统开发板、试验板、工控板、目标板…等等的51系列单片机硬件系统。
脱机正确顺序:拔下USB电源接口→拔下仿真用串口。如果短期内经常要使用仿真功能,无需拔下串口。
因为仿真器在通电瞬间要对系统进行自检,所以在通过USB给仿真系统供电之前,仿真头上不要连有负载。接通USB电源,POWLED指示灯会亮起来,表示自检通过,此时就可以进入的硬件仿真了。
2.仿真器复位按钮的作用
在仿真器的右侧下方有一个小的按纽,这个按钮用来给整个仿真器硬件系统复位,什么时候需要按这个按钮呢?设置好KEIL的硬件环境后,在每次点击进入仿真环境之前,需要按一下这个复位按纽,这样KEIL启动后,软件和已复位的硬件仿真器就会顺利联机。在点击进入仿真环境之后,仿真器完全由KEIL控制,此时不要按这个按钮,否则在仿真过程中系统将会提示联机中断。如果需要给硬件复位的话,请先点击退出KEIL仿真调试环境。
仿真器使用注意事项:在打开PC机之前请把仿真器和PC机的串口连好。在联机后,请千万不要带电插拔仿真器和PC机的接口,如果带电插拔仿真器就可能导致接口电路MAX232损坏。注意插拔的时候仿真器或者PC机至少有一方的电源是断开的。
断开连接之前推荐步骤:
(1)按一下仿真器硬件复位按纽;
(2)按 退出仿真环境;
(3)关闭KEIL,关闭PC机,最后再断开硬件连接,如果要经常使用则不用断开硬件连接。