7. CPU是如何由寄存器控制程序运行的?

1. CPU中的特殊功能寄存器

1)PC寄存器(Program Counter Register):又称为指令地址寄存器(Instruction Address Register),用来存放下一条需要执行的计算机指令的内存地址。
2)指令寄存器(Instruction Register):用来存放当前正在执行的指令。
3)状态寄存器(Status Register):用来存放CPU算术或逻辑运算之后CPU状态(即标志位Flag)的寄存器,例如:是否有进位/借位、结果为零。
在这里插入图片描述

其他特殊功能寄存器这里先不再赘述。有些寄存器既可以存放数据、又能存放地址,被称为通用寄存器

2. PC寄存器指定程序执行的顺序

一段程序执行的时候,CPU 会根据 PC 寄存器里的地址,从内存里面把需要执行的指令读取到指令寄存器里面执行。然后根据指令长度自增,开始顺序读取下一条指令。
在这里插入图片描述

可以看到,一个程序的一条条指令,在内存里面是连续保存的,也会一条条顺序加载。

跳转指令(J指令)会修改 PC 寄存器里面的地址值。这样,下一条要执行的指令就不是从内存里面顺序加载的了。事实上,这些跳转指令的存在,是用 if…else 条件语句和 while/for 循环语句的原因。

3. 从if…else来看程序的执行和跳转

// test.c


#include <time.h>
#include <stdlib.h>


int main()
{
  srand(time(NULL));
  int r = rand() % 2;   //产生一个随机数r。r要么为0,要么为1。
  int a = 10;
  if (r == 0)
  {
    a = 1;
  } else {
    a = 2;
  } 

执行程序:

$ gcc -g -c test.c
$ objdump -d -M intel -S test.o 

执行结果

    if (r == 0)
  3b:   83 7d fc 00             cmp    DWORD PTR [rbp-0x4],0x0
  3f:   75 09                   jne    4a <main+0x4a>
    {
        a = 1;
  41:   c7 45 f8 01 00 00 00    mov    DWORD PTR [rbp-0x8],0x1
  48:   eb 07                   jmp    51 <main+0x51>
    }
    else
    {
        a = 2;
  4a:   c7 45 f8 02 00 00 00    mov    DWORD PTR [rbp-0x8],0x2
  51:   b8 00 00 00 00          mov    eax,0x0
    }

可以看到,这里对于 r == 0 的条件判断,被编译成了 cmp 和 jne 这两条指令。

1)cmp 指令比较了前后两个操作数的值。
2)DWORD PTR 代表操作的数据类型是 32 位的整数。
3)[rbp-0x4]则是变量 r 的寄存器地址。

综上,第一个操作数就是从寄存器中拿到的变量 r 的值。第二个操作数 0x0 就是我们设定的常量 0 的 16 进制表示。cmp 指令的比较结果,会存入到状态寄存器中去。

如果比较的结果是 True,也就是 r == 0,就把零标志位(对应的条件码是 ZF,Zero Flag)设置为 1。除了零标志之外,Intel 的 CPU 下还有进位标志CF,Carry Flag)、符号标志SF,Sign Flag)以及溢出标志OF,Overflow Flag),用于不同的判断条件下。

cmp 指令执行完成之后,PC 寄存器会自动自增,开始执行下一条 jne 的指令。

跟着的 jne 指令,是 jump if not equal 的意思,它会查看对应的零标志位。如果 ZF 为 1,说明上面的比较结果是 TRUE,如果是 ZF 是 0,也就是上面的比较结果是 False,会跳转到后面跟着的操作数 4a 的位置。这个 4a,对应这里汇编代码的行号,也就是上面设置的 else 条件里的第一条指令。当跳转发生的时候,PC 寄存器就不再是自增变成下一条指令的地址,而是被直接设置成这里的 4a 这个地址。这个时候,CPU 再把 4a 地址里的指令加载到指令寄存器中来执行。
在这里插入图片描述
跳转到执行地址为 4a 的指令,是一条 mov 指令。该指令的第一个操作数和前面的 cmp 指令一样,是另一个 32 位整型的内存地址,以及 2 的对应的 16 进制数 0x2。mov 指令把 2 设置到对应的内存里去,相当于一个赋值操作。然后,PC 寄存器里的值继续自增,执行下一条 mov 指令。

