单片机原理西工大.docx

上传人:b****6 文档编号:6123082 上传时间:2023-01-04 格式:DOCX 页数:49 大小:1.31MB
下载 相关 举报
单片机原理西工大.docx_第1页
第1页 / 共49页
单片机原理西工大.docx_第2页
第2页 / 共49页
单片机原理西工大.docx_第3页
第3页 / 共49页
单片机原理西工大.docx_第4页
第4页 / 共49页
单片机原理西工大.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

单片机原理西工大.docx

《单片机原理西工大.docx》由会员分享,可在线阅读,更多相关《单片机原理西工大.docx(49页珍藏版)》请在冰豆网上搜索。

单片机原理西工大.docx

单片机原理西工大

1.引言

计算机的基本结构

主机、输入设备、输出设备、存储设备、通信接口

计算机的抽象结构

CPU、总线、存储器和寄存器,通过寄存器操作周边设备

图1计算机的抽象结构

存储器结构

存储单元(地址、值)

单片机

通常没有键盘和显示器这样的输入输出设备

依靠宿主机进行开发,通过通讯电缆连接

DSP

DSP是DigitalSignalProcessor(数字信号处理器)的缩写,它是专门为支持计算密集型应用而设计的特殊CPU,采用多总线结构,有独立乘法器支持高速乘加运算,通常还支持特殊寻址方式用于FFT(FastFourierTransform)。

普通的CPU采用冯·诺伊曼(VonNeumann)结构,程序和数据是不加区分的,它们都通过唯一的一条总线来访问。

DSP采用哈佛(Harvard)结构,程序和数据各占一个地址空间,有两条总线分别为程序和数据提供通道。

程序空间也可以存放常数

总线结构

数据线、地址线、控制线

程序读总线

地址PAB

数据PRDB

数据读总线

地址DRAB

数据DRDB

数据写总线

地址DWAB

数据DWEB

图2总线结构

流水线操作

取指、译码、取操作数、执行

图3流水线操作

最小系统

电源、晶振

图4最小系统实验板

图5电源部分电原理图

图6晶体振荡器部分电原理图

图7印刷电路板图

CPU的基本组成结构框图

控制单元、16位数据总线、32位累加器ACC、中央算术逻辑单元CALU、乘法单元、辅助寄存器算术单元ARAU

主线:

存储器、输入定标器、中央算术逻辑单元、累加器、输出定标器

乘法器:

经过乘积定标到总线或CALU

图8CPU结构简图

思考题

1.一个存储单元有哪两个属性?

寄存器与存储器有什么不同?

2.由单片机构成的最小系统有哪几部分构成?

3.DSP是哪三个英文词的缩写?

中文意义是什么?

4.哈佛结构计算机与冯·诺伊曼结构计算机有什么差别?

5.微控制器与微处理器有什么不同?

6.TMS320LF24xA系列单片机有几套总线?

分别起什么作用?

总线中数据线和地址线分别有多少条?

最大可以访问多少存储单元?

每个存储单元由多少位组成?

7.什么是操作码?

什么是操作数?

8.实现一条指令的功能要经过哪四个阶段?

CPU为什么要采用流水线结构?

图9CPU结构图

2.寻址方式(上)

数据的存取

计算机中要处理的数据总是存放在存储单元中。

读取Read(也称为载入Load)是将数据从存储单元取到CPU的寄存器中,或是与CPU的寄存器进行运算。

写入Write(也称为保存Store)是将数据从CPU的寄存器放回到存储单元。

三种寻址方式

立即数寻址方式(ImmediateAddressingMode):

操作数是常数,只能读取,存放在指令字中。

直接寻址方式(DirectAddressingMode):

操作数是存储单元,可读写,地址在指令字中。

间接寻址方式(IndirectAddressingMode):

操作数是存储单元,可读写,地址在辅助寄存器中。

负数的表示

16位二进制补码

无符号数0x0000~0xFFFF(0~65535)

有符号正数0x0000~0x7FFF(0~32767)

