嵌入式原理

嵌入式原理

振荡周期、状态周期、机器周期、指令周期的关系

什么是嵌入式

关键字: 受限
受限的设备 资源受限 成本受限 性能受限

嵌入式系统有什么

CPU

运算器,控制器

内存

寄存器

1.累加器 A

也叫 ACC。用作累加(加减乘除都可以变化为加法)

2.寄存器 B

作为执行乘法和除法操作而设置的

3.特殊寄存器(如 P1.0,p0.1 等)
4.PSW(*)
  • CY(PSW.7):进位标志位
  • AC(PSW.6):辅助进位标志位,当低四位向高四位进位或借位时,AC 置为 1
  • F0 (PSW.5): 标志位
  • RS1、RS0:用于选择工作寄存区
  • OV(PSW.2) : 溢出标志位,溢出则置 0
  • PSW.1 位:该位是保留位
  • P(PSW.0):奇偶标志位:奇偶标志位对串行口通讯中的数据传输有重要的意义,常用奇偶检验的方法来检验数据传输的可靠性

程序状态寄存器 PSW 的格式

注意:(ODO).5 =>D5 考试中遇到要能分辨

D7<—————————————————–D0

D7 D6 D5 D4 D3 D2 D1 D0
CY AC F0 RS1 RS0 OV -—— P

工作寄存区选择控制位 1 和位 0 的定义

RS1 RS0 工作寄存区
0 0 0
0 1 1
1 0 2
1 1 3
5.程序存储器

用于存储下一条指令地址和中断地址

IO

  • P0口是三态双向口,称地址/数据总线口。

    P0口用以输出外部存储器的低 8 位地址。

    由于数据和地址是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存信号用ALE。

    P0用于读/写外部存储器的数据(Data)。

    当不需要读写外部存储器时,P0 口可用作普通的 I/O 输出端口,此时,需要上拉电阻

    P0口可驱动 8 个 LSTTL 负载

  • P1 口有内部上拉单元,每根 I/O 线路可独立的用作输入或输出。用作输入时,端口的位锁存器必须为 1,以关闭输出驱动 FET。这时 P1 口由内部提拉元件拉为高电平,但可以由外部电源拉为低电平。

  • P2口在系统扩展时作高 8 位地址线。

    如果没有系统扩展,例如使用8051/8751/8951 单片机不扩展外部存储器时,P2 口也可以作为用户 I/O 口线使用。

    P2口是准双向口。

    P2口可驱动 4 个标准 LSTTL 负载。

  • P3口可驱动 4 个标准 LSTTL 负载。P3 口在以下的情况下作为第二功能使用:串行通信使用,外部中断使用,定时器/计数器使用,扩展外部 RAM 时使用控制信号。除上述情况外,则可以当作 I/O 引脚用

单片机的引脚

8051 只有四个口

P0,P1,P2,P3

P0 是三态口!!!

P0、P1、P2、P3 都是双向口:既可以配置为输入也可以配置为输出

8051 引脚对应功能

引 脚 第二功能
P1.0 T2(定时器/计数器 2 外部输入)
P1.1 T2EX(定时器/计数器 2 俘获/重装触发器)
P1.5 MOSI(ISP Flash 串行编程时指令输入)
P1.6 MISO(ISP Flash 串行编程时数据输出)
P1.7 SCK(ISP Flash 串行编程时外部时钟信号)
P3.0 RXD(串行输入端口)
P3.1 TXD(串行输出端口)
P3.2 (外部中断 0)
P3.3 (外部中断 1)
P3.4 T0(定时器/计数器 0 的外部输入)
P3.5 T1(定时器/计数器 1 的外部输入)
P3.6 (外部数据存储器写选通)
P3.7 (外部数据存储器读选通)

P1.0 是一个地址为 90h

P1.1 为 91h…以此类推

高电位/低电位:大概 4.5v 以上为高电位,4.5v 一下为低电位、中间为悬空态,如果想要解决悬空态要接上拉电阻和下拉电阻

  • 给一个简答题或程序题解读程序在干什么:首先说明是怎么连接的线(不要漏这句话),然后说明这个按钮或者灯实现了什么功能

  • VCC: PIN 40—-电源正端, 为+5V。

  • VSS: PIN 20 —-电源地端。

  • RESET: PIN9—-复位引脚。当晶体振荡器运行时,只要在这个引脚出现两个机器周期的高电平, 就可以使单片机复位 。PIN9 引脚内部有下拉电阻,用户只要在 VCC 和该引脚之间接电容,就可实现上电复位。

指令系统

伪指令

.HEX 文件不支持伪指令

1.ORG:总是会出现在每段源程序或者数据块的开始,表示程序的起始地址

2.DB:定义字节

3.DW:定义字

实例:

将 54H,10H,30H,72H,‘TYUT’,从 200H 开始将字节存入内存连续单元中

1
2
3
4
#指定起始地址因为要从200H开始存储所以起始地址设置为200H
ORG 200H
DATA1:DB 54H,10H,30H,72H
DATA2:DB 'TYUT'
存储器地址 内容
200H 54H
201H 10H
202H 30H
203H 72H
204H 54H(‘T’的 ASCII 码)’A’56 ‘a’97
205H 59H(‘Y’的 ASCII 码)
206H 55H(‘U’的 ASCII 码)
207H 54H(‘T’的 ASCII 码)

如果改为字存储

1
2
ORG 200H
DATA1: DW 5410H,3072H,'TYUT'

4.EQU:相当于’=’

5.END:汇编结束

注意:

1
2
3
4
5
6
7
MOV ,@A   #‘@’符号为取地址符 会有两道题让判断其中的值

MOVX A,@DPTR #MOVX为读取外部存储器PC,DPTR
#将DPTR内数值为地址的外部数据存储器的内容送给A

MOVC A,@A+PC
#MOVC读取程序存储器的值,这句指令是将A和DPTR两个寄存器的值相加之和作为程序存储器的数据地址,将地址的内容给A

寻址方式

1.寄存器寻址

2.直接寻址

3.立即寻址

4.寄存器间接寻址

4.基址加变址寄存器间接寻址

5.位寻址方式

6.相对寻址方式

运算指令

1.一般加法指令:ADD

2.带进位的加法指令:ADDC

以上两个指令均会影响 AC,CY,OV,P

3.增量指令:INC 增量指令不会影响标志位

5.减法指令:SUBB 会影响标志位 AC,CY,OV,P

6.乘法指令:MUL 会影响 OV 标志,当乘积大于 0FFH 时,OV 置 1,否则清 0;乘法指令总是使 CY 清 0

7.除法指令:DIV

程序设计

目前最常用的编码是 ASCII 码

十进制转化为 BCD 码

162=>BCD 将每一位十进制用四位 BCD 码表示即:0001 0110 0010

延时程序

如果使用 12MHz 晶振,一个机器周期就是 1 微秒

考试会考,变化数值要会计算

1
2
3
4
5
6
7
8
DELAY: MOV R5, #100
DEL0: MOV R6, #200
DEL1: MOV R7, #248
# DJNZ为双指令,即两个机器周期的指令
DEL2: DJNZ R7, DEL2 ;248*2+1=497个机器周期
DJNZ R6, DEL1 ;(248*2+1+2)*200+1=99801个机器周期
DJNZ R5, DEL0
RET

中断

中断源 5 个

分 类 中断源名称 中断申请标志 触发方式 中断入口地址
外部中断 外部中断 0 IE0(TCON.1) INT0(P3.2)引脚上的低电平/下降沿引起的中断 0003H
内部中断 定时器/计数器 T0 中断 IF0(TCON.5) T0 定时器/计数器溢出后引起的中断 000BH
外部中断 外部中断 1 IE1(TCON.3) INT1(P3.3)引脚上的低电平/下降沿引起的中断 0013H
内部中断 定时器/计数器 T1 中断 IF1(TCON.7) T1 定时器/计数器溢出后引起的中断 001BH
内部中断 串口中断 RI (SCON.0) TI ( SCON.1) 串行口接收完成或发送完一帧数据后引起的中断 0023H
外/内 部中断 定时器 2 中断(仅 8052) TF2(T2CON.7) EXF2(T2CON.6) T2 定时器/计数器计数满后溢出,置标志位 TF2;或当外部输入 T2EX 发生从 1 到 0 的下降时置标志位 EXF2,引起中断 002BH

外部中断源 由单片机的外围引脚 P3.2、P3.3 输入低电平或下降沿信号

  1. 中断源发出请求

  2. 中断响应(

    •中断源有中断请求;

    • 此中断源的中断允许位为 1;

    • CPU 开中断(即 EA=1)。)IE 为寄存器包含 EA

  3. 中断服务(interrupt)

  4. 中断返回

与中断相关特殊功能寄存器 SFR

中断允许控制寄存器 IE

有定义的位地址:例:EA=0(禁止中断)反之开中断

  1. EA:中断允许的总控制位

  2. EX0:外部中断 0 允许控制位

  3. EX1:外部中断 1 允许控制位

  4. ET0:定时器 0 允许控制位

  5. ET1:定时器 1 允许控制位

  6. ES:串口中断允许位

注意:先开总中断 EA 再开分中断 ET0 或者 ET1

SETB EA EA = 1

SETB ET0 ET0 = 1

上述两种写法都是对的

定时器控制寄存器 TCON

与中断有关的控制位:

  1. IE0:外部中断 0 请求标志位

  2. IE1:外部中断 1 请求标志位

  3. IT0:外部中断 0 请求方式控制位,为 0 时低电平有效

  4. IT1:外部中断 1 请求方式控制位

  5. TF0:计数器 0 溢出标志位,当发生溢出时置为 1,转到中断服务

  6. TF1:计数器 1 溢出标志位

注意:中断子程序的两种写法

  • interrupt{}

  • if(IF0 == 1){}

中断优先级控制寄存器 IP

当 CPU 正在执行一个低优先级中断处理程序时,它能被高优先级中断源所中断,但不能被同级中断源所中断。

注意:只有 8052 有 T2 中断源,8051 没有,所以选择题看到 T2 直接排除

串行口控制寄存器 SCON

TI—串行口发送中断请求标志位。

RI—串行口接收中断请求标志位

定时器/计数器

TMOD

工作模式寄存器

四种工作模式

M1 M0 工作模式
0 0 模式 0:TH 高 8 位加上 TL 中的低 5 位构成 13 位定时器
0 1 模式 1:16 位定时器
1 0 模式 2:可自动重装初值的 8 位定时器
1 1 模式 3:对于 T0,被分为两个 8 为定时器,对于 T1 则停止计数

串口

单工,半双工,全双工的区别

单工:数据只能单向传输,发送方只能发送消息,接收方只能接收消息(广播电台)

半双工:数据可以在两个方向上进行传输,但不能同时进行,某一时刻只能单向传输(对讲机)

全双工:数据可以在两个方向上同事进行传输(电话)

系统扩展与接口技术

SPI:常被用作显示屏上

I2C:用于读取数据,适用于传感器

I2S:用于处理声音