在实时控制系统中,选择微控制器指标最重要的是计算速度问题。 由于指令周期是反映计算速度的重要指标,本文就三种最具代表性的微控制器(AT89S51单片机、ARM7TDMI核的LPC2114型单片机和TMS320F2812 )的指令周期进行了讨论为了能够观察指令周期,在数字输出端口上设置3种控制器的GPIO端口,在循环中不断进行设定和清除,通过观察GPIO端口的波形变化获得循环整体的周期。 为了使整个循环的周期与具体各指令的指令周期相对应,从c语言源程序中得到汇编语言指令,计算各汇编语言的指令周期。
1 AT89S51工作机理和指令周期的测试
AT89S51单片机时钟采用内部方式,时钟发生器对振荡脉冲进行2分频。 时钟周期是振荡周期的2倍(时钟周期=振荡周期P1振荡周期P2 ),一个机器周期包含6个时钟,因此一个机器周期包含12个石英振动的振荡周期。 假设石英振动的振动频率为11.059(2MHz ),则单片机的机械周期为12/11.059 )2=1.085 ) 1s。 51系列单片机指令周期通常包括1~4个机械周期,大多数指令为单周期指令,有2周期和4周期指令。
为了观察指令周期,对单片机P1端口的最低位进行循环设置操作和清除操作。 源程序包括:
#包含主() )。
wile(1) {
P1=0x01;
P1=0x00;
}
}
用KEIL uVISION2编译、链接,生成可执行文件。 调用此集成环境的Debug可以获得上述源程序混合模式的反汇编代码。
2:main ()
3: {
4:while(1) )。
5:{
6:P1=0x01;
0x000f759001movp1(0x90 )、#0x01
7:P1=0x00;
0x0012 E4CLRA
0x0013f590movp1(0x90 ),a
8:}
0x001580edsjmpmain(c:0003 )。
斜体代码是c源程序,真实代码是对应斜体c源程序的汇编语言代码。 每行汇编代码的第一列是该代码在存储器中的位置,第二列是机器码,然后是编译、链接的汇编语言代码。 所有指令共占用6个机器周期,其中“movp1(0x90 )、#0x01 )”占用2个机器周期,“CLR A”和“movp1 )0x90 )、a”分别占用1个机器周期