基于Proteus和Keil C51的单片机设计与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7 工程的设置

在建立工程项目后,要对工程进行设置。用鼠标右键单击“Target 1”,在弹出的菜单中选择“Options for Target ‘Target 1’”,如图1-17所示。

图1-17 选择工程设置

此时会弹出“Options for Target ‘Target 1’”对话框,如图1-18所示。

图1-18 “Options for Target ‘Target 1’”对话框

说明 进入工程设置对话框的另一方法是执行菜单命令“Project”→“Options for Target ‘Target 1’”。

“Options for Target‘Target 1’”对话框共有10个选项卡,这些复杂的选项大部分都可以采取默认值,只有如下几个与实际相关的选项要设置。

1)“Target”选项卡

Xtal(MHz):单片机的工作频率。默认为24.0MHz,如果单片机的晶振频率为11.059 2MHz,则在此栏输入“11.059 2”(单位是MHz)。

Use On-chip ROM(0x0-0x1FFF):使用片上的Flash ROM。AT89C52有8KB的Flash ROM。是否选中此选项取决于用户的应用系统,如果单片机的EA引脚接高电平,应选中这个选项;如果单片机的EA引脚接低电平,表示使用外部ROM,则不要选中该选项。本例选中此选项。

Off-chip Code memory:在片外接的ROM的开始地址和大小。在此假设使用一个片外的ROM,地址从0x8000开始(注意,不要输入“8000”,否则会被当做十进制数;此处要输入十六进制数), Size为外接ROM的大小,假设接了一个0x1000字节的ROM,应在“Eprom”后面的“Start:”栏输入“0x8000”,在“Size:”中输入“0x1000”。最多可以外接3块ROM。如果没有外接程序存储器,就不要输入任何数据。

Off-chip Xdata memory:外接Xdata(外部数据存储器)的起始地址和大小。本例指定Xdata的起始地址为0x2000,大小为0x8000,因此应在“Ram”后面的“Start:”栏中输入“0x8000”,在“Size:”栏中输入“0x1000”。如果没有外接数据存储器,就不要输入任何数据。

Code Banking:使用Code Banking技术。Keil可以支持程序代码超过64KB的情况,最大可以有2MB的程序代码。如果代码超过64KB,就要使用Code Banking技术,以支持更多的程序空间。Code Banking是一个高级的技术,支持自动的Bank切换,是建立一个大型系统的必要技术。例如,要在单片机里实现汉字字库,实现汉字输入法,都要用到该技术。在这里不选它。

Memory Model:用鼠标单击“Memory Model”栏的下拉箭头,会出现如图1-19所示的3个选项。

✧ Small: variables in DATA变量存储在内部RAM。

✧ Compact: variables in PDATA变量存储在外部RAM,使用8位间接寻址。

✧ Large: variables in XDATA变量存储在外部RAM,使用16位间接寻址。

图1-19 “Memory Model”栏的下拉菜单

一般使用Small方式来存储变量,即单片机优先把变量存储在内部RAM,如果内部RAM不够了,才会存到外部RAM。

Compact方式要用户通过程序来指定页的高位地址,编程比较复杂。如果外部RAM很少,只有256B,那么对256B的读/取就比较快,用MOVX@Ri,A或MOVX A,@Ri指令即可。如果超过256B,就要不断地进行切换,这就比较麻烦。Compact模式适用于外部RAM比较少的情况。

Large模式是指变量会优先分配到外部RAM,用MOVX A,@DPTR或MOVX@DPTR,A来读取。要注意的是,3种存储方式都支持内部256B和外部64KB的RAM,区别是变量的优先(或默认)存储位置不同。除非不想把变量存储在内部RAM,才会使用Compact或Large模式。因为变量存储在内部RAM的运算速度比存储在外部RAM的运算速度要快得多,大部分的应用都选择Small模式。使用Small模式,也不是说变量就不可以存储在外部RAM,只是需要做如下指定:

    unsigned char xdata a变量a存储在外部RAM。
    unsigned char a变量a存储在内部RAM。

Code Rom Size:单击“Code Rom Size”栏的下拉箭头,会出现如图1-20所示的3个选项。

图1-20 “Code Rom Size”栏的下拉菜单

✧ Small:program 2K or less适用于AT89C2051。AT89C2051只有2KB的代码空间,所以跳转地址只有2KB,编译时会使用ACALL、AJMP这些短跳转指令,而不会使用LCALL、LJMP指令。如果代码跳转超过2KB,则会出错。