有符号负数0x8000~0xFFFF(-32768~-1)

负数的三种表示(以-1为例)

原码表示0x8001

反码表示0xFFFE

补码表示0xFFFF

0x0000的反码是0xFFFF,补码=反码+1

符号扩展

二进制补码(以-7为例)

4位表示为0x9,解释为0x9-0x10

8位表示为0xF9,解释为0xF9-0x100

规律:

最高位(符号位)向上扩展

-128

-8

-7

-1

0

1

6

7

8

127

4位

8

9

F

0

1

6

7

8位

80

F8

F9

FF

00

01

06

07

08

7F

数的表示范围、溢出的概念

例:

4位二进制补码的表示范围是-8到7,7加1或-8减1会发生溢出。

而8位二进制补码的表示范围增大到-128到127,此时7加1或-8减1并不会发生溢出。

状态与控制寄存器ST0与ST1,每次全部列出,遇到一个介绍一个,先介绍SXM

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ST0

ARP

OV

OVM

1

INTM

DP

ST1

ARB

CNF

TC

SXM

C

1

1

1

1

XF

1

1

PM

立即数寻址

在立即数寻址方式中,指令字包含指令要操作的常数。

在汇编指令中用#表示后面的数或标识符是一个立即数。

有两种类型的立即数寻址方式:

短立即数寻址和长立即数寻址。

使用短立即数寻址的指令有8位、9位或13位常数作为操作数。

短立即数指令是单指令字,常数嵌入这个字中。

累加器低半字装载指令:

LACL

#k

将8位常数k装入累加器低16位,不管SXM为0或1,不作符号扩展。

例:

LACL

#18

;指令编码B912

LACL

#12h

;不论SXM为0或1,ACC为0x00000012

汇编语句格式:

标号、操作符、操作数、注释

[标号:

]

操作符

操作数

[;注释]

标号可缺省,此时行首必须是空格或制表符。

“;”至行末为注释,注释可缺省。

行首是*则为全行注释。

本例LACL为操作符,表示装载累加器低半部;#18为操作数,表示常数18。

使用长立即数寻址的指令有一个16位的常数作为操作数,需要两个指令字。

常数作为第二个指令字传送。

这个16位值可以用作绝对值常数,也可以作为二进制补码值。

累加器装载指令:

LACC

#lk

将16位常数lk装入累加器。

当SXM为0时,为无符号数,高位补0;当SXM为1时,为有符号数,高位符号扩展。

例:

LACC

#1234h

;指令编码BF821234

;不论SXM为0或1,ACC为0x00001234

LACC

#8765h

;指令编码BF828765

;当SXM为0时,ACC为0x00008765

;当SXM为1时,ACC为0xFFFF8765

直接寻址

直接寻址方式中,数据存储器按128字的块寻址,这些块称为数据页(DataPage)。

全部64K数据存储器由512个数据页构成,编号为0到511。

当前数据页由状态寄存器ST0中的9位数据页指针(DP)的值确定。

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ST0

ARP

OV

OVM

1

INTM

DP

ST1

ARB

CNF

TC

SXM

C

1

1

1

1

XF

1

1

PM

数据页装载指令:

LDP

#addr

将常量addr装载到ST0的DP。

除了数据页,处理器还必须知道这个页中正引用的特定的字,这由7位偏移量确定。

偏移量由IR寄存器中7个最低有效位(LSB)提供,指令寄存器(IR)保存下条要执行指令的操作码。

使用直接寻址的指令结构如图10所示,操作数的16位地址按图11构成。

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

8MSBs

0

dma

图10使用直接寻址的指令结构

图11直接寻址时的地址构成

不必在每条使用直接寻址的指令前设置数据页。

如果在一块代码中所有的指令都访问同样的数据页,可以简单地在块之前装入DP。

可是,如果在一块代码中访问不同的数据页,要确保每当访问新的数据页时改变DP。

累加器低半字装载指令:

LACL

dma