这条 mov 指令的第一个操作数 eax,代表累加寄存器(简称:累加器),第二个操作数 0x0 则是 16 进制的 0 的表示。这条指令其实没有实际的作用,它的作用是一个占位符。

回过头去看前面的 if 条件,如果满足的话,在赋值的 mov 指令执行完成之后,有一个 jmp 的无条件跳转指令。跳转的地址就是这一行的地址 51。main 函数没有设定返回值,而 mov eax, 0x0 其实就是给 main 函数生成了一个默认的为 0 的返回值到累加器里面。if 条件里面的内容执行完成之后也会跳转到这里,和 else 里的内容结束之后的位置是一样的。

4. 通过if…else和goto来实现循环

如下C语言的for循环程序。

int main() {
    int a = 0;
    for (int i = 0; i < 3; i++)
    {
        a += i;
    } }

对应的Intel汇编代码为:

    for (int i = 0; i <= 2; i++)
   b:   c7 45 f8 00 00 00 00    mov    DWORD PTR [rbp-0x4],0x0
  12:   eb 0a                   jmp    1e 
    {
        a += i;
  14:   8b 45 f8                mov    eax,DWORD PTR [rbp-0x4]
  17:   01 45 fc                add    DWORD PTR [rbp-0x8],eax

  1a:   83 45 f8 01             add    DWORD PTR [rbp-0x4],0x1
  1e:   83 7d f8 02             cmp    DWORD PTR [rbp-0x4],0x2
  22:   7e f0                   jle    14 
  24:   b8 00 00 00 00          mov    eax,0x0
    }

对应的循环是用 1e 这个地址上的 cmp 比较指令,和紧接着的 jle (jump if less or equal,or not greater)条件跳转指令来实现的。指令jle 跳转的地址,在这条指令之前的地址 14。

往前跳转使得条件满足的时候,PC 寄存器会把指令地址设置到之前执行过的指令位置,重新执行之前执行过的指令,直到条件不满足,顺序往下执行 jle 之后的指令,整个循环才结束。
在这里插入图片描述
如果使用一长条打孔卡存储程序的话,就会看到卡片往后移动一段,执行了之后,又反向移动,去重新执行前面的指令。

这里的jle和jmp就像goto命令一样,直接指定了个特定条件下的跳转位置。在C语言这样的高级语言程序开发中,太多的goto命令会使程序可读性很差,不利于维护,所以不要使用。

但在机器指令层面,无论是 if…else…,还是 for/while ,都是用和 goto 相同的跳转到特定指令位置的方式来实现的。

想要在硬件层面实现goto 语句,除了本身需要用来保存下一条指令地址,以及当前正要执行指令的 PC 寄存器指令寄存器外,还需要再增加一个状态寄存器,来保留条件判断的状态。这三个寄存器就可以实现条件判断和循环重复执行代码的功能。

问:
还有switch…case…条件跳转语句,它的汇编程序是怎么样的?