✧ Compact:2K functions,64K program表示每个子函数程序的大小不超过2KB,整个工程可以有64KB的代码。就是说在main()里可以使用LCALL、LJMP指令,但在子程序里只会使用ACALL、AJMP指令。除非确认每个子程序不会超过2KB,否则不要用Compact方式。

✧ Large:64K program表示程序或子函数都可以大到64KB(使用Code Bank时还可以更大),通常都选用该方式。Large方式的速度不会比Small的慢很多,所以一般没有必要选择Compact或Small方式。本例选择Large方式。

Operating:单击“Operating”栏的下拉箭头,会出现如图1-21所示的3个选项。

图1-21 “Operating”栏的下拉菜单

✧ None表示不使用操作系统。

✧ RTX-51 Tiny表示使用Tiny操作系统。

✧ RTX-51 Full表示使用Full操作系统。

Keil C51提供了Tiny系统(Demo版没有Tiny系统,正版软件才有),Tiny系统是一个多任务操作系统,使用定时器0来做任务切换。一般用11.059 2MHz时,切换任务的速度为30ms。如果有10个任务同时运行,那么切换时间为300ms。同时,不支持中断系统的任务切换,也没有优先级。因为切换的时间太长,实时性大打折扣,多任务情况下(如5个),完成一轮切换就要150ms,150ms才处理一个任务,连键盘扫描任务都无法实现,更不要说串口接收、外部中断等。同时切换需要大概1 000个机器周期,对CPU资源的浪费很大,对内部RAM的占用也很厉害。实际上用到多任务操作系统的情况少之又少。多任务操作系统一般适合于16位或32位的CPU,不适合于8位的CPU。

Keil C51 Full Real-Time OS是比Tiny要好一些的系统,支持中断方式的多任务和任务优先级,但需要使用外部RAM。Keil C51不提供该运行库,需要另外购买。

Keil的多任务操作系统的思想值得学习,特别是任务切换的算法,如何切换任务和保存堆栈等有一定的研究价值。如果熟悉了其切换的方法,可以编写更好的切换程序。本书不推荐大家使用多任务操作系统,本例选择“None”。Target工程设置完成后的“Options for Tar-get ‘Target 1’”对话框如图1-22所示。

图1-22 Target工程设置完成后的“Options for Target ‘Target 1’”对话框

2)“Output”选项卡

Select Folder for Objects:单击这个按钮可以选择编译之后的目标文件存储在哪个目录里,如果不设置的话,就在工程文件的目录里,如图1-23所示。

图1-23 “Output”选项卡

Name of Executable:设置生成的目标文件的名字,默认跟工程的名字是一样的。目标文件可以生成库或obj、hex的格式。

Create Executable:生成OMF及HEX文件。

✧ Debug Information和Browse Information:一般要选中这两个选项,这样才有详细调试所需要的信息。例如,要做C语言程序的调试,若不选中这两项,调试时将无法看到高级语言程序。

✧ Create Hex File:要生成Hex文件,必须选中此选项。

✧ Create Library:选中此选项时,将生成lib库文件。一般的应用是不需要生成库文件的。

After Make

✧ Beep When Complete:编译完成后,发出“咚”的声音。

✧ Start Debugging:马上启动调试(软件仿真或硬件仿真)。一般不选中。

✧ Run User Program#1,Run User Program#2:可以设置编译完成后运行别的应用程序,如有些用户自己编写的烧录芯片的程序(编译完便执行将Hex文件写入芯片),或者调用外部的仿真程序。根据自己的需要进行设置。

3)“Listing”选项卡 Keil C51在编译后除了生成目标文件外,还生成*.lst和 *.m51的文件。这两种扩展名的文件对了解程序用到了哪些idata、data、bit、xdata、code、ram、rom、stack等有很重要的作用。有些用户想知道自己的程序需要多大代码空间,就可以从这两个文件中寻找答案。一般应按照图1-24所示进行设置。若不想生成某些内容,可以取消相应的选项。

图1-24 “Listing”选项卡

Assembly Code:选中会生成汇编的代码。

Select Folder for Listings:选择生成的列表文件存放的目录。若不选择,则使用工程文件所在的目录。

4)其他 除上述3个选择卡外,“C51”、“A51”等6个选择卡一般都不用设置,采用默认值即可。

上述设置完成后,单击“确定”按钮回到主界面,工程设置完毕。