单片机的 汇编 语言

37
单单单单单单单单 单单单单单单单 单单0755-89705289

Upload: dallon

Post on 15-Jan-2016

178 views

Category:

Documents


3 download

DESCRIPTION

单片机的 汇编 语言. 破天单片机培训 电话:0755-89705289. 一、中断的概念. 中断:当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求。. 中断的执行:当 CPU 正在执行某一程序时,若有中断响应,则 CPU 转而执行中断服务程序,当中断服务程序执行完毕后, CPU 自动返回原来的程序继续执行。. 二、中断源. 中断源: 任何引起计算机中断的事件,一般一台机器允许有许多个中断源。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 单片机的 汇编 语言

单片机的汇编语言破天单片机培训

电话: 0755-89705289

Page 2: 单片机的 汇编 语言

一、中断的概念

中断:当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求。

中断的执行:当 CPU 正在执行某一程序时,若有中断响应,则 CPU 转而执行中断服务程序,当中断服务程序执行完毕后, CPU 自动返回原来的程序继续执行。

Page 3: 单片机的 汇编 语言

二、中断源 中断源:任何引起计算机中断的事件 , 一般一台机器允许有许多个中断源。 8051 系列单片机至少有 5 个可能的中断 (8052 有 6 个 , 其它系列成员最多可达 15 个 ) 。下面以 5 个中断源为例。

8051 单片机的五个中断源是: 外部中断请求 0 ,由 INT0(P3.2) 输入; 外部中断请求 1 ,由 INT1(P3.3) 输入; 片内定时器 / 计数器 0 溢出中断请求 ; 片内定时器 / 计数器 1 溢出中断请求; 片内串行口发送 / 接收中断请求。

Page 4: 单片机的 汇编 语言

三、与中断有关的寄存器1 、定时 / 计数器控制寄存器 TCON

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

D7 D6 D5 D4 D3 D2 D1 D0

. IT0 、 IT1 :外部中断 0 、 1 触发方式选择位,由软件设置; 1→ 下降沿触发方式, INT0/INT1 管脚上高到低的负跳变可引起中断; 0→ 电平触发方式, INT0/INT1 管脚上低电平可引起中断。. IE0 、 IE1 :外部中断 0 、 1 请求标志位; 当外部中断 0 、 l 依据触发方式满足条件,产生中断请求时由硬件置位 (IE0/IE1=1) ;当 CPU 响应中断时由硬件清除 (IE0/IE1= 0) 。. TR0 、 TR1 : 启动定时 / 计数器 0 、 1 。. TF0 、 TF1 :定时器 / 计数器 0 、 1(T/C0 、 T/C1) 溢出中断请求标志; 当 T/C0 、 1 计数溢出时由硬件置位 (TF0/TF1=l) ; 当 CPU 响应中断由硬件清除 (TFO/TF1=0) 。

Page 5: 单片机的 汇编 语言

三、与中断有关的寄存器2 、串行口控制寄存器 SCON

TI RI

D7 D6 D5 D4 D3 D2 D1 D0

. RI :串行口接收中断请求标志位; 当串行口接收完一帧数据后请求中断,由硬件置位 (RI=1) RI 必须由软件清“ 0” 。. TI :串行口发送中断请求标志位。 当串行口发送完一帧数据后请求中断,由硬件置位 (TI=1) TI 必须由软件清“ 0” 。

Page 6: 单片机的 汇编 语言

三、与中断有关的寄存器3 、中断允许寄存器 IE

EA ET2 ES ET1 EX1 ET0 EX0

D7 D6 D5 D4 D3 D2 D1 D0

. EX0 、 EX1 :外部中断 0 、 1 的中断允许位; l→ 外部中断 0 、 1 开中断; 0→ 外部中断 0 、 1 关中断。. ET0 、 ET1 :定时器 / 计数器 0 、 1(T/C0 、 T/C1) 溢出中断允许位; 1→T/C0 、 T/Cl 开中断; 0→T/C0 、 T/Cl 关中断。. ES :串行口中断允许位; 1→ 串行口开中断; 0→ 串行口关中断。. ET2 :定时器 / 计数器 2(T/C2) 溢出中断允许位; 1→T/C2 开中断; 0→T/C2 关中断。. EA : CPU 开 / 关中断控制位。 1→CPU 开中断。 0→CPU 关中断。 8051 复位时, IE 被清“ 0” ,此时 CPU 关中断,各中断源的中断也都屏蔽

Page 7: 单片机的 汇编 语言

三、与中断有关的寄存器4 、中断优先级寄存器 IP

PS PT1 PX1 PT0 PX0

D7 D6 D5 D4 D3 D2 D1 D0

. PX0 、 PX1 :外部中断 0 、 1 中断优先级控制位; 1→ 高优先级; 0→ 低优先级。. PT0 、 PT1 :定时器 / 计数器 0 、 1 中断优先级控制位; 1→ 高优先级; 0→ 低优先级。. PS :串行口中断优先级控制位; 1→ 高优先级; 0→ 低优先级 . 8051 复位时, IP 被清“ 0” , 5 个中断源都在同一优先级,其内部优先级的顺序从高到低为: 外部中断 0(IE0) 定时器 / 计数器 0(TF0) 外部中断 1(IE1) 定时器 / 计数器 1(TF1) 串行口中断 (RI+TI)

Page 8: 单片机的 汇编 语言

四、中断响应 8051 的 CPU 在每个机器周期采样各中断源的中断请求标志位,如果没有下述阻止条件,将在下一个机器周期响应被激活了的最高级中断请求: 1.CPU 正在处理同级或更高级的中断; 2. 现行机器周期不是所执行指令的最后一个机器周期; 3. 正在执行的是 RETI 或是访问 IE 或 IP 的指令。

CPU 在中断响应后完成如下的操作 : 1. 硬件清除相应的中断请求标志 ; 2. 执行一条硬件子程序 , 保护断点 , 并转向中断服务程序人口 3. 结束中断时执行 RETI 指令,恢复断点 , 返回主程序。 8051 的 CPU 在响应中断请求时,由硬件自动形成转向与该中断源对应的服务程序入口地址,这种方法为硬件向量中断法。

Page 9: 单片机的 汇编 语言

五、中断服务程序的入口地址

编号 中断源 人口地址 0 外部中断 0 0003H 1 定时器 / 计数器 0 000BH 2 外部中断 1 0013H 3 定时器 / 计数器 1 001BH 4 串行口中断 0023H

各中断服务程序入口地址仅间隔 8 个字节,编译器在这些地址放入无条件转移指令跳转到服务程序的实际地址。

Page 10: 单片机的 汇编 语言

六、中断服务程序的语法规则

org 0000hljmp start

org 0003hljmp int0

org 000bhljmp timer0

org 0013hljmp int1

org 001bhljmp timer1

org 0023hljmp serial

org 0040hstart: ………..

Page 11: 单片机的 汇编 语言

七、中断处理流程

关中断保护现场和断点开中断中断服务关中断恢复现场开中断中断返回 (RETI)

Page 12: 单片机的 汇编 语言

八、中断例子

org 0000hajmp main

org 0003hajmp extr

org 0040hmain: setb it0

setb ex0setb ea

here: ajmp here

extr: mov a,#0fhmov P1,amov a,P1cpl aorl a,#0fhswap amov P1,aretiend

设 P1 口的高 4 位接开关,低 4 位接 LED ,用开关控制相应的 LED 。有一按键接 INT0 ,每按一次,根据开关点亮相应的 LED 。

Page 13: 单片机的 汇编 语言

1 2 3 4

A

B

C

D

4321

D

C

B

ATitle

Number RevisionSize

A4

Date: 10-Feb-2003 Sheet of File: D:\SCHMATIC\Jiaoxue.sch Drawn By:

34

U9B7404

12

U9A7404VCCVCC

R9102

R8102

S10S9

S8S7

L6

L5

L4

VCC

VCC

VCC

R13102

R12102

R11102VCC

C151U

C16

0.1U

C12

0.1U

C130.1U

C110.1UR7

10K

1 6 2 7 3 8 4 9 5

DB2DB9(MALE)

C140.1U

R10

5.1K

S6

VCC

EA/V

P31

X1

19

X2

18

RESET9

RD17WR16

INT012

INT113

T014

T115

P101

P112

P123

P134

P145

P156

P167

P178

P0039

P0138

P02 37

P0336

P04 35

P0534

P0633

P07 32

P2021

P2122

P2223

P23 24

P2425

P2526

P26 27

P2728

PSEN29

ALE/P30

TXD11

RXD10

VCC

40

GND20

U10

C17

20P

C18

20P

Y211.0592M

V+2

C1-3

V-6

TO7

VCC

16G

ND

15C1+1

TI10RI

13

C2+4

RO12

C2-5

RI18R019

U7

MAX202

VCC

VCC

2G

ND

3

WDI6

RES7

MRMR1

8

U8MAX813L

N4

N5

N6

Vin1

GN

D2

Vout3

V2VOLTREG

B2

1234

J24PIN

C10102E3

VCC

E4A0

1

A12

A23

GND4

VCC8

WP7

SCL 6

SDA5

U624C01 VCC

RS232

Page 14: 单片机的 汇编 语言

1 2 3 4 5 6

A

B

C

D

654321

D

C

B

A

Title

Number RevisionSize

B

Date: 10-Feb-2003 Sheet of File: E:\DSPÓ뵥Ƭ»ú\ÏÂÔØ×ÊÁÏ\89C51.Sch Drawn By:

A0

10A

19

A2

8A

37

A4

6A

55

A6

4A

73

A8

25A

924

A10

21A

1123

A12

2A

1326

A14

1

CE

20

OE

22

WE

27

I/O

011

I/O

112

I/O

213

IO/3

15I/

O4

16I/

O5

17I/

O6

18I/

O7

19

GN

D14

Vcc

28

U362256 A

010

A1

9A

28

A3

7A

46

A5

5A

64

A7

3A

825

A9

24A

1021

A11

23A

122

A13

26A

141

CE

20

OE

22

WE

27

I/O

011

I/O

112

I/O

213

IO/3

15I/

O4

16I/

O5

17I/

O6

18I/

O7

19

GN

D14

Vcc

28

U462256

VC

C1

REF-IN10

lsbDB016 DB117

AN-GND9

DB218 DB319

DB420BPLRof

12DB5

21DB622DB7

23 10Vspn13

DB824

DB925 20Vspn

14DB10

26msb-1127

REFout 8STATUS28

CE6

CS3 +Vs

7A0/SC

4R/C5

-Vs11

12/82

DG

15

U2AD574A

EA

/VP

31

X1

19

X2

18

RESET9

RD17

WR16

INT012

INT113

T014 T115

P101

P112

P123

P134

P145

P156

P167

P178

P00 39

P0138

P02 37

P0336

P0435

P0534

P0633

P0732

P20 21

P2122

P22 23

P2324

P2425

P2526

P2627

P27 28

PSEN29

ALE/P 30

TXD11

RXD10

GN

D20

Vcc

40

U1

89C51

A1

B2

C3

E14

E25

E36

Y015

Y1 14

Y213

Y3 12

Y411

Y510

Y69

Y77

Vcc

16

GN

D8

U674HC138

D03

Q02

D14

Q15

D27 Q2 6

D38

Q39

D413 Q4 12

D514

Q515

D617

Q616

D718

Q719

OE1

LE11

Vcc 20

GND10

U5

74HC373

R1

IN13

R2

IN8

T1

IN11

T2

IN10

R1

OU

T12

R2

OU

T9

T1

OU

T14

T2

OU

T7

C1+

1

C1

-3

C2+

4

C2

-5

V-

6V

+2

Vcc

16G

ND

15

U9MAX232

F1

11.0592M

D1LED

D2LED

D3LED

Q1NPN

Q2NPN

Q3NPN

C10

0.1

C?CAPACITOR

C40

0.1

C30

0.1

C50

0.1

C4

0.1

C110

0.1

C3

0.1

C901u

C5

0.1

C60.1

C700.1

C60

0.1

R14 102

R13 102

R12 102

R11 102

R65.1k

R75.1k

R2102

R5102

R3102

R4102

R10

103

12345678

161514131211109

S2SW DIP-8

S1

SW-PB

162738495

J1DB9

C120p

C220p

89

10

U14C

74LS00

1

23

U14A

74LS00

4

56

U14B74LS00

5 6

U13C

74LS04

1 2U13A

74LS04

8 9U13D

74LS04

3 4

U13B

74LS04

1011U13E

74LS04

12

45

6

U15A

74LS21

A02

A13

A24

A35

A46

A57

A68

A79

B018

B1 17

B216

B3 15

B414

B513

B612

B711

E19

DIR1Vcc

20

GND 10

U7

74LS245

D0 34D1

33D232

D331D430

D5 29D6

28D7 27

PA04PA1

3 PA22

PA31 PA4

40PA539PA6

38PA737

PB018

PB119 PB220

PB321PB4

22PB523PB6

24PB725

PC014

PC115 PC216

PC317PC4

13PC512PC6

11 PC710

RD5

WR36A09

A1 8RESET

35CS 6

U8

8255A

Vss1

Vdd2

V03

RS4

R/W5

E6

D07

D18

D29

D310

D411

D512

D613

D714

U12

LCD

A01

A12

A23

GND4

SDA5SCL6

WP7Vcc8

U1124C01

8 Vcc

2

MR1

GN

D RES7

WD6

U10

MAX813

VCC

VCC

R15.1k

R95.1k

R85.1k

Q4NPN

D4LED

VCC

VCC

VCC

VCC

VCC

1 2 3 4 5 6 7 8

16 15 14 13 12 11 10 9

RP15.1k

VCC

VCCVCC VCC

+12

-12

RW1

100

RW2

100VCC

VCC

VCC

VCC

+/-10

+/-5Ä£ÄâÐźÅÊäÈë

+

RS-232

Page 15: 单片机的 汇编 语言

习题试设计满足下列要求的电路图:1 单片机采用 89C51 ,时钟 11.0592MHz ;2 有 4 个指示灯表示状态;3 外接 12 位 A/D芯片 AD574;4 有 4 * 4 的键盘;5 有字符型 LCD(画成插座形式, 12Pin插座,管脚接法见书 P253 );6 有串行接口与计算机连接;7 设置 8 位二进制的地址,地址范围可表示为 0~255 ;8 外接 EEPROM 。

Page 16: 单片机的 汇编 语言

定时器 / 计数器( T/C ) 8051 系列单片机至少有两个 16 位内部定时器 / 计数器,8052 有三个定时器 / 计数器,其中有两个是基本定时器 / 计数器是定时器 / 计数器。它们既可以编程为定时器使用,也可以编程为计数器使用。 若是计数内部晶振驱动时钟,它是定时器;若是计数, 8051 的输入管脚的脉冲信号,它是计数器。 当 T/C工作在定时器时,对振荡源 12分频的脉冲计数,即每个机器周期计数值加 1 ,计数率 =1/12f osc 。例当晶振为12MHz 时,计数率 =1000kHz ,即每 1μs 计数值加 1 。 当 T/C工作在计数器时,计数脉冲来自外部脉冲输入管脚 T0(P3.4) 或 T1(P3.5) ,当 T0 或 T1 脚上负跳变时计数值加1 。识别管脚上的负跳变需两个机器周期,即 24 个振荡周期。所以 T0 或 T1 脚输入的可计数外部脉冲的最高频率为1/24fosc ,当晶振为 12MHZ 时,最高计数率为 500kHz ,高于此频率将计数出错。

Page 17: 单片机的 汇编 语言

一、与 T/C 有关的 SFR

1 、计数寄存器 Th 和 TL

T/C 是 16 位的,计数寄存器由 TH 高 8 位和 TL 低 8 位构成。 在特殊功能寄存器 (SFR) 中, 对应 T/C0 为 TH0 和 TL0 ; 对应 T/C1 为 TH1 和 TL1 。 定时器 / 计数器的初始值通过 TH1/TH0 和 TL1/TL0 设置。 2 、定时器 / 计数器控制寄存器 TCON

前面已介绍。

Page 18: 单片机的 汇编 语言

二、与 T/C 有关的 SFR

3 、 T/C 的方式控制寄存器 TMOD

. C/T :计数器或定时器选择位; 1→ 为计数器; 0→ 为定时器。. GATE :门控信号; 1 → T/C 的启动受到双重控制,即要求 TR0/TR1 和INT0/INT1 同时为高; 0 → T/C 的启动仅受 TR0 或 TR1 控制。

GATE C/T M1 M0 GATE C/T M1 M0

D7 D6 D5 D4 D3 D2 D1 D0

T/C1 T/C0

Page 19: 单片机的 汇编 语言

三、四种工作方式

M1 M0 方式 功 能 0 0 0 13 位定时器 / 计数器, TL 是低 5 位, TH 是高 8 位

0 1 1 16 位定时器 / 计数器1 0 2 常数自动重装的 8 位定时器 / 计数器1 1 3 仅用于 T/C0 ,是两个 8 位定时器 / 计数器

Page 20: 单片机的 汇编 语言

四、 T/C工作方式的说明

1. 方式 0 : 当 TMOD 中 MlM0=00 时, T/C工作在方式 0 ; 方式 0 为 13 位的 T/C ,由 TH 的高 8 位、 TL 的低 5 位的计数值,满计数值 213 ,但启动前可以预置计数初值。 若 T/C 开中断 (ET=1) 且 CPU 开中断 (EA=1) 时,则定时器 / 计数器溢出时, CPU 转向中断服务程序时,且 TF白动清0 。 2. 方式 1 : 当 TMOD 中 MlM0=01 时, T/C工作在方式 1 ; 方式 1 与方式 0基本相同。唯一区别在于计数寄存器的位数是 16 位的,由 TH 和 TL 寄存器各提供 8 位,满计数值为 216 。

Page 21: 单片机的 汇编 语言

四、 T/C工作方式的说明3. 方式 2 : 当 TMOD 中 MlM0=10 时, T/C工作在方式 2 ; 方式 2 是 8 位的可自动重载的 T/C ,满计数值为 28

; 在方式 0 和方式 1 中,当计数满后,若要进行下一次定时 / 计数,须用软件向 TH 和 TL重装预置计数初值; 方式 2 中 TH 和 TL 被当作两个 8 位计数器,计数过程中, TH 寄存 8 位初值并保持不变,由 TL进行 8位计数。计数溢出时,除产生溢出中断请求外,还自动将 TH 中初值重装到 TL,即重装载。4. 方式 3 : 方式 3只适合于 T/C0 。当 T/CO工作在方式 3时, TH0 和 TL0 成为两个独立的 8 位计数器。

Page 22: 单片机的 汇编 语言

五、定时器 / 计数器的初始化

在使用 8051 的定时器 / 计数器前,应对它进行编程初始化,主要是对 TCON 和 TMOD 编程;计算和装载 T/C 的计数初值。一般完成以下几个步骤 : (1)确定 T/C 的工作方式——编程 TMOD 寄存器; (2) 计算 T/C 中的计数初值,并装载到 TH 和 TL ; (3)T/C 在中断方式工作时,须开 CPU 中断和源中断——编程 IE 寄存器; (4) 启动定时器 / 计数器——编程 TCON 中 TR1 或 TR0位。

Page 23: 单片机的 汇编 语言

六、定时器 / 计数器的初值计算

在定时器方式下, T/C 是对机器周期脉冲计数的,若fosc=12MHz ,一个机器周期为 12/fosc=1μs ,则: 方式 0 13 位定时器最大定时间隔 =213 × 1μs=8.192ms ; 方式 1 16 位定时器最大定时间隔 =216 × 1μs=65.536ms ; 方式 2 8 位定时器最大定时间隔 =28×1μs=256μs 。 若使 T/C工作在定时器方式 1 ,要求定时 1ms ,求计数初值。设计数初值为 x ,则有 : (216-x)×1μs=1000μs 或 x=216 一 1000 因此, TH 、 TL 可置 216 –1000=64536 ; 即: TH= FCH ; TL= 18H 。 对一般 fosc 有下列公式(设定时时间为 timeμs ): (216-x)×12/fosc= time μs

Page 24: 单片机的 汇编 语言

例 1 、设单片机的fosc=6MHz ,使用定时器 1以方式 0 产生周期位 500uS的等宽正方波,并在 P1.0 脚上输出,以查询方式完成。

mov tmod,#00hmov th1,#0fchmov tl1,#03hmov ie,#00hsetb tr1

loop:jbc tf1,loop1ajmp loop

loop1:mov th1,#0fchmov tl1,#03hclr tf1cpl P1.0ajmp loopret

Page 25: 单片机的 汇编 语言

例 2 、设单片机的fosc=6MHz ,使用定时器 1以方式 1 产生周期位 500uS的等宽正方波,并在 P1.0 脚上输出,以中断方式完成

mov tmod,#10hmov th1,#0ffhmov tl1,#0a1hsetb easetb et1

loop:setb tr1here:sjmp $

mov th1,#0ffhmov tl1,#0a1hcpl p1.0reti

Page 26: 单片机的 汇编 语言

例 3 、设单片机的 fosc=6MHz ,要求在P1.7 脚上的指示灯亮一秒灭一秒。

time0: mov th0,#mov tl0,#inc r0cjne r0,#10,exitmov a,#00hmov r0,a

exit: reti

org 0000hajmp start

org 000bhajmp time0

org 0100hstart: mov sp,#60h

mov th0,#mov tl0,#setb tf0setb easetb tr0

here: sjmp $

Page 27: 单片机的 汇编 语言

七、定时器与中断的联合应用以 MCS-51 单片机来实现时钟 设使用定时器 / 计数器 0 ,以工作方式 1进行 125mS 的定时,如单片机时钟为 6MHz ,为此计算计数初值 X 为: ( 216-x)*2=125000 计算得 x= 6070, 二进制表示为 1011110110110 ,十六进制表示 17B6H 。 采用中断方式进行溢出次数的累计,计满 8 次即得秒计时。从秒到分和从分到时的计时是通过累加和数值比较实现的。时钟显示及显示缓冲区 时钟时间在六位数码管上进行显示,为此在内部 RAM中要设置显示缓冲区,共 6 个地址单元,设对应地址为: LED5 LED4 LED3 LED2 LED1 LED0 7EH 7DH 7CH 7BH 7AH 79H 显示时从左到右依次存放时、分、秒的数值。

Page 28: 单片机的 汇编 语言

org 0000hstart: ajmp main

org 000bhajmp pit0

org 0100hmain: mov sp,#60h

mov r0,#79hmov r7,#06h

ml1: mov @r0,#00hinc r0djnz r7,ml1mov tmod,#01hmov tl0,#8hmov th0,#17hsetb tr0setb easetb et0mov 30h,#08h

ml0: lcall displaysjmp ml0

pit0: push pswpush accsetb psw.3mov tl0,#b8hmov th0,#17hmov a,30hdec amov 30h,ajnz ret0mov 30h,#08hmov r0,#7ahacall daad1mov a,r2xrl a,#60hjnz ret0acall clr0mov r0,#7chacall daad1mov a,r2xrl a,#60hjnz ret0acall clr0mov a,r2xrl a,#24hjnz ret0acall clr0

ret0: pop accpop pswerti

daad1: mov a,@r0dec r0swap aorl a,@r0add a,#01hda amov r2,aanl a,#0fhmov @r0,amov a,r2inc r0anl a,#0f0hswap amov @r0,aret

clr0: clr amov @r0,adec r0mov @r0,aret

end

Page 29: 单片机的 汇编 语言

串行口

8051 系列单片机有一个标准的串行通信接口,发送数据时由 TXD端口送出,接收数据时由 RXD端口输入。 内置两个缓冲器 SBUF ,一个接受缓冲器,另一个是接收缓冲器,可实行全双工的串行通信。 近距离可直接用 TTL 电平,若与计算机通信,则需要将电平转换成 RS232 电平形式,若需长距离通信可以采用 RS485 电平形式,通信的数据必须通过软件的编写来完成。

Page 30: 单片机的 汇编 语言

一、与串行口有关的 SFR1 、串行口控制寄存器 SCON

SM0 SM1 SM2 REN TB8 RB8 TI RI

D7 D6 D5 D4 D3 D2 D1 D0

. SM0 、 SM1 :串行口工作方式控制位 (见书 P158) 。

. SM2 :多机通信控制位 ( 方式 2 、 3) ; 1→只有接收到第 9 位 (RB8) 为 1 , RI才置位; 0→ 接收到字符 RI就置位。. REN :串行口接收允许位; 1→ 允许串行口接收; 0→禁止串行口接收。. TB8 :方式 2 和方式 3 时,为发送的第 9 位数据,也可以作奇偶 校验位。. RB8 :方式 2 和方式 3 时,为接收到的第 9 位数据;方式 1 时, 为接收到的停止位。. TI :发送中断标志;由硬件置位,必须由软件清 0 。. RI :接收中断标志;由硬件置位,必须由软件清 0 。

Page 31: 单片机的 汇编 语言

一、与串行口有关的 SFR2 、电源控制寄存器 PCON

SMOD

D7 D6 D5 D4 D3 D2 D1 D0

PCON 的第 7 位 SMOD 是与串行口的波特率设置有关的选择位。. SMOD :串行口波特率加倍位。 1→ 方式 1 、 3波特率 = 定时器 1 溢出率 /16 ;方式 2波特率为 fosc/32; 0→ 方式 1 、 3波特率 = 定时器 1 溢出率 /32 ;方式 2波特率为 fosc/64 。

