KeiluVision2的使用1、keilC51的安装2、项目的建立3、ASM文件的建立4、项目的编译5、项目的调试6、项目程序的烧写一、keilC51的安装:先运行光盘中单片机软件\setup\setup.exe安装程序,选择安装“EvalVersion”版进行安装。一直点击“Yes”或“Next”,直到“Finish”完成。安装好后,在桌面上会产生快捷图标,如下图:二、keilC51的使用:点击桌面快捷图标,可以直接进入主画面:现在,我一步一步学着做,实际体验一下从编辑源程序到程序调试的全过程。我们做一个让单片机P0口所驱动的LED灯隔一个亮隔一个灭的程序。1、在Keil系统中,每做个独立的程序,都视为工程(或者叫项目)。首先从菜但的“工程”中“新建工程...”,建立我们将要做的工程项目:新建的工程要起个与工程项目意义一致的名字,可以是中文名;我们这里的程序是实验测试程序,所以起的名字为Test,并将Test工程“保存”到C:\Keil下:接下来,Keil环境要求我们为Test工程选择一个单片机型号;我们选择Atmel公司的89C51(虽然我们使用的是89S51,但由于89S51与89C51内、外部结构完全一样,所以这里依然选择“89C51”)。“确定”后工程项目就算建立了。2、立了工程项目,肯定要实施这个工程,现在就为工程添加程序;点击“文件”中的“新建”,新建一个空白文档;这个空白文档就是让我们编写单片机程序的场所。在这里你可以进行编辑、修改等操作。根据题意,在文档中写入下列代码:(下列代码你暂时不要管什么意思,只要照抄正确就可以,今后在学习汇编时你会明白的)movp0,#01010101B;将01010101二进制代码送P0口ajmp$;程序在此原地踏步end;程序结束标志写完后再检查一下,并保存文件,保存文件时,其文件名最好与前面建立的工程名相同(当然这里为Test了),其扩展名必须为.Asm!“文件名”中一定要写全,如:Test.Asm;保存后的文档彩色语法会起作用,将关键字实行彩色显示:3、保存了Asm文件后,还要将其添加到工程中。具体做法如下:(见下图)鼠标右键点击“SourceGroup1”,在弹出的菜单中选“增加文件到组SourceGroup1”:在接下来出现的窗口中,选择“文件类型”为“Asm源文件(*.a*,*.src)”(由于我们使用的是汇编语言,所以选择Asm源文件),选中刚才保存的Test.Asm,按“Add”,再按“关闭”,文件就添加到了工程中。向工程添加了源文件后,鼠标右键点击“TarGet1”,在弹出的菜单中选“目标Target1属性”,如下图:在打开的话框中,选择“输出”选项卡,在这个选项卡中,“E生成HEX文件”选项前要打勾,按“确定”退出。4、最后,从菜单的“工程”中执行“R重新构造所有目标”(或者按下图红圈中的按钮),汇编、连接、创建Hex文件一气呵成;在工程文件的目录下就会生成与工程名相同的一些文件,其中大部分文件我们并不必关心,而生成的Hex文件是我们需要的!它是要烧写到单片机中的最终代码,也就是单片机可以执行的程序。这里生成的是Test.HEX,稍后就写入。若在下面的状态窗中有错误提示,就需要再次编辑、修改源程序(如语法、字符有错等)、保存、构造所有。直至没有错误。5、在没有语法错误的情况下,按下图红圈中的按钮就可以进行模拟调试:下面是调试窗。由于我们的程序是让P0口8个脚隔一个输出0,隔一个输出1,所以要从菜单的“外围设备”中打开“Prot0”P0口窗:单击“单步运行”,在P0窗中就可以看到我们原先设想的效果:点亮第一个发光二极管(位操作)#includereg52.h//52系列单片机头文件sbitled1=P1^0;//声明单片机P1口的第一位voidmain()//主函数{led1=0;/*点亮第一个发光二极管*/}总线操作#includereg52.h//52系列单片机头文件voidmain()//主函数{P1=0xaa;}灯的闪烁#includereg52.h//52系列单片机头文件#defineuintunsignedint//宏定义sbitled1=P1^0;//声明单片机P1口的第一位uinti,j;voidmain()//主函数{while(1)//大循环{led1=0;/*点亮第一个发光二极管*/for(i=1;i0;i--)//延时for(j=110;j0;j--);led1=1;/*关闭第一个发光二极管*/for(i=1000;i0;i--)//延时for(j=110;j0;j--);}}使用延时函数#includereg52.h//52系列单片机头文件#defineuintunsignedint//宏定义sbitled1=P1^0;//声明单片机P1口的第一位voiddelay1s();//声明子函数voidmain()//主函数{while(1)//大循环{led1=0;/*点亮第一个发光二极管*/delay1s();//调用延时子函数led1=1;/*关闭第一个发光二极管*/delay1s();//调用延时子函数}}voiddelay1s()//子函数体{uinti,j;for(i=500;i0;i--)for(j=110;j0;j--);}使用带参数的延时函数#includereg52.h//52系列单片机头文件#defineuintunsignedint//宏定义sbitled1=P1^0;//声明单片机P1口的第一位voiddelayms(uint);//声明子函数voidmain()//主函数{while(1)//大循环{led1=0;/*点亮第一个发光二极管*/delayms(200);//延时200毫秒led1=1;/*关闭第一个发光二极管*/delayms(800);//延时800毫秒}}voiddelayms(uintxms){uinti,j;for(i=xms;i0;i--)//i=xms即延时约xms毫秒for(j=110;j0;j--);}Keil仿真及延时语句的精确计算#includereg52.h//52系列单片机头文件#defineuintunsignedint//宏定义sbitled1=P1^0;//声明单片机P1口的第一位uinti,j;voidmain()//主函数{while(1)//大循环{led1=0;/*点亮第一个发光二极管*/for(i=1;i0;i--)//延时for(j=110;j0;j--);led1=1;/*关闭第一个发光二极管*/for(i=1000;i0;i--)//延时for(j=110;j0;j--);}}利用C51库函数实现流水灯#includereg52.h//52系列单片机头文件#includeintrins.h#defineuintunsignedint//宏定义#defineucharunsignedcharvoiddelayms(uint);//声明子函数ucharaa;voidmain()//主函数{aa=0xfe;//赋初值11111110while(1)//大循环{P1=aa;delayms(500);//延时500毫秒aa=_crol_(aa,1);//将aa循环左移1位后再赋给aa}}voiddelayms(uintxms){uinti,j;for(i=xms;i0;i--)//i=xms即延时约xms毫秒for(j=110;j0;j--);}花样流水灯#includereg51.h#defineINT8Uunsignedchar#defineINT16UunsignedintcodeINT16UPattern[]=//本例16位的花样数组{0xFCFF,0xF9FF,0xF3FF,0xE7FF,0xCFFF,0x9FFF,0x3FFF,0x7FFE,0xFFFC,0xFFF9,0xFFF3,0xFFE7,0xFFCF,0xFF9F,0xFF3F,0xFFFF,0xE7E7,0xDBDB,0xBDBD,0x7E7E,0xBDBD,0xDBDB,0xE7E7,0xFFFF,0xE7E7,0xC3C3,0x8181,0x0000,0x8181,0xC3C3,0xE7E7,0xFFFF,0xAAAA,0x5555,0x1818,0xFFFF,0xF0F0,0x0F0F,0x0000,0xFFFF,0xF8F8,0xF1F1,0xE3E3,0xC7C7,0x8F8F,0x1F1F,0x3F3F,0x7F7F,0x7F7F,0x3F3F,0x1F1F,0x8F8F,0xC7C7,0xE3E3,0xF1F1,0xF8F8,0xFFFF,0x0000,0x0000,0xFFFF,0xFFFF,0x0F0F,0xF0F0,0xFEFF,0xFDFF,0xFBFF,0xF7FF,0xEFFF,0xDFFF,0xBFFF,0x7FFF,0xFFFE,0xFFFD,0xFFFB,0xFFF7,0xFFEF,0xFFDF,0xFFBF,0xFF7F,0xFF7F,0xFFBF,0xFFDF,0xFFEF,0xFFF7,0xFFFB,0xFFFD,0xFFFE,0x7FFF,0xBFFF,0xDFFF,0xEFFF,0xF7FF,0xFBFF,0xFDFF,0xFEFF,0xFEFF,0xFCFF,0xF8FF,0xF0FF,0xE0FF,0xC0FF,0x80FF,0x00FF,0x00FE,0x00FC,0x00F8,0x00F0,0x00E0,0x00C0,0x0080,0x0000,0x0000,0x0080,0x00C0,0x00E0,0x00F0,0x00F8,0x00FC,0x00FE,0x00FF,0x80FF,0xC0FF,0xE0FF,0xF0FF,0xF8FF,0xFCFF,0xFEFF,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF};voiddelay_ms(INT16Ux){INT8Ut;while(x--)for(t=0;t120;t++);}voidmain(){INT8Ui;while(1){for(i=0;i136;i++){P0=Pattern[i]8;P2=Pattern[i];delay_ms(50);}}}方波发生器用任一IO口做一个周期为20ms的方波发生器#includereg52.h//52系列单片机头文件#defineuintunsignedint//宏定义sbitl1=P1^0;//声明单片机P1口的第一位voiddelay1s();//声明子函数voidmain()//主函数{while(1)//大循环{l1=0;/*点亮第一个发光二极管*/delay1s();//调用延时子函数l1=1;/*关闭第一个发光二极管*/delay1s();//调用延时子函数}}voiddelay1s()//子函数体{uinti,j;for(i=10;i0;i--)for(j=120;j0;j--);}练习各种效果流水灯1.第一个发光管以间隔200ms闪烁2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,一直重复下去。3.8个发光管来回流动,每个管亮100ms。4.用8个发光管演示出8位二进制数累加过程。5.8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。7.间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止