将地址dma对应的存储单元中存放的16位数据装入累加器低16位,高16位补零,不管SXM为0或1,不作符号扩展。

例:

将地址00FFh处的内容装ACC。

LDP

#(0FFh>>7)

;将1装入DP

;地址范围0x0080~0x00FF

LACL

0FFh

;指令编码697F,编译器自动取低7位

使用符号常量,常用于访问存储器映射的I/O地址,如串行通讯口SCI的接收缓存地址0x7057,可以用符号SCIRXBUF表示。

SCIRXBUF

.set

7057h

;SCIReceiverDataBufferRegister

LDP

#(SCIRXBUF>>7)

;将高9位0x0E0装入DP

LACL

SCIRXBUF

;编译器自动取低7位

;读取SCI已接收到的内容

伪指令:

定义符号常量

标识符

.set

用“标识符”表示“值”,本例SCIRXBUF表示7075h,是串行通信口的接收缓存寄存器。

用符号表示常量是一个好的编程习惯,增强程序的可读性,也便于修改常量。

使用变量

.data

;以下内容放入data节

x

.int

1234h

;建立变量x并赋初值0x1234

.text

;以下内容放入text节

LDP

#x

;编译器自动取高9位

LACL

x

;编译器自动取低7位

.end

伪指令:

指定数据节

.data

这条伪指令以下的内容在编译时将放在预先定义的名为“data”的节中,在链接时分配存放数据的地址。

伪指令:

定义16位整型变量并赋初值

标识符

.int

初值

定义名为“标识符”的16位整型变量并赋“初值”。

伪指令:

指定代码节

.text

这条伪指令以下的内容在编译时将放在预先定义的名为“text”的节中,在链接时分配存放代码的地址。

伪指令:

结束汇编源程序

.end

安装与使用CCS

双击Setup按提示操作即可,安装完成后首次使用前需进行配置,将“C2xxSimulator”拖到左栏就可以在PC机上模拟C2xx系列单片机了。

简介:

项目文件、汇编源文件、包含文件、链接命令文件

目标程序、CPU状态

图12配置CCS

思考题

1.有哪三种寻址方式?

2.指令LACL#10与LACL10有什么区别?

各为什么寻址方式?

含义是什么?

3.指令LACC#1234h和LACC#0ABCDh执行后累加器ACC中为何值?

与SXM的状态有关吗?

4.要用直接寻址将地址0x0378处的值装入累加器,DP中应装入什么值?

指令中包含这个地址的哪几位?

3.寻址方式(下)

间接寻址

八个辅助寄存器(AR0-AR7)提供了灵活而强有力的间接寻址,64K数据空间的任何位置都可以用辅助寄存器中的16位地址访问。

状态寄存器ST0的辅助寄存器指针(ARP)位域指定当前辅助寄存器(即当前AR)。

在指令的处理过程中,当前辅助寄存器的内容用作所访问的数据存储器的地址。

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ST0

ARP

OV

OVM

1

INTM

DP

ST1

ARB

CNF

TC

SXM

C

1

1

1

1

XF

1

1

PM

指定当前AR指令:

MAR

*,ARn

指定ARn为当前AR,使ST0中的ARP成为n(0至7),同时ARP的原值保存到ST1的ARB位域。

AR装载指令:

LAR

ARn,#Addr

将常量Addr装载到辅助寄存器ARn。

累加器低半字装载指令:

LACL

*

将当前AR中的地址指向的存储单元的16位数据装入累加器低16位,高16位补零。

例:

将地址00FFh处的变量x的内容装ACL。

LAR

AR2,#0FFh

;将0x00FF装载到AR2

MAR

*,AR2

;指定AR2为当前AR

LACL

*

;指令编码6980

使用变量或符号常量

LAR

AR2,#x

;将x所代表的地址装载到AR2

如果指令需要从数据存储器读,则ARAU将这个地址传给数据读地址总线(DRAB);如果指令需要向数据存储器写,则它将这个地址传给数据写地址总线(DWAB)。