Page 32: 单片机的 汇编 语言

二、串行口的工作方式

1. 方式 0 方式 0 为移位寄存器输入 / 输出方式,串行数据通过RXD 输入 / 输出 , TXD 则用于输出移位时钟脉冲。 方式 0 时,收发的数据为 8 位,低位在前。波特率固定为 fosc/12, 其中 fosc 为单片机外接晶振频率。 发送是以写 SBUF 寄存器的指令开始的, 8 位输出结束时 TI 被置位。 方式 0 接收是在 REN=1 和 RI=0 同时满足时开始的。接收的数据装入 SBUF 中,结束时 RI 被置位。 移位寄存器方式的也可用于两个单片机之间的通信。和通常 9600波特相比, lMHz通信能力对短距离通信很吸引人。

Page 33: 单片机的 汇编 语言

二、串行口的工作方式2. 方式 1 方式 1 是 10 位异步通信方式, 1 位起始位 (0) , 8 位数据位和 1 位停止位 (1) 。其中的起始 位和停止位在发送时是自动插入的。 任何一条以 SBUF 为目的寄存器的指令都启动一次发送 ,发送的条件是 TI=0 ,发送完置 TI 为 1 ; 方式 l 接收的前提条件是 SCON 中的 REN 为 l ,同时下列两个条件都满足,本次接收有效,将其装入 SBUF 和 RB8位。否则放弃接收结果。两个条件是: (1)RI=0;(2)SM2=0 或接收到的停止位为 1 ; 方式 1 的波特率是可变的 ,波特率可由以下计算公式计算得到 : 方式 1波特率 =2SMOD.( 定时器 1 的溢出率 )/32 其中的 SMOD 为 PCON 的最高位。定时器 1 的方式 0,1,2, 都可以使用 , 其溢出率为定时时间的倒数值。

Page 34: 单片机的 汇编 语言

二、串行口的工作方式3. 方式 2 和方式 3 这两种方式都是 11 位异步接收 / 发送方式,它们的操作过程完全一样,所不同的是波特率 : 方式 2波特率 =2SMOD.(fosc/64) ; 方式 3波特率同方式 1( 定时器 l 作波特率发生器 ) 。 方式 2 和方式 3 的发送起始于任何一条“写 SBUF” 指令,当第 9 位数据 (TB8) 输出之后,置位 TI 。 方式 2 和方式 3 的接收前提条件也是 REN 为 1 。在第9 位数据接收到后 , 如果下列条件同时满足 (1)RI=0 ;(2)SM2=0 或接收到的第 9 位为 1 ,则将已接收的数据装入SBUF 和 RB8 ,并置位 RI, 如果条件不满足,则接收无效。

Page 35: 单片机的 汇编 语言

三、串行口的初始化

在使用串行口之前,应对它进行编程初始化,主要是设置产生波特率的定时器 1 、串行口控制和中断控制寄存器。具体步骤如下: (1) 确定定时器 1 的工作方式——编程 TMOD 寄存器; (2) 计算定时器 1 的初值——装载 TH1 、 TL1 ,具体TH1 和 TL1 的值可查表得到; (3) 启动定时器 1—— 编程 TCON 中的 TR1 位,即置TR1 为 1; (4) 确定串行口的控制——编程 SCON ; (5) 串行口在中断方式工作时,须开 CPU 和源中断——编程 IE 寄存器。

Page 36: 单片机的 汇编 语言

四、串行口举例 1 #include 〈 reg51.h>

#define uchar unsigned char#define uint unsigned int

uchar idata trdata[10]= {'M','C','S','-','5','1', 0x0d, 0x0a,0x00};

void main(void){ uchar i; uint j; TMOD=0x20; TL1=0xfd;TH1=0xfd; SCON=0xd8;PCON=0x00; TR1=1; while(1) {i=0; while(trdata[i]!=0x00) {SBUF=trdata[i]; while(TI==0); TI=0; i++; } for (j=0;j<12500;j++); } }

Page 37: 单片机的 汇编 语言

四、串行口举例 2#include 〈 reg51.h>

void main(void 〉{unsigned char a; TMOD=Ox20; TL1=0xfd;TH1=0xfd; SCON=Oxd8;PCON=0x00; TR1=1; while (1) {while (RI==0); RI=0; a=SBUF; SBUF=a; while (TI==O); TI=0; } }