```c
int main()
{
   0: 55 push rbp
   1: 48 89 e5 mov rbp,rsp
   int i = 0;
   4: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
   int a = 0;
   b: c7 45 f8 00 00 00 00 mov DWORD PTR [rbp-0x8],0x0
   switch(i)
  12: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]
  15: 83 f8 01 cmp eax,0x1
  18: 74 07 je 21 <main+0x21>
  1a: 83 f8 02 cmp eax,0x2
  1d: 74 0b je 2a <main+0x2a>
  1f: eb 12 jmp 33 <main+0x33>
   {
      case 1:
        a = 1;
  21: c7 45 f8 01 00 00 00 mov DWORD PTR [rbp-0x8],0x1
        break;
  28: eb 11 jmp 3b <main+0x3b>
      case 2:
        a = 2;
  2a: c7 45 f8 02 00 00 00 mov DWORD PTR [rbp-0x8],0x2
        break;
  31: eb 08 jmp 3b <main+0x3b>
      default:
        a = 3;
  33: c7 45 f8 03 00 00 00 mov DWORD PTR [rbp-0x8],0x3
        break;
  3a: 90 nop
   }

   return 1;
  3b: b8 01 00 00 00 mov eax,0x1
}
  40: 5d pop rbp
  41: c3 ret

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
台模型计算机的设计 一、教学目的、任务与实验设备 1. 教学目的 (1)融会贯通本课程各章节的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识,加深计算机工作中“时间—空间”概念的理解,从而清晰地建立计算机的整机概念。 (2)学习设计和调试计算机的基本步骤和方法,提高使用软件仿真工具和集成电路的基本技能。 (3)培养科学研究的独立工作能力,取得工程设计与组装调试的实践和经验。 2.设计与调试任务 (1)按给定的数据格式和指令系统,在所提供的器件范围内,设计一台微程序控制的模型计算机。 (2)根据设计图纸,在MAX+PLUS 平台上进行仿真,并下载到EL教学实验箱上进行调试成功。 (3)在调试成功的基础上,整理出设计图纸和其他文件。包括:①总框图(数据通路图);②微程序控制器逻辑图;②微程序流程图;④微程序代码表;⑤元件排列图(或VHD程序清单);⑥设计说明书;⑦调试小结。 2. 实验设备 (1) PC机一台 (2) EL教学实验箱 (3) MAX+PLUS Ⅱ配套软件 二、数据格式和指令系统 本模型机是一个8位定点二进制计算机,具有四个通用寄存器:R0~R3,能执行11条指令,主存容量为256KB。 1. 数据格式 数据按规定采用定点补码表示法,字长为8位,其中最高位(第7位)为符号位,小数点位置定在符号位后面,其格式如下: 数值相对于十进制数的表示范围为: -1≤X≤1―2―7 2. 指令格式及功能 由于本模型机机器字只有8位二进制长度,故使用单字长指令和双字长指令。 ⑴ LDR Ri,D 格式 7 4 3 2 1 0 0 0 0 0 Ri 不 用 D 功能: Ri←M(D) (2) STR Ri,D 格式 7 4 3 2 1 0 0 0 0 1 Ri 不 用 D 功能: M(D)←(Ri) (3) ADD Ri,Rj 格式 7 4 3 2 1 0 0 0 1 0 Ri Rj 功能: Ri ←(Ri)+ (Rj) (4) SUB Ri,Rj 格式 7 4 3 2 1 0 0 0 1 1 Ri Rj 功能: Ri ←(Ri)- (Rj) (5) AND Ri,Rj 格式 7 4 3 2 1 0 0 1 0 0 Ri Rj 功能: Ri ←(Ri)∧ (Rj) (6) OR Ri,Rj 格式 7 4 3 2 1 0 0 1 0 1 Ri Rj 功能: Ri ←(Ri)∨ (Rj) (7) MUL Ri,Rj 格式 7 4 3 2 1 0 0 1 1 0 Ri Rj 功能: Ri ←(Ri)× (Rj) (8) 转移指令 格式 7 4 3 2 1 0 0 1 1 1 条件 不 用 D 功能: 条件码 00 无条件转移 PC ← D 01 有进位转移 PC ← D 10 结果为0转移 PC ← D 11 结果为负转移 PC ← D ⑼ IN Ri,M j 格式 7 4 3 2 1 0 1 0 0 0 Ri Mj 其中M j为设备地址,可以指定四种外围设备,当M j=01时,选中实验箱的二进制代码开关。功能: Ri ← (M j) ⑽ OUT Ri,M j 格式 7 4 3 2 1 0 1 0 0 0 Ri Mj 当M j=10时,选中实验箱的显示灯。功能: (M j)← Ri ⑾ HALT(停机指令) 格式 7 4 3 2 1 0 1 0 0 0 不用 不用 功能: 用于实现停机。 三、总体设计 总体设计的主要任务是 (1) 选定CPU中所使用的产要器件; (2) 根据指令系统、选用的器件和设计指标,设计指令流的数据通路; (3) 根据指令系统、选用的器件和设计指标,设计数据流的数据通路。 计算机的工作过程,实质上是不同的数据流在控制信号作用下在限定的数据通路中进行传送。数据通路不同,指令所经过的操作过程也不同,机器的结构也就不—样,因此数据通路的设计是至关重要的。所谓数据通路的设计,也就是确定机器各逻辑部件相对位置的总框图。 数据远路的设计,目前还没有非常标准的方法。主要是依据设计者的经验,并参考现有机器的三种典型形式(单总线、双总线或三总线结构),根据指令系统的要求,可采用试探方法来完成。其主要步骤如下: (1) 对指令系统中的各条指令进行分析,得出所需要的指令周期与操作序列,以便决定各器件的类型和数量。 (2) 构成一个总框图草图,进行各逻辑部件之间的互相连接,即初步确定数据通路,使得由指令系统所包涵的数据通路都能实现,并满足技术指标的要求。 (3) 检验全部指令周期的操作序列,确定所需要的控制点和控制信号。 (4) 检查所设计的数据通路,尽可能降低成本,简化线路。 以上过程可以反复进行,以便得到一个较好的方案。 图1给出了一个没有考虑乘法除法指令操作的总框图参考方案,注意,在此方案确定之后,应该检查所选用的各个器件是否满足数据通路的要求。实际上,数据通路的设计与器件的选择应同时进行而不能分离地工作。其次,接入总线的器件都要有三态输出,以便与总线连接。另外,在信息传送过程中应当注意器件原码和反码输出的配合关系。 图1所示的方案采用单总线结构,使用的许多器件都是三态输出,这种方案便于总线的连接和扩展,但缺点是指令和数据的传送都要经过总线,因此对总线的使用权就要分配得当。另外,执行算术逻辑指令时,先将第一个操作数由通用寄存器Ri送至缓冲寄存器DR1,然后再由通用寄存器Rj取第二个操作数送至缓冲寄存器DR2,之后送往ALU进行运算。显然,执行—条算术逻辑指令的时间相应要长一些。 图1 模型机数据通路框图 四、微程序控制器 数据通路框图—旦确定,指令流与数据流的通路也就随之最后确定,因而运算器和控制器的大部分结构也就确定下来了。 图1中各功能器件上还标注了控制点及其控制信号.这些控制信号就是微程序控制器进行设计的依据。 1.微指令格式 微指令格式建议采用水平型微指令,微命令编码采用直接表示法和分段直接译码法相结合的混合表示法,以缩短微指令长度。后继地址采用断定方式。微指令格式如下: 控制字段 判别字段 下址字段 同学们应根据本模型的具体情况来确定各字段的长度。 2. 微程序控制器 根据微指令和微程序的长度,确定控制存储器需选用几片EPROM(2716)用位扩展方式组成。 3.微程序设计 将机器的全部指令系统采用微指令序列实现的过程,叫做微程序设计。一条机器指令对应一个微程序,11条机器指令应当对应11个微程序。 微指令格式确定后,微程序的横向设计在于正确地选择数据通路,纵向设计在于确定后继微指令地址.事实上,微程序设计的关键在于纵向设计,即如何确定下一条微指令的地址。通常的做法是先确定微程序分支处的微地址,因为微程序分支处需要进行判别测试。这些微地址确定以后,就可以在一个“微地址表”中把相应的微地址单元填进去,以免后面的设计中重复使用而未发现,以致造成设计错误。 五、输入输出 输入输出是人机联系的重要手段,输入可采用开关、键盘等方式,输出可采用字符显示或打印输出等方式。考虑到成本与设备因素,本模型机采用最简单的二进制开关输入和发光二极管显示的方法,换句话说,本模型机中只使用两种“外部设备”:一种是二进制代码开关,它作为输入设备;另一种是发光二极管,它作为输出设备。 本设计为了节省器件,输入输出时可以不设置专门的数据缓冲寄存器。例如输入时,二进制开关数据直接经过三态门送到总线上,只要开关状态不变,输入的信息也就不变。输出时,将输出数据送到数据总线BUS上,驱动发光二极管进行显示。 如果采用正规的输入输出方法,可采用相应的器件构成接口电路。 六、组装与调试 1. 元器件的布局与连接 由图1看出,数据通路一旦确定之后,在调试过程中将会很少有变化。因此从组装和调试的角度来看,模型机总框图可划分为如下三个相对独立的功能模块: (1)运算器、存储器和系统总线 (2)时序产生器 (3)微程序控制器 本模型机所使用的器件较多,布线的工作量相当大,希望同学们认真、细致地工作。 元器件布局的一般原则是尽心能地按功能电路相对集中,这样做的好处是各器件之间的连线较短,同时也便于组装和调试. 为了安装和调试检查方便,集成电路应当以相同方向排列。通常总是把集成电路片的定位缺口向左,此时它的电源脚在左上角,接地脚在右下角。这种排列有利于设置电源线与地线。规整的布线不仅对调试维修带来方便,也可以保证线路可靠地工作,任何马马虎虎的接线将会给调试带来难以想象的后果,因此在布线前必须对布线质量给予高度重视。 2. 分调试 按功能模块进行分调是实现总调的前提和基础,因为只有各功能模块工作正常后,才能保证全机的正确运行。为此必须—步一个脚印、精心做好分调试,切不可赶急图快,以免在未做好分调的情况下进入总调,而最后又不得不返回头来重新分调。分调的重点放在时序产生器和微程序控制器上。 3. 总调 当各模块分调正常后,可将控制器发出的控制信号线接到相应的功能部件中去,转入全机总调试。 总调的第一步,事实上是检查全部微程序流程图。方法是用单步方式读出并执行微指令。进行的顺序是:先执行控制台指令的微程序流程图,然后执行机器指令的微程序流程图。当全部微程序流程图检查完毕后,如果存储器和运算器功能执行正确,就算总调第一步完成。 第二步是在内存中装入包括有全部指令系统的一段程序和有关数据,进一步可采用单指令方式或连续方式执行,以验证机器执行指令的正确性。 第三步是编写一段表演程序,令机器运行。 第四步是运行指导教师给出的验收程序。如果通过,就算大功告成。
基于S7-200PLC的自动洗车机控制系统设计 目 录 摘 要 1 第一章 自动洗车机的介绍 2 第二章 PLC概述 3 2.1 PLC简介 3 2.2 PLC的特点 3 2.3 PLC的功能 3 2.4 PLC的结构与工作原理 4 2.5 PLC的分类 4 第三章 方案设计 5 3.1 设计任务与要求 5 3.2 编程元件地址分配 6 3.3 外部引脚分布 7 3.4 控制程序流程图 8 3.5 控制程序设计思路 13 3.6 系统控制程序 13 第四章 系统调试及结果分析 24 设计心得 31 参考文献 31 摘 要 随着我国汽车保有量的迅速提高,汽车清洗行业迎来了一个重要的发展机遇,自助洗 车机作为洗车工作必不可少的设备,其清洗效果,清洗速度,清洗成本以及对节水和环 境保护的要求,成为其开发和生产必须要考虑的内容。 本文主要通过对自助洗车机功能要求和运行分析,确定了自助洗车机的总体设计方案 ,并主要进行了自助洗车机的驱动和控制系统的设计,针对自助洗车机的特点,采用自助 投币,喷水,洗刷,喷洒清洗剂和风干等过程,应用了可编程控制技术对自助洗车机PL C控制系统进行了硬件设计和软件编程。PLC采用梯形图编程语言对其运行过程实行监控 ,最终实现了自助洗车机的传动和控制要求。 关键词:自助洗车机、控制、软件编程、可编程控制器 自动洗车机的介绍 当今的社会汽车行业发展迅猛,汽车维修保养行业竞争更是愈演愈烈,洗车机由此得 以广泛应用。自助洗车机分为龙门往复式和隧道式两种机型,通过对毛刷,水泵,机体 行走机构和风机等部件的驱动控制,全自动完成对车辆的刷洗和风干。龙门往复式洗一 辆车仅耗时1.5min~4min,隧道式满负荷运行时每辆车仅耗时1.5min左右,避免了手工洗 车用水的随意性。洗车机配备专用的水处理设备后,可对洗车污水进行回收净化循环利 用,可以节约水资源,是一个很有发展前景的符合现代化建设需要的机电一体化产品。 PLC可靠性高,编程简单且易维护,用作自助洗车机控制系统的核心,更能体现它的这些 完美品质。 以下是自助洗车机的优点: (1)使用自助洗车机效率高,能大大减少劳动力、降低劳动强度,节省成本。 (2)一般使用新科技研发的自助洗车机清洗与人员手洗比起来更容易吸引客户,在 提高整体形象的同时,又能大幅度提高的经济收入。 (3)自助洗车机完全可以采用循环水设备,水用量在原有上可减少1/3,更可有效的 合理利用水资源,节能环保。 PLC概述 2.1 PLC简介 PLC(Programmable Logic Controller)是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。采用 可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算 术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或 生产过程。PLC及其有关的外围设备都应该按易于与工业控制系统形成一个整体,易于扩 展其功能的原则而设计。具有可靠性高,抗干扰能力强;配套齐全,功能完善,适用性 强;易学易用,深受工程技术人员欢迎;系统的设计、建造工作量小,维护方便,容易 改造; 体积小,重量轻,能耗低等特点。广泛应用于钢铁、石油、化工、电力、建材、机械制 造、汽车、轻纺、交通运输、环保及文化娱乐等各个行业。 2.2 PLC的特点 PLC有如下特点: (一) 高可靠性 (二)丰富的I/O 接口模块 (三) 采用模块化结构 (四) 编程简单易学 (五) 安装简单维修方便 2.3 PLC的功能 现在的PLC一般具有如下主要功能: (1)开关量逻辑控制功能 (2)定时/计数控制功能 (3)数据处理功能 (4)监控、故障诊断功能 (5)步进控制功能 (6)A/D、D/A转换功能 (7)停电记忆功能 (8)远程I/O功能 (9)通信连网功能 (10)扩展功能 2.4 PLC的结构与工作原理 PLC的基本组成为四部分:中央处理器(CPU)\存储器、输入/输出(I/O)模块和电 源。 CPU是PLC的神经中枢,是系统的运算、控制中心。它按照系统程序所赋予的功能,完 成以下任务: (1)接收并存储用户程序和数据; (2)用扫描的方式接收现场输入设备的状态和数据; (3)诊断电源、PLC内部电路工作状态和编程过程中得语法错误; (4)完成用户程序中规定的逻辑运算和算术运算任务; (5)更新有关标志位的状态和输出状态寄存器的内容,实现输出控制、制表打印或 数据通信等功能。 存储器是PLC存放系统程序、用户程序和运行数据的单元。它包括随机存取存储器( RAM)和只读存储器(ROM)。 I/O模块是CPU与现场I/O设备或其他外部设备的桥梁。 PLC配有开关式稳压电源模块,用来给PLC的内部电路供电 2.5 PLC的分类 世界上PLC产品可按
基于89C51的交通灯控制系统设计 目 录 摘 要 1 1.设计任务与要求 1 2.系统硬件设计 2 3.系统软件设计 5 4. Proteus软件仿真 6 5.设计心得 7 6.参考文献 7 附录 8 交通灯控制系统设计 摘 要 自从1858年英国人发明了原始的机械扳手交通灯之后,随后的一百多年里,交通灯改 变了交通路况,也在人们日常生活中占据了重要地位,随着人们社会活动日益增加,经 济发展,汽车数量急剧增加,城市道路日渐拥挤,交通灯更加显示出了它的功能,使得 交通得到有效管制,对于交通疏导,提高道路导通能力,减少交通事故有显著的效果。 近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人 民的生活当中。本模拟交通灯系统利用单片机AT89C51作为核心元件,实现了通过信号灯 对路面状况的智能控制。从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理 、急车强通等问题。系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便 等优点,有广泛的应用前景。 本模拟系统由单片机硬/软件系统,两位8段数码管和LED灯显示系统等组成,较好的 模拟了交通路面的控制。 关键词:交通灯 单片机 数码管 LED灯 1.设计任务与要求 东西、南北两干道交于十字路口,各干道有一组红、绿、黄三个指示灯,指挥车辆和 行人安全通行。东西方向为主干道,通行时间为40秒;南北方向为支干道,通行时间为 30秒。通行时间最后3秒,绿灯灭,黄灯闪烁,黄灯闪烁完毕变更通行车道。通行时间由 数字显示器显示,黄灯3秒闪烁不单另计时。 2.系统硬件设计 根据上面的功能要求,硬件系统主要有单片机模块、指示灯模块和倒计时显示模块。 各模块选择如下: (1)单片机模块 主控芯片采用AT89C51单片机,其管脚图如图1所示。 图1 AT89C51引脚图 AT89C51是AT89C5X系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解 。AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器 、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大 总线。 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二 进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制 输入输出功能等操作。 AT89C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址 的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据 ,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义 的字型表。 AT89C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 AT89C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序 转向。 AT89C51共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。 AT89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口 既可以用作异步通信收发器,也可以当同步移位器使用。 AT89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中 断,可满足不同的控制要求,并具有2级的优先级别选择。 AT89C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但 AT89C51单片机需外置振荡电容。 本设计中,使单片机运行在最小系统。 时钟电路由两个20nF的微调电容和一个晶振组成。AT89C51内部有一个用于构成振荡 器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引 脚接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器。本系统采用12Hz的振荡 器,机器周期为1us。复位操作有上电自动复位、按键电平复位和外部脉冲复位三种方式 。本设计采用按键电平复位。按键电平复位是通过复位端经电阻与电源接通实现,如下 图2所示。 图2 AT89C51最小系统 (2)指示灯模块 设计电路中每个路口的控制信号灯应有三个,即红灯、黄灯、绿灯各一个。因此,本 电路的设计中应用到红灯、黄灯、绿灯个四个。同一方向的两个路口的同一颜色指示灯 是同时亮灭,为简化电路,可让这两个灯接同一引脚。这样可用P1口控制所有的指示灯 。 为简化设计,信号灯不采用当个的发光二极管,而采用现用的交通灯组件。该组件及 其与单片机引脚的接法如下: " "东西方向 "南北方向 " "指示灯"红灯"绿灯"黄灯"红灯"绿灯"黄灯" "引脚 "P1.3"P1.4"P1.5"P0.0"P1.1"P1.2" 图3 指示灯及其接线引脚 (3)倒计时显示模块 由于黄灯3秒闪
"三、实验效果分析(包括仪器设备等使用效果) " " "一、实验效果分析 " " "1、在进行实验时要严格按照实验步骤进行实验,否则试验程序出错则 " " "实验效果会发生偏差。 " " "2、由于本实验属于硬件实验的范畴,所以实验起初时要先设定实验属 " " "于硬件实验,而不是直接进行。 " " "3、经过一系列的调制修改,实验达到了要求的效果,实验成功。 " "教 " " " " " "师 " " " " " "评 " " " " " "语 " " " "指导老师 年 月 日 " 江西师范大学物理与通信电子学院 教学实验报告 通信工程 专业 2013年 11月 26日 "实验名称 "GPIO控制实验 "指导老师 " " "姓 名 " "年级 "11级 "学号 " "成绩 " " "预习部分 " "1、实验目的 " "2、实验基本原理 " "3、主要仪器设备(含必要的元器件、工具) " " "实验目的: " " "1、了解GPIO片上外设 2、掌握延时程序应用 " " "3、用GPIO口实现LED指示灯控制。 " " "二、实验基本原理: " " "通用目的输入输出片内外设提供了专用的通用目的引脚,可以配置位输入" " "或输出。当配置为一个输出时,用户可以写一个内部寄存器控制输出引" " "脚上驱动的状态。当配置为输入引脚时,用户可以通过内部寄存器的状态" " "检测到输入的状态。另外,GPIO片内外设可以用不同的中断/事件产生CPU" " "中断和EDMA事件。一旦在GPIO使能寄存器被使能,GPIO引脚可以用作通用" " "目的输入/输出。用户可以使用GPIO方向寄存器独立配置每条GPIO引脚为 " " "输入或输出。当配置为输出(GPXDIR位=1),GPIO " " "值寄存器(GPVAL)的GPXVAL位的值就被送到相应的GPn引脚。当配置为输" " "入(GPXDIR位=0)时,输入状态可以从相应的GPXVAL读取TMS320VC5502有" " "1-位通用输出引脚XF和8-位通用I/O引脚GPIO[7:0],其中GPIO3、GPIO5与" " "McBSP2复用引脚。SEED-DEC5502模板上这些引脚的使用情况如下: " " "XF 用于点亮LED指示灯D1。XF = 1,点亮;XF = 0,熄灭。 " " "GPIO[2:0]:经电平转换后连至外设扩展总线的备用引脚。 " " "GPIO3:与McBSP2的CLKX2复用引脚,当配置为GPIO3时,用作COM1的" " "。 " " "GPIO4:经电平转换后连至外设扩展总线的备用引脚。 " " "GPIO5:与McBSP2的FSX2复用引脚,当配置为GPIO5时,用作COM1的 " " "。 " " "GPIO6:经电平转换后连至外设扩展总线的备用引脚。 " " "GPIO7:用于点亮LED指示灯D5。XF = 1,点亮;XF = 0,熄灭。 " " "通过本实验,要求掌握GPIO口的应用;熟悉延时程序的应用。 " " "1、5502_GPIO.c:这是实验的主程序包含系统初始化,GPIO引脚点亮程序" " "等; " " "2、vectors.s55: 包含5502的中断向量表; " " "3、SEED_DEC5502.cmd: 声明了系统的存储器配置与程序各段的连接关系 " " "。 " " "三、主要仪器设备 计算机、ccs软件 " "实验操作部分 " "1、实验数据、表格及数据处理 " "2、实验操作过程(可用图表示) " "3、结论 " " "实验操作过程 " " "打开CCS,进入CCS的操作环境。 " " "装入DEC5502_GPIO.pjt工程文件, 添加SEED_DEC5502.gel文件。 " " "装载程序DEC5502_GPIO.out,进行调试。 " " "在5502_LED.c程序的第69行"delay();"处,第72行"delay();"处,第75" " "行"delay();" " " "处,第78行"delay();"处设置断点。 " " " " " "运行程序,程序会停在第一个断点处,关闭指示灯D1; " " "继续运行程序,程序每次都会停在第二个断点处,点亮指示灯D1; " " "继续运行程序,程序每次都会停在第三个断点处,点亮指示灯D5; " " "继续运行程序,程序每次都会停在第四个断点处,关闭指示灯D5; " " "也可直接执行程序,观察指示灯D1,D5的闪烁情况。 " " "实验截图 " " " " ----------------------- GPIO控制实验实验报告全文共3页,当前为第1页。 GPIO控制实验实验报告全文共3页,当前为第2页。 GPIO控制实验实验报告全文共3页,当前为第3页

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶老师讲大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值