移动指针

在指令使用了数据值之后,当前辅助寄存器的内容可以由ARAU增加或减少,ARAU实现无符号16位算术。

*

无增量或减量

*+

*-

加1/减1

*0+

*0-

按指标量AR0增加/减少

*BR0+

*BR0-

使用反向进位按指标量AR0增加/减少,用于FFT

例:

从前向后访问数组

x

.int

1,2,3,4

;intx[]={1,2,3,4};

;假设x的地址是0x0100

LAR

AR2,#x

;将x的首地址装载到AR2为0x0100

MAR

*,AR2

;指定AR2为当前AR

LACL

*+

;ACC为0x00000001,AR2为0x0101

LACL

*+

;ACC为0x00000002,AR2为0x0102

从后向前访问数组

MAR

*,AR2

;指定AR2为当前AR

LAR

AR2,#(x+4-1)

;将x的末地址装载到AR2为0x0103

LACL

*-

;ACC为0x00000004,AR2为0x0102

LACL

*-

;ACC为0x00000003,AR2为0x0101

跳过数组中一段

MAR

*,AR2

;指定AR2为当前AR

LAR

AR0,#2

LAR

AR2,#x

;将x的首地址装载到AR2为0x0100

LACL

*0+

;ACC为0x00000001,AR2为0x0102

LACL

*0+

;ACC为0x00000003,AR2为0x0104

二进制逆序

MAR

*,AR2

;指定AR2为当前AR

LAR

AR0,#4

LAR

AR2,#0

LACL

*BR0+

;AR2为0x0004

LACL

*BR0+

;AR2为0x0002,向低位进位

LACL

*BR0+

;AR2为0x0006

LACL

*BR0+

;AR2为0x0001

指定下个辅助寄存器

除了更新当前辅助寄存器,一些指令也可以指定下个辅助寄存器,即下个AR。

当指令执行完后,这个寄存器将成为当前辅助寄存器。

允许指定下个辅助寄存器的指令将新值装入ARP。

当ARP装入这个值时,ARP的前一个值装入辅助寄存器指针缓存(ARB)。

任何支持间接寻址操作数的指令都可以修改辅助寄存器(除了以立即数为操作数或无操作数的指令外,所有指令都可以用间接寻址。

支持间接寻址的指令结构如图13所示。

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

8MSBs

1

ARU

N

NAR

缩写

说明

15:

8

8MSBs

指定指令类型,还包含数据移位的信息。

7

指示直接/间接,0/1=直接/间接

6:

4

ARU

辅助寄存器更新码。

确定当前辅助寄存器是否增减、如何增减。

3

指示下个辅助寄存器,0/1=ARP内容不变/变化。

2:

0

NAR

下个辅助寄存器值。

操作数

ARU

说明

*

000

无增减

*-

001

减1

从当前AR值减1。

*+

010

加1

向当前AR值加1。

011

保留

*BR0

100

减指标量,减法采用反向借位

从当前AR值减去AR0的值,减法采用反向进位传递。

*0-

101

减指标量

从当前AR值减去AR0的值。

*0+

110

加指标量

向当前AR值加上AR0的值。

*BR0+

111

加指标量,加法采用反向进位

向当前AR值加上AR0的值,加法采用反向进位传递。

图13使用间接寻址的指令结构

例:

指定下个AR

MAR

*,AR2

LAR

AR2,#100h

LAR

AR3,#200h

LACL

*+,AR3

;AR2为0x0101,AR3仍为0x0200

;ARP为3,ARB为2

快速傅立叶变换

时域信号经过傅立叶变换可以分解为一系列余弦信号,这些余弦信号的幅值和相位就是傅立叶变换的结果,幅值随频率的分布称为频谱。

图14时域信号

图15频域分解

图16信号合成

图17幅频特性

图18相频特性

时间序列

的傅立叶变换为:

其中:

表示顺时钟旋转

圆周的单位矢量。

当N是2的幂次时,例如

时:

0

1

2

3

4

5

6

7

二进制正序

000

001

010

011

100

101

110

111

二进制逆序

000

100

010

110

001

101

011

111

0

4

2

6

1

5

3

7

图19变换基

图20蝶形计算

思考题

1.下列程序执行后,ARP、ARB、AR2和AR3的值分别是什么?

累加器装入的值来自哪个地址?

LARAR2,#100h

LARAR3,#200h

MAR*,AR2

LACL*+,AR3

4.累加器和辅助寄存器操作

小数的表示

定点处理器不仅可以实现整数运算,还可以实现小数运算。

小数点的位置由程序员指定,在输入、输出时相应调整。

表116位无符号定点数

格式

0x0001

0x7FFF

0x8000

0xFFFF

说明

Q0

1*20

(215-1)*20

215*20

(216-1)*20

整数

Q1

1*2-1

(215-1)*2-1

215*2-1

(216-1)*2-1

1位小数

……

Q15

1*2-15

(215-1)*2-15

215*2-15

(216-1)*2-15

15位小数

Q16

1*2-16

(215-1)*2-16

215*2-16

(216-1)*2-16

16位小数

表216位有符号定点数

格式

0x0001

0x7FFF

0x8000

0xFFFF

说明

Q0

1*20

(215-1)*20

-215*20

-1*20

整数

Q1

1*2-1

(215-1)*2-1

-215*2-1

-1*2-1

1位小数

……

Q15

1*2-15

(215-1)*2-15

-215*2-15

-1*2-15

15位小数

在累加器中指定小数点的位置,比如Q16。

各种格式的16位定点数在进入累加器时经过移位可以实现对齐。

装载累加器

累加器、临时寄存器、输入/输出定标器在CPU结构简图中的位置,说明定标器实现移位功能。

介绍桶形移位器(BarrelShifter),与移位链相比较,说明其优越性。

图21不移位、不作符号扩展

图22左移2位、不作符号扩展

图23左移2位、作符号扩展

累加器装载指令:

助记符

操作数

周期

编码

附加字

LACC

dma[,SHFT]

ind[,SHFT[,ARn]]

1

0001SHFTIAAAAAAA

LACC

dma,16

ind,16[,ARn]

1

01101010IAAAAAAA

将存储单元的16位数据左移0至16位装入累加器,按SXM确定是否符号扩展。

助记符

操作数

周期

编码

附加字

LACC

#lk[,SHFT]

2

101111111000SHFT

(lk)

将长立即数左移0至15位装入累加器,按SXM确定是否符号扩展。

助记符

操作数

周期

编码

附加字

LACT

dma

ind[,ARn]

1

01101011IAAAAAAA

将存储单元的16位数据按TREG低4位指定左移0至15位装入累加器,按SXM确定是否符号扩展。

可用于实现装载浮点数。

累加器低半字装载指令:

助记符

操作数

周期

编码

附加字

LACL

dma

ind[,ARn]

1

01101001IAAAAAAA

将存储单元的16位数据装入累加器低16位,高16位补零。

助记符

操作数

周期

编码

附加字

LACL

#k

1

10111001KKKKKKKK

将短立即数装入累加器低16位,高16位补零。

累加器高半字装载并圆整指令:

助记符

操作数

周期

编码

附加字

ZALR

dma

ind[,ARn]

1

01101000IAAAAAAA

将存储单元的16位数据装入累加器高16位,低16位为0x8000。

累加器内容表示Q16定点数,相当于加上0.5。

保存累加器

累加器低半字保存指令:

助记符

操作数

周期

编码

附加字

SACL

dma[,SHF]

ind[,SHF[,ARn]]

1

10010SHFIAAAAAAA

将累加器内容左移0至7位后取其低16位保存到存储单元。

移位时高位丢弃,低位补零。

累加器自身保持不变

累加器高半字保存指令:

助记符

操作数

周期

编码

附加字

SACH

dma[,SHF]

ind[,SHF[,ARn]]

1

10010SHFIAAAAAAA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1