概述
1,微型计算机的硬件结构
2,嵌入式系统的由来,特点和种类
3,单片微机的应用特点微型计算机的硬件结构微处理器
CPU
ROM RAM I/O接口数据总线
DB
控制总线
CB
地址总线
AB
输出设备输入设备时钟电路单片微机的应用特点
单片微机是早期 Single Chip Microcomputer的直译,
它忠实地反映了早期单片微机的形态和本质。随后,按照面向对象、突出控制功能,在片内集成厂许多外围电路及外设接口,突破了传统意义的计算机结构,发展成
microcontroller的体系结构,目前国外已普遍称之为微控制器 MCU (Micro Controller Unit)。 鉴于它完全作嵌入式应用,故又称为嵌入式微控制器 (Embedded
Microcontroller)。 国内由于单片机一词已约定成俗,仍沿用至今,但应将单片微机的“机”理解成微控制器而不是微计算机。
单片微机面对最底层的电子技术应用,从玩具、小家电、
工程控制单元到机器人、智能仪表、过程控制、个人信息终端等,面对不同对象,推出适合不同领域要求的单片微机系列。
专用单片微机具有低成本,资源有效利用,系统外围电路少,可靠性高,是未来单片微机发展的一个重要方向本课程教学原则
本课程的教学原则为:对原理部分以够用为度.将重点放在培养学生应用单片机系统解决实际问题的能力上,同时注重培养学生的自学能力。为此,我们以一个设计性实验开始.并以此贯穿整个教学过程,
本课程教学基本做法
以任务为教学单元.打破原有教材知识点讲述的顺序和界限,不管硬件结构、指令、编程的先后顺序,将各部分知识分解成一个个知识点,为了一个任务抽取每个部分的不同知识点,加以组合,
完成第一个任务就能清楚单片机的开发过程,完成第二、三个任务,就能自己模仿性地编出自己的程序,使得学习过程是一个不断成功地完成任务的过程.当所有任务全部完成后,知识点也就全学完了.
对学生的基本要求为保证教学正常进行要求同学:
按教师要求认真完成实验任务,并注意总结实验心得。
对教师提示的教材内容必须仔细阅读并结合实验加以体会。
在此基础上,力争完成教师布置的开发性实验,以提高自己的动手能力。
第一次任务
----用单片机点亮一只发光二极管 LED
(一 )知识点
1,MCS_51单片机和最小系统的组成
2,指令初步知识 ( 分类,作用及执行过程 )
3,编程初步知识 ( 构成,子程序调用 )
4,MCS- 51存储器配置
5,实验仪器和软件的使用
6,堆栈的概念和子程序调用过程
(二 ) 重点
1,单片机最小系统
2,MCS51存储器配置 。
3,堆栈的概念和子程序调用过程第一次任务
----用单片机点亮一只发光二极管 LED
一、实验目的
1、了解单片机最小系统。
2、了解 DVCC仿真系统使用方法
3、掌握编程的初步知识
4、初步掌握并行口的使用方法
二、实验设备
DVCC仿真系统一套、计算机一台。
三、实验原理程序控制发光二极管 LED间歇发光四、实验线路
Vcc P2.0~P2.3
XTAL2
ALE
XTAL1
RST
8031
P0.7
|
P0.0
P1.0
EA PSEN
Vss
74LS373
Vcc
G
Q7
D7 |
| Q0
D0
GND
E
A11~A8
Vcc
Vpp
2764
A7~A0
D7~D0 CS
OE+5V
+5V
+5V
+5V
LED
3
8
8
+5V
用单片机点亮发光二极管 LED( 最小系统 )
8031
74LS373
2764
返回
ORG 0000H
START,CLR P1.0
CALL DELAY
SETB P1.0
CALL DELAY
SJMP START
DELAY,MOV R5,#0FFH
DELAY1,MOV R4,#0FFH
DJNZ R4,$
DJNZ R5,DELAY1
RET
五、参考程序
MCS-51单片机组成振荡器和时序电路
4K字节程序存储器
128字节数据存储器
2个 16位定时器 / 计数器
8051
CPU
64K总线扩展控制可编程并行
I/O接口可编程全双工串行口外时钟源 外部事件计数外中断内中断控制 并行口 串行通信由 CPU( 运算器、控制器)、存储器( ROM,RAM)
和 I/O接口组成。
CPU
CPU是单片机的核心部件 。 它由运算器和控制器等部件组成 。
( 1) 运算器包括算术 /逻辑 ( ALU),累加器 A,暂存寄存器,程序状态寄存器
( PSW) 。 运算器的功能是进行算术运算和逻辑运算 。 可以对半字节,单字节等数据进行操作 。 还有一个布尔处理器,用来处理位操作 。
( 2) 控制器包括定时控制逻辑电路,指令寄存器 IR,指令译码器 ID程序计数器
PC等 。 CPU从存储器中取来的指令,送入指令寄存器,然后由指令译码器译码分析成一种或几种电平信号,这些电平信号与外部时钟脉冲在 CPU定时与控制电路中组合,形成各种按一定时间节拍变化的电平和脉冲,即控制信息,完成相应的指令功能 。
MCS-51片外总线结构
8051
P0
数据总线
DB
P2P1
P3
高 8位地址总线
PSEN
ALE/PROG
控制总线
CB
地址总线
A
B
74LS
373 低 8位地址总线
RESET
EA
I/O
单片机指令执行过程
执行一条指令的过程分为两个阶段:首先,CPU
进入取指阶段,从存储器中取出程序计数器 PC所指单元地址内的指令并通过译码后,转入执行指令阶段,在这期间 CPU执行指令指定的操作 。 当执行指令时,CPU自动修改 PC的内容,使之总是保存将要执行的下一条指令的地址 。
取指令阶段是由一系列相同的操作组成的,因此,取指阶段的时间总是相同的 。 而执行指令的阶段是由不同的事件顺序组成的,它取决于被执行指令的类型 。 若 CPU主频为 6Mz,即振荡为
1/6μs,则一个机器周期为 2μs。 单周期指令是
2μs,双周期指令是 4μs,三周期指令是 6μs。
程序读取返回
MCS-51单片机存储器配置
80C51单片微机系列的存储器采用的是哈佛( Har-yard ) 结构,即将程序存储器和数据存储器截然分开,程序存储器和数据存储器各有自已的寻址方式,寻址空间和控制信号。
①在物理上设有 4 个存储器空间
·程序存储器:片内程序存储器; 片外程序存储器;
·数据存储器:片内数据存储器;片外数据存储器。
②在逻辑上设有 3 个存储器地址空间
·片内,片外统一的 64 KB ( 16位地址线 216B) 程序存储器地址空间;
·片内 256 B( 对 80C52为 384B ) 数据存储器地址空间;
·片外 64 KB( 16位地址线 216B) 的数据存储器地址空间。
图 2-1
特殊功能寄存器 SFR
共有 21个特殊功能寄存器,分别分散地安排在内部 RAM的 80H~0FFH地址空间。 (括号内为初始化时的值)
累加器 ACC,用来存放数据和运算结果。 (00H)
寄存器 B,主要用于乘法和除法指令。也可作一般寄存器用。 (00H)
程序状态寄存器 PSW,用来存放程序状态信息。 (00H)
堆栈指针 SP,用来指示堆栈顶部的地址。 (07H)
数据指针 DPTR,用作 16位地址指针。 (0000H)
并行 I/O接口 P0~P3等。 (0FFH)
工作寄存器区工作寄存器区:这是一个用寄存器直接寻址的区域,指令的数量最多,均为单周期指令,执行的速度最快。
其中片内数据随机存取储存器区的 ( 00H~ 1FH),共 32 个单元,是 4 个通用工作寄存器组(表 2 - l ),每个组包含 8 个 8 位寄存器,编号为
R0 ~ R7 。
表 2 - 1 工作寄存器组图 2-2
RS1(PSW.4) RS0 (PSW.3) 组号 地址单元
0 0 0 组 00H~ 07H
0 1 1 组 08H~ 0FH
1 0 2 组 10H~ 17H
1 1 3 组 18H~ 1FH
爱思软件介绍程序存储器
ALT+P
片外数据存储器
ALT+N 片内数据存储器 ALT+I 位寻址区 ALT+L
堆栈区
ALT+K
工作寄存器及部分特殊寄存器
ALT+T
文本窗口
ALT+ 8
MSC51
汇编语言的基本概念
汇编语言是用助记符来表示指令的一种计算机语言。它由汇编语句组成。其结构为:
标号:操作码 操作数;注释
标号位于语句开始,由字母和数字组成,它代表该语句的地址。它不是必须的。
操作码表示语句的性质,是语句的核心。
操作数在操作码之后。后操作数既可以是数据,
也可以是地址,且必须满足寻址方式的规定。
注释是说明语句的功能。它以,;,开始。系统对其不加以处理。
编程初步知识
ORG 0000H
START,CLR P1.0
LCALL DELAY
SETB P1.0
LCALL DELAY
SJMP START
DELAY,MOV R5,#0FFH
DELAY1,MOV R4,#0FFH
DJNZ R4,$
DJNZ R5,DELAY1
RET
END
顺序结构子程序,为循环结构调用子程序语句循环结构
问题:计算一下程序中的延时子程序延时的时间是多少?
堆栈与子程序调用过程
堆栈中的数据是以,先进后出,的方式处理的,由堆栈指针
SP控制。系统复位时 SP=07H
运行爱思软件
1.ASM
ORG 0000H
0000 START,CLR P1.0
0002 LCALL DELAY
0005 SETB P1.0
0007 LCALL DELAY
000A SJMP START
000C DELAY,MOV R5,#0FFH
000E DELAY1,MOV R4,#0FFH
0010 DJNZ R4,$
0012 DJNZ R5,DELAY1
0014 RET
0016 END
下一句地址压入堆栈,即
(08H)=05H(PCL)
(09H)=00H(PCH)
(SP)=09H
(PC)=000CH调用子程序从栈中弹出返回地址,即
(PCL)=05H,(PCH) =00H
(PC)=0005H,(SP)=07H
子程序返回,执行 0005H句指令初步知识
ORG 0000H
0000 C290 START,CLR P1.0 ; P1.0置 0
0002 12000C LCALL DELAY ; 调延时子程序
0005 D290 SETB P1.0 ; P1.0置 1
0007 12000C LCALL DELAY ; 调延时子程序
000A 80F4 SJMP START ; 跳转止 START
000C 7DFF DELAY,MOV R5,#0FFH ; 将 FFH送 R5
000E 7CFF DELAY1,MOV R4,#0FFH ; 将 FFH送 R4
0010 DCFE DJNZ R4,$ ; R4减 1不为 0,
跳转止本句
0012 DDFA DJNZ R5,DELAY1 ; R5减 1不为 0,
跳转止 DELAY1
0014 22 RET ; 返回
END ; 程序结束伪指令,汇编起始指令:表示程序存放的起始地址对应指令码存放的地址源程序助记符标号:标明指令的地址机器码,目标程序注释指令分类
1,数据传送类指令,MOV
2,位操作类指令,SETB,CLR
3,控制转移类指令,DJNZ,LCALL、
SJMP,RET
4,逻辑操作类指令:
5,算术运算类指令:
作业一
1,简述子程序调用过程。
2,已知 (SP)=25H,(PC)=2345H,
(24H)=12H,(25H)34H,(26H)=56H,问执行 RET后,(SP)=? (PC)=?
3,已知 (SP)=25H,(PC)=2345H,标号 LABEL
所在的地址 3456H,问执行 LCALL LABEL
后,堆栈指针和堆栈内容发生了什么变化?
(PC)=?
4,设晶振频率为 12MHz,求下边程序延时多长时间。 MOV R1,#20H
AGAIN,MOV R2,#60H
DELAY,DJNZ R2,DELAY
DJNZ R1,AGAIN
RET
第二次任务
--用单片机实现按键控制 LED灯亮
知识点
1,并行口 (Po,P1,P2,P3)的功能
2,片内存储器的构成
3,数据传送,逻辑运算和位操作指令
4,进一步了解 堆栈的使用方法第二次任务
--用单片机实现按键控制 LED灯亮
一、实验目的
1、进一步掌握并行口的使用方法。
2、熟悉片内 RAM的构成
3、进一步学习指令系统
4,学习 DVCC单片机存储器的操作方法
二、实验设备
DVCC仿真系统一套、计算机一台。
三、实验原理
1,由 P3.3控制 4个 LED按 16进制方式发光。
2、将 20H中压缩 BCD码拆成两个单字节 BCD码,依次存放 21H,22H。
四、实验线路
P1.0
P1.1
P1.2
P1.3
P1.4
8031 P1.5
P1.6
P1.7
P3.3
+5V
+5V
LED0~LED7
1A1 1Y1
1A2 1Y2
1A3 1Y3
1A4 1Y4
2A1 2Y1
2A2 2Y2
2A3 2Y3
2A4 2Y4
74LS240
1G
2G
R0~R7
K
74LS240
八线缓冲器 /驱动器输入 输出
G A Y
L L H
L H L
H X 高阻 返回五、程序清单
ORG 0000h
HA1S:MOV A,#00H
HA1S1:JB P3.3,HA1S1
MOV R2,#20H
LCALL DELAY
JB P3.3,HA1S1
HA1S2:JNB P3.3,HA1S2
MOV R2,#20H
LCALL DELAY
JNB P3.3,HA1S2
INC A
PUSH ACC
CPL A
MOV P1,A
POP ACC
AJMP HA1S1
DELAY,PUSH R2
DELAY1,PUSH R2
DELAY2,PUSH R2
DELAY3,DJNZ R2,DELAY3
POP R2
DJNZ R2,DELAY2
POP R2
DJNZ R2,DELAY1
POP R2
DJNZ R2,DELAY
RET
END
MOV A,P1
RL A
MOV P1,A
MOV P1,#0FEH
改为改为爱思软件
2_1.ASM
程序解析
ORG 0000h
HA1S,MOV A,#00H; A赋初值 00H
HA1S1:JB P3.3,HA1S1; P3.3为 1则等待
MOV R2,#20H; R2为循环量初值
LCALL DELAY; 调延时子程序
JB P3.3,HA1S1; P3.3为 1则返回,判断是否键抖动
HA1S2:JNB P3.3,HA1S2; 不是抖动,P3.3不为 1则等待
MOV R2,#20H
LCALL DELAY
JNB P3.3,HA1S2; P3.3不为 1则返回
INC A ; P3.3从 0变为 1,又从 1变为 0,即开关来回拨动了一次
PUSH ACC
CPL A
MOV P1,A
POP ACC
AJMP HA1S1; 返回 HA1S1
A=01H压入堆栈
A=0FEH
P1=0FEH,亮一个灯栈顶内容 01H弹出赋给 A=01H
2 压入堆栈
DH
D,亮二个灯栈顶内容 02 弹出赋给 2
3 压入堆栈
=0 C
=0 C,亮一个灯栈顶内容 03 弹出赋给 3
如果不用堆栈,就必须指定一个地址存放 A,在大程序中,
这个地址可能存放重要数据,而生成整个程序出错。
改写这部分程序,就可改变开关操作时 LED的变化规律并行口 I/O的功能
MCS-51有 4 个双向的 8 位并行 I/O口 P0~P3,在无片外存储器的系统中,这 4 个 I/O口的每一位都可作为准双向通用 I/O口使用 。
在具有片外存储器的系统中,P2口作为地址的高八位,P0口作为地址的低八位和双向数据总线 。
1,P0口可作为通用 I/O口使用,但实际应用时通常作为地址 /数据总线,即低 8 位地址与数据线分时使用 P0口,此时 P0口为真正的双向口 。 若作为通用 I/O口,在输入数据时,要先向锁存器写 1,否则,
若此前该口曾输出锁存过 0,则输入的 1 就 无法正确的读入 。 因此,
称 P0为准双向口 。
2,P1口每一位都可以作为可编程输入或输出线,也是准双向口,在输入数据时,要先向锁存器写 1。
3,P2口也是准双向口,当系统中有片外存储器时,P2口用于输出高八位地址。在 8031中 P2口一般只作为地址总线使用。
4,P3口为双功能口,作为第一功能时,作用同 P1口。第二功能以后再讲。
返回片内数据存储器片内数据数据存储器是最灵活的地址空间它在物理上又分成两个独立的功能不同的区。
·片内数据随机存取储存器区:对 80C51型单片微机,为地址空间的低 128 B ; 对 80C52 型单片微机,为地址空间的 0 ~ 256B。
·特殊功能寄存器 SFR 区:地址空间的高 128
B 。
片内 RAM
片内数据随机存取储存器区 ( 工作寄存器区)
在片内数据随机存取储存器区,根据不同的寻址方式又可分为以下几个区域:
①工作寄存器区:这是一个用寄存器直接寻址的区域,指令的数量最多,均为单周期指令,执行的速度最快。
从图中可知,其中片内数据随机存取储存器区的 ( 00H~ 1FH),
共 32 个单元,是 4 个通用工作寄存器组,每个组包含 8 个 8 位寄存器,编号为 R0 ~ R7 。
片内 RAM
RS1(PSW.4) RS0 (PSW.3) 组号 地址单元
0 0 0 组 00H~ 07H
0 1 1 组 08H~ 0FH
1 0 2 组 10H~ 17H
1 1 3 组 18H~ 1FH
片内数据随机存取储存器区
( 位寻址区及字节寻址区)
②位寻址区:从片内数据随机存取储存器区的 20H~ 2FH)
的 16 个字节单元,共包含 128 位,是可位寻址的随机存取储存器区,其中每一位都可视作软件触发器,由位操作指令处理。这 16 个字节单元,既可进行字节寻址,又可位寻址。字节地址与位地址之间的关系见 表 2 - 1 。
③字节寻址区:从片内数据随机存取储存器区的 48 ~ 127
( 30H~ 7FH),共 80 个字节单元,可以采用直接字节寻址的方法访问。
位地址和字节地址的区别:位地址只能用位操作指令 。
位地址中只能存一位数,取值范围只有 0,1两个数,字节地址能存 8位数,取值范围是 00H~0FFH共 256个数表 2-1
片内数据随机存取储存器区
( 堆栈区及堆栈指示器)
④堆栈区及堆栈指示器:堆栈是在片内数据随机存取储存器区中,数据先进后出或后进先出的区域。堆栈指示器
(堆栈指针) SP存放当前的堆栈栈顶所指存储单元地址的一个 8位寄存器。系统复位时 (SP)=07H,也可用指令
MOV SP,#data(data一般为 30H~7FH)。
堆栈共有两种操作:进栈和出栈,不论是数据进栈还是数据出栈,都是对栈顶单元进行的,即对栈顶单元的写和读操作。进栈时 SP的内容是增加的;出栈时 SP的内容是减少的。
堆栈是为子程序调用和中断操作而设立的其具体功能有两个:保护断点和保护现场。
堆栈的概念和使用二
DE2,PUSH R2
DE3,DJNZ R2,DE3
POP R2
DJNZ R2,DE2
RET
设 R2=04H,SP=07H
(SP)=08H
(08H)=04H
R2从 04H开始减 1循环 4次栈顶弹出给 R2
(R2)=04H
(SP)=07H
R2减 1=03H
转移到 DE2
(SP)=08H
(08H)=03H
(SP)=08H
(08H)=02H
(SP)=08H
(08H)=01H
R2从 03H开始减 1循环 3次
R2从 02H开始减 1循环 2次
R2从 01H开始减 1循环 1次栈顶弹出给 R2
(R2)=03H
(SP)=07H
栈顶弹出给 R2
(R2)=02H
(SP)=07H
栈顶弹出给 R2
(R2)=01H
(SP)=07H
R2减 1=02H
转移到 DE2
R2减 1=01H
转移到 DE2
R2减 1=00H
循环结束共循环 4+3+2+1=10次若不用堆栈技术,则程序将十分冗长子程序返回
2_1.asm
指令系统 -逻辑操作指令
逻辑操作指令:
( A) =0AAH ( C) =1
CLR A,清零
CPL A,求反
AND A,#38H,相与
OR A,#38H,相或
XRL A,#38H,相异或
RL A,循环左移
RRL A,循环右移
RRC A,带进位右移
RLC A,带进位左移
10101010
01010101
10101010
00111000
001010001010101000111000
10111010
10101010
00111000
10010010
1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1
C
1
1 0 1 0 1 0 1 0
1 1 0 1 0 1 0 1
1
C
0
指令系统 -数据传送指令
堆栈操作指令进栈 PUSH
半字节交换指令
SWAP A (A)=35H → (A)=53H
字节交换指令
XCH A,Rn
出栈 POP
SP 07H XX
B
88H
SP 08H
07H XX
A
88H
88H
PUSH A
POP B
SP 07H XX
A
88H
XCHD A,@Ri
A
R0
20H
56H
20H
78H
A
R0
20H
58H
20H
76H
指令系统 -位操作指令指令
位操作指令只限于可位寻址的位(位地址记为
bit),它的累加器是 PSW.7(CY),记为 C。
位置位指令
CLR bit,CLR C,SETB bit,SETB C
位控制转移指令
JB bit,rel,JNB bit,rel,JC,rel,JNC,rel
位传送指令
MOV C,bit,MOV bit,C
位运算指令 (ANL,ORL,CPL)
ANL C,bit
ANL C,\bit( 注意 bit内的值并不变化)
例,(C)=1,(20H)=1,ANL C,\20H后,(C)=0,(20H)=1
注意:位运算必须通过 C进行计算,且运算结果在 C中。
并字程序
( (20H)=95H,(21H)=78H,合并为 98H存入 22H)
屏蔽 21H的高字节
(与 0FH相与)
两字节的内容合并
(相或)存入 22H
屏蔽 20H的低字节
(与 F0H相与)
ORG 0000H
MOV A,20H;( 20H) → A
ANL A,#0F0H; 屏蔽高四位 → A
MOV B,A; 暂存 B
MOV A,21H ;( 21H) → A
ANL A,#0FH ; 屏蔽低四位 → A
ORL A,B; 两数相或 → A
MOV 22H,A ;( A) → 22H
MSC51
2_2.ASM
拆字程序
(20H)=95H,拆为 09H,05H存入 21H,22H。 95为压缩 BCD码,
09,05称单字节 BCD码。这个程序以后经常使用。
ORG 0000H
PUSH 20H ; 20H的内容入堆栈
MOV A,20H ;( 20H) → A
SWAP A ; A的高低字节对换
ANL A,#0FH; 屏蔽高四位 → A
MOV 21H,A ;( A) → 21H
POP A ; 栈顶的内容出栈 → A
ANL A,#0FH ; 屏蔽低四位 → A
MOV 22H,A;( A) → 22H
屏蔽高字节并存入 21H
屏蔽高字节并存入 22H
将 20H压入堆栈交换 20H高低字节出栈给 A
MSC51
2_3.ASM返回作业二
1、简述 8031片内数据存储器的构成。
2,位地址和字节地址有何区别?位地址 4EH在内存中什么位置? MOV C,30H与 MOV A,30H
有何区别?
3,P48 7
4,P48 11( 2)
5,P48 14 题 5提示:置 P1口低四位为输入方式将 P1口数据读入 A
取反高低字节交换保留高四位,并使低四位全 1
输出到 P1口结束题 4提示:位运算必须通过 C进行计算,且运算结果在 C中。
第三次任务
--访问外部数据存储器及循环程序编制
知识点
1,程序存储器和数据存储器的连接,
编址和区别
2,数据存储器构成和访问方法
3,指令的寻址方式
4,DPTR,Ri作为指针的编程方法
5,循环程序的编制第三次任务
--访问外部数据存储器及循环程序编制
一、实验目的
1,程序存储器和数据存储器的连接和编址
2,访问外部数据存储器的方法
3,循环程序的编制二,实验设备
DVCC仿真系统一套、计算机一台。
三、实验内容
1、在外部数据存储器 0130H~013FH和片内 RAM 30H ~
3FH分别存放数据 00H,01H…… 0FH。
2、在片内数据存储器 20H~23H中压缩 BCD码拆成单字节
BCD码依次存放到 28H~2FH中。
四、实验电路
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
8031
ALE
P0
WR
PSEN
RD
CE
A12
A11
A10
A9
A8
2764(1)
A7
|
A0
D7~D0 OE
CE
A12
A11
A10
A9
A8
2764(2)
A7
|
A0
D7~D0 OE
CE
A12
A11
A10
A9
A8
6264(1)
A7
|
A0 WR
D7~D0 OE
CE
A12
A11
A10
A9
A8
6264(1)
A7
|
A0 WR
D7~D0 OE
74LS373
Q7
G |
Q0
D7~D0
4000H~
5FFFH
4000H~
5FFFH
2000H~
3FFFH
2000H~
3FFFH
实验电路中若将 P2.6P2.5改为
P2.7P2.6则相应程序存储器和数据存储器的地址范围是多少?
P2.7P2.6P2.5
X 1 0
P2.7P2.6P2.5
X 0 1
P2.7P2.6P2.5
1 0 X
8000H
9 FFH
0 1 X
4000H
5FFFH
五、实验程序一
ORG 0000H
MOV P2,#01H
MOV R2,#0FH
MOV R0,#30H
CLR A
CLEAR1:MOVX @R0,A
MOV @R0,A
INC R0
INC A
DJNZ R2,CLEAR1
SJMP $ MSC51
3_11.ASM 3_12.ASM
对数据指针所指的单元进行操作数据指针赋初值修改数据指针
ORG 0000H
MOV DPTR,#0130H
MOV R2,#0FH
MOV R0,#30H
CLR A
CLEAR1:MOVX @DPTR,A
MOV @R0,A
INC DPTR
INC R0
INC A
DJNZ R2,CLEAR1
SJMP $
五、实验程序二
ORG 0000H
MOV R0,#20H
MOV R1,#28H
MOV R7,#04H
LOOP:LCALL CZ
INC R0
INC R1
DJNZ R7,LOOP
SJMP $
CZ,MOV A,@R0
PUSH A
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
POP A
ANL A,#0FH
MOV @R1,A
RET
对数据指针所指的单元进行操作数据指针赋初值修改数据指针应用系统地址译码方法为了唯一的选中片外某一存储器单元或输入/输出端口,需要进行
2 种选择。一是必须选择存储器芯片或输入/输出接口芯片,称为
"片选 "(芯片地址或设备地址 ),二是必须进一步选择己选中的芯片中的某一个存储单元或输入/输出端口,称为 "字选 "(子地址 ) 。
"片选 " 保证每次操作只选中一片存储器或输入/输出接口芯片。
常用的方法有四种 ∶ "线选法 ","地址译码法 ",可编程器件
PAL/GAL,输入/输出引脚。
1、线选法-通过 80C51地址总线产生片选线
2、地址译码法 ---通常使用的译码器有:
74HC138 3/8 译码器。
74LS139 2/4 译码器
74LS154 4/16 译码器线选法地址译码法片外数据存储器与片外程序存储器外部 ROM 外部 RAM
片外程序存储器和片外数据存储器共处同一地址空间,却不会发生总线冲突。
这是因为对片外数据存储器进行读写操作的指令是 MOVX A,@DPTP(读 )
MOVX @DPTR,A(写 )
由于 MOVX指令的出现,操作时序与读片外程序存储器不同。
寻址方式 -立即寻址
指令由操作码和操作数组成。操作数指明参与操作的数或数所在的地址;对于相对转移指令,操作数则要指出下一条要执行指令的地址。寻址方式就是寻找操作数地址或指令地址的方式。
操作数从指令直接取得,即从程序存储器取得。
MOV A,#45H 机器码,74 45
程序存储器
PC
PC+1
74
45
A
45
寻址方式 -直接寻址
由指令直接给出参加操作的数的地址。
如 MOV A,45H E545
程序存储器
PC
PC+1
E5
45
A
2F
片内数据存储器
45H 2F
由指令指出某一个寄存器的内容为操作数,
对选定工作寄存器区中的 R0~R7,累加器
A,B,DPTR及进位 CY中的数进行操作。
MOV A,R3 EB( 11101011)
寻址方式 -寄存器寻址
011表示 R3程序存储器
PC 11101011
A
2F
片内数据存储器
03H
R3
2F
由指令指出某一个寄存器的内容为操作数的地址,由该地址所指定的存储单元内容作为操作数。可以作为寄存器间接寻址的寄存器有 R0,R1,SP及 DPTR。
MOV A,@R0 11100101
寻址方式 -寄存器间接寻址
R0程序存储器
PC
11100110 A
3A
片内数据存储器
00H
R0 2F
2FH 3A
以程序计数器 PC或数据指针 DPTR作为基址寄存器,累加器 A作为变址寄存器,操作数的地址为 PC( DPTR) +A。
MOVC A,@A+DPTR 93
寻址方式 -变址寻址程序存储器
PC 93
A
47
SFR
DPH
DPL 00
20
+
2000H47H
2047H 5C
5C
以当前程序计数器 PC的内容为基值,加上指令给出的一字节补码数(偏移量)形成 PC值的寻址方式。相对寻址只用于修改 PC之值,故主要用于实现程序的分枝转移 。
JC 18H 4016
寻址方式 -相对寻址程序存储器
1000H
1001H
1002H
40 +
1018H
16
读入 JC 18H后
PC=1012H
执行 JC 18H后
PC=1018H
寻址方式小结方式 利用的变量 使用的空间立即寻址 程序存储器寄存器寻址
R0~R7,A,B,CY、
DPTR
直接寻址 内部 RAM( 00~7FH) 和
SFR及位空间寄存器间接寻址
@R0,@R1,SP 内部 RAM( MOV)
@R0,@R1、
@DPTR
外部 RAM( MOVX)
变址寻址 DPTR+A,PC+A 程序存储器相对寻址 PC+偏移量 程序存储器位寻址 可位寻址区及部分 SFR各位外部数据存贮器
外部数据存贮器又称外部数据 RAM,其最大容量可达 64K字节 。 它的功能与内部数据 RAM基本相同,但它不能进行堆栈操作 。
当 8031单片机同时外接有程序存贮器和程序存贮器时,两者的区别在于:前者只有读操作无写操作,且写操作信号由引脚 PSEN直接提供;后者则有读,写操作,且由引脚信号 RD和 WR选通读写操作 。
对片内 RAM或片外 RAM操作的区别在于:前者无读写信号,后者有读写信号 ( RD,WR) 。
存贮器的数据操作
( 1) 程序存贮器
只有读操作,用指令 MOVC。 除由 PC直接寻址,还可以用 PC或
DPTR作变址寻址 。
如,MOVC A,@A+DPTR
MOVC A,@A+PC
( 2) 外部数据 RAM
可进行读写操作,用指令 MOVX。 用 DPTR作寄存器间接寻址 。
如 MOVX A,@DPTR;
也可用 R0或 R1作寄存器间接寻址,如:
MOV P2,#20H
MOV R0,#30H
MOVX @R1,A; A内的数据送到外部数据 RAM中 2030H单元 。
存贮器的数据操作
( 3) 内部数据 RAM
可进行读写操作,用指令 MOV。 接直接字节地址寻址,
如 MOV 35H,#64H;
也可用 R0或 R1作寄存器间接寻址,如:
MOV R0,#40H
MOV A,@R0;
将内部数据 RAM中 40H单元的内容 ( 40H) 送到 A。
( 4) 特殊功能寄存器
可进行读写操作。用指令 MOV。 只能用直接寻址方式。
程序举例
(50H)=40H,执行下列程序后,以下各寄存器内容是什么 。
(R0)= (40H)= (A)= (41H)= (42H)=
MOV A,50H
MOV R0,A
MOV A,#00H
MOV @R0,A
MOV A,#3BH
MOV 41H,A
MOV 42H,41H
(50H) → A (A)= (50H) =40H
(A )→ R0 (R0)= (A) =40H
00H → A (A) =00H
(A) → (R0)=(40H) (40H)= (A) =00H
3BH → A (A)= 3BH
(A) → 41H (41H)= (A) =3BH
(41H) → (42) (42H)= (41H) =3BH
40H 00H 3BH 3BH 3BH
循环程序循环程序一般包括如下四个部分:
1、置循环初值:如设置地址指针,设置工作寄存器,设置循环次数等。
2、循环体:循环结构的基本部分。
3、循环控制:包括修改指针、修改控制变量和判断循环是否结束还是继续。修改指针和控制变量是为下一次循环判断作准备,当符合结束条件时结束循环。
4、结束:存放结果或作其它处理。
结束置循环初值循环体修改指针循环结束结束部分开始
FIND,MOV SP,#60H
MOV R0,#10H
MOV R1,#00H
MOV DPTR,#7000H
FIND1:MOVX A,@DPTR
CJNE A,#00H,FIND2
INC R1
FIND2:INC DPTR
DJNZ R0,FIND1
置循环初值循环体循环控制返回修改指针修改控制变量 R0和判断循环是否结束连续拆字程序
将 20H~2FH的内容拆到 30H开始以后的单元中将 R0所指地址中的内容拆字并存入 R0所指地址中将指针 R0指向 20H
将指针 R1指向 30H
R7为计数器等于 0FH
R0,R1加 1
R7-1=0?
结束
ORG 0000H
MOV R0,#20H
MOV R1,#30H
MOV R7,#0FH
LOOP:LCALL CZ
INC R0
INC R1
DJNZ R7,LOOP
SJMP $
CZ,MOV A,@R0
PUSH A
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
POP A
ANL A,#0FH
MOV @R1,A
RET
初始化主程序子程序
MSC51
3_2.ASM
作业三
1,P120 1
2、指出下列指令中画线的操作数的寻址方式。
MOV R0,#60H; MOV A,30H; MOV
A,@R1;
MOV @R1,A ; MOVC A,@A+DPTR; SJMP
NEXT;
MOV C,30H
3,P49 13( 注意:一查到有 0AAH就不查了)
4,P120 2
第四次任务
--算术运算指令和状态寄存器 PSW
(一 )知识点
1,学习算术运算指令及 PSW的变化
2,进一步掌握常用程序的编制方法
3,进一步掌握爱思软件的使用方法
(二 ) 重点
1,算术运算指令及 PSW的变化
2,典型算术运算编制和数制转换程序第四次任务
--算术运算指令和状态寄存器 PSW
一、实验目的
1,学习算术运算指令及 PSW的变化
2,进一步掌握常用程序的编制方法
3,进一步掌握爱思软件的使用方法
二、实验设备计算机一台、爱思软件。
三、实验内容
1、运行给定程序,观察并记录程序执行过程中相应寄存器内容的变化,尤其是状态寄存器 PSW。
2、数制转换
3、多字节 BCD码的运算四、实验程序程序一求 y=a2-b的子程序。
入口,a=200 存放在 R2中,b=88
存放在 R3中。
出口:结果放入 R6和 R7中 。
ORG 0000H PSW= (A)=
MOV A,R2; PSW= (A)=
MOV B,A; (B)=
MUL AB; PSW= (A)= (B)=
CLR C ; PSW=
SUBB A,R3; PSW= (A)=
MOV R7,A ; (R7)=
MOV A,B ; (B)=
MOV A,#00H; PSW= (A)=
MOV R6,A; (R6)=
RET
程序二将 A中的 16进制数转换为 BCD码 。
百位数存 R3中,十位和个位放在 A中。
ORG 0000H PSW= (B)=
MOV B,#100; PSW= (B)=
DIV AB; PSW= (A)= (B)=
MOV R3,A; (R3)=
MOV A,#10; (A)=
XCH A,B; PSW= (A)= (B)=
DIV AB; PSW= (A)= (B)=
SWAP A; (A)= (B)=
ADD A,B; PSW= (A)= (B)=
SJMP $
MCS_51
5_1.ASM
5_2.ASM
四、实验程序程序三多字节 BCD码减法子程序。
(21H)(20H)=2000H
(23H)(22H)=1098H
入口:被减数低字节地址在 R1中,
减数低字节地址在 R0中,字节数在 R2中;
出口:差的低字节地址在 R0中,字节数在 R3中。 07H位为符号位,
0正 1负。
SUBBCD,PUSH PSW
CLR C
CLR 07H
MOV R3,#0
SUBBCD1:MOV A,#9AH
SUBB A,@R0
ADD A,@R1
DA A
MOV @R0,A
INC R0
INC R3
CPL A
DJNZ R2,SUBBCD1
JNC SUBBCD2
SETB 07H
SUBBCD2,POP PSW
RET
ORG 0000H
MAIN,MOV R1,#20H
MOV R0,#22H
MOV R2,#02H
ACALL SUBBCD
SJMP $
MCS_51
5_3.ASM
算术运算指令
ADD:加法
ADDC,带进位加法
INC,加 1
DA A,十进制调整,必须在加法指令后
DEC,减 1
SUBB,带借位减法
MUL AB,A*B,结果高八位存 B,低八位存 A
DIV AB,A/B,结果商存 A,余数存 B。
状态寄存器 PSW
( 1) CY,进(借)位标志。两数相加(减),若发生进(借)
位,则 CY置 1。例,78H+97H( 01111000+10010111)
( 2) AC,半进位标志。两数相加(减),若发生半进(借)位
,则 AC置 1 。 例,57H+3AH( 01010111+00111010)
( 3) F0,用户标志位,由编程人员决定是否采用。
( 4) RS1,RS0,工作寄存器组选择位。
( 5) OV,溢出标志位。溢出表示执行带符号加减法指令时,运算结果超出了 (-128~+127),或 DIV AB时,除数为 0,或 MUL AB
的结果超过 255(即结果要从 A,B两个寄存器读取 )。逻辑关系是
OV=C6 C7( Ci表示 i位向 i+1有进位)
( 6) P,奇偶校验位:它用来表示 A中二进制数位,1”的个数的奇偶性。若为奇数,则 P=1,否则为 0。例,(A)=78H(
01111000),显然 1的个数为偶数,所以 P=0。
PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0
CY AC F0 RS1 RS0 OV - P
图 5-1
返回
BCD码加减法
BCD码加法中常用指令是 DA A
若 (A3~0)>9或 (AC)=1
则 (A3~0)+6→ (A3~0)
39
48
81
6
87
+
+
1
82
46
C8
6
28
+
+
若 (A7~4)>9或 (CY)=1
则 (A7~4)+6→ (A7~4)
93
86
19
6
79
+
+
1
1
35
46
7B
6
81
+
+
MOV A,#35H
ADD A,#46H
DA A
BCD码减法不能用 SUBB指令,一般采用先求减数的 100
的补码,再加被减数。 82-35=47
1
9A
35
65
82
E7
6
47

+
+舍弃
CLR C
MOV A,#9AH
SUBB A,#35H
ADD A,#82H
DA A
DA A必须在 ADD,ADDC后面,INC指令不影响任何标志位
19+6+1=25
MOV A,#19H; (A)=19H
ADD A,#06H; (A)=1FH
INC A ; (A)=20H CY不变
DA A ; 不符合加 6的两个条件
(A)=20H
作业四
2,P48 9
3,P48 10
1,设 (R1)=42H,(42H)=80H,(A)=48H,(50H)=08H,(PSW)=00H。 执行下列程序后,以下各寄存器内容是什么
MOV A,@R1 执行完毕后,(R1)= (42H)= (A)=
MOV @R1,50H (50H)=
SUBB A,@R1 CY= AC= OV=
MOV 50H,A
第五次任务
--多分支程序
(一 )知识点
1,学习多分支结构
2,进一步掌握常用程序的编制方法
3,偏移量的计算
(二 ) 重点
1,多分支结构
2,偏移量的计算第五次任务
--多分支(散转)程序
一、实验目的
1,学习多分支结构
2,进一步掌握常用程序的编制方法
3,掌握偏移的计算
二、实验设备
DVCC仿真系统一套、计算机一台。
三、实验内容
1、若 A=0,则( 20H) =00H; A为正数,则( 20H) =0FFH; A为负数,则( 20H) =01H。
2、编写多分支(散转)程序,根据片内 20H所存键盘的键值执行相应的程序。当 (20H)=00H时,循环显示,0” ; (20H)=01H时,循环显示,1” ; (20H)=02H时,循环显示,2” ; (20H)=03H时,
循环显示,3” 。
四、实验框图开始
(20H) → A
A+散转首地址
0字循环 1字循环 2字循环 3字循环五、实验程序
ORG 0250H
0250 MJUP,MOV A,20H
0252 MOV DPTR,#TABADDR
0255 RL A
0256 JMP @A+DPTR
0257 TABADDR:SJMP DISP0
0259 SJMP DISP1
025B SJMP DISP2
025D SJMP DISP3
025F DISP0:MOV 20H,#0C0H
0261 LJMP MJUP1
0264 DISP1:MOV 20H,#0F9H
0266 LJMP MJUP1
0269 DISP2:MOV 20H,#0A4H
026B LJMP MJUP1
026E DISP3:MOV 20H,#0B0H
0270 MJUP1:将 20H中的字形码循环显示必须相对应,散转表中为双字节指令,则
A乘 2;若为三字节指令 LJMP DISP0,
则 A乘 3
MCS_51
4_1.ASM
发光二极管 LED
a
b
c
d
e
f g
dp
11111100
0FCH
01100000
60H
11110010
0F2H
11011001
0DAH
01100110
66H
……
a b dp
共阴极 LED
10011110
8EH
要使七段 LED管显示字符,必须输入相应字符的字形码。
分支结构程序的编制
A=0
语句组 1 语句组 2
语句组 3
JZ GO
MOV 20H,#0FFH
SJMP EEND
GO:MOV 20H,#00H
EEND,END
N
Y
不可缺少
A=0
语句组 1 语句组 2
语句组 3
JNZ GO
MOV 20H,#0FFH
SJMP EEND
GO:MOV 20H,#00H
EEND,END
N
Y
不可缺少分支程序主要是用条件转移指令来实现的,因此分支程序的关键是如何选择判断分支条件。通常,CPU将标志位作为判断的条件。分支程序的设计要点是:
1、必须先建立可供条件转移指令测试的条件,可以通过算术运算和逻辑运算等影响标志位的指令,设定标志位或累加器 A或片内 RAM某位的结果状态。如采用 JC指令,则必须事先执行影响 CY的指令。
2、正确选用条件转移指令,并注意在完成某分支后,必须使用 SJMP指令转出。
双向分支程序
ZZ,JNZ NZ
MOV 20H,#00H
SJMP EEND
NZ:CJNZ A,#80H,ZZ
SJMP FUSU
K1,JC ZSU
FUSU:MOV 20H,#01H
SJMP EEND
ZSU,MOV 20H,#0FFH
EEND,END 三处红色语句不可缺少例:若 A=0,则( 20H) =00H
A为正数,则( 20H) =0FFH
A为负数,则( 20H) =01H
执行 CJNZ指令时,
若 (A)>80H,则
CY=0;若 (A)<80H,
则 CY=1
返回
MCS_51 4_2.ASM
A=80H
语句组 1
语句组 2语句组 3
N
Y
C=1
语句组 4
A<80HA>80H
A=00H N
Y
多分支(散转)程序设计多分支的主要方法是采用分支表法关键指令,JMP @A+DPTR 73
相对转移 SJMP rel 80XX
绝对转移 LJMP addr 02XXXX
程序存储器
0256H
0257H
0258H
0259H
025AH
025BH
025CH
025DH
025EH
73
80
06
JMP @A+DPTR
SJMP DISP0
SJMP DISP1
SJMP DISP2
SJMP DISP3
80
80
80
0A
0E
12
025F DISP0,MOV 20H,#0C0H
0262 LJMP MJUP1
0265 DISP1,MOV 20H,#0F9H
0268 LJMP MJUP1
026B DISP2,MOV 20H,#0A4H
026E LJMP MJUP1
0271 DISP3,MOV 20H,#0B0H
0274 MJUP1:
+
当前 PC rel
新 PC0257H+A DPTR
新 PC
00H
0257H
02H
0259H
04
025BH
0259H 06H
025FH
025BH 0AH
0265H
02 0274
返回偏移的计算及转移范围
80
F7
2000
2001
2002 XX
rel(80H~0FFH)PC减小当前 PC=2002H
新 PC=2002+FFF7=1FF9H
XX1FF9H800720002001
2002 XX
rel(00H~7FH)PC增大当前 PC=2002H
新 PC=2002+07
=2009H
2009 XX
rel是相对地址是一个有符号的偏移量,其范围是 -128~+127,以补码的形式存放相对转移与绝对转移
页面:高 5位相同的地址称为同一页面。
SJMP rel:转移范围是 -128~+127,与页面无关。
AJMP addr11转移范围是本页面。
LJMP addr16转移范围是 64K空间的任意单元。
如果超过转移范围,系统将提示:
jump out of range(条件转移指令 JC,JNC,JZ,JNZ等 )
Jnmp out of page(无条件转移指令 )
00000 00000000000B
00000 11111111111B
00001 00000000000B
0800H
07FFH
0000H
00001 11111111111B
0FFFH
2K2K
0123H 01100001
01111000
011
0378H
0124H
00000 00100100011B
0111100000000
MCS51
作业五一填空
1、已知指令 AJMP addr11的机器码是 41FFH,指令所在的地址为 0810H,转移指令的目的地址为 。
2、已知指令 SJMP 70H所在的地址为 0100H,转移指令的目的地址为 。
3、已知指令 SJMP A0H所在的地址为 0100H,求转移指令的目的地址为 。
4、求指令 H,SJMP H的机器码为 80——。
二,Y=
2X X>0
2 X=0 (-28<X<63)
0 X<0
设 X存放在 R1中,Y送 R2。
题三提示,1、先判 A=0,再判 ACC.7=1
2、乘 2用移位指令第六次任务
--串行口与查表程序
(一)、知识点
1,单片机串行口的使用方法
2,串并转换的方法
3,查表程序的编制方法
(二)、重点
1,查表程序的编制方法
2,单片机串行口的使用方法第六次任务
--串行口与查表程序
一、实验目的
1,初步了解单片机串行口的使用方法
2,初步了解串并转换的方法
3,掌握查表程序的编制方法
二、实验设备
DVCC仿真系统一套、计算机一台。
三、实验内容
1,20H中为( 00~0FH) 中的一个数,在 LED上相应显示 0~9和 A~F。
2,查表求 0~9的平方。
3、查表求 0~7的阶乘。
四、实验线路返回五、实验程序程序一
ORG 0000H
START,MOV A,20H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
MOV R7,#07H
LOOP,DJNZ R7,LOOP
LCALL DELAY
SJMP START
TAB:DB 0FCH,60H,0DAH,0F2H
DB 66H,0B6H,0BEH,0E0H
DB 0FEH,0F6H,0EEH,3EH
DB 9CH,7AH,9EH,8EH
DELAY,。。。。
RET
END
五、实验程序查表求 0~9的平方
ORG 0000H
2000H START:MOV A,20H
2002H MOV DPTR,#TAB
2005H MOVC A,@A+DPTR
2006H TAB:
DB 00H,01H,04H,09H,16H
DB 25H,36H,49H,64H,81H
ORG 0000H
2000H MAIN,MOV A,20H
2002H ADD A,#02H
2004H MOVC A,@A+PC
2005H SJMP $
2007H TAB:
DB 00H,01H,04H,09H,16H
DB 25H,36H,49H,64H,81H
DPTR20H
04H 2006H+
200AH 16H
PC
20H
04H
2005H+
200BH 16H
+02H
06H
MCS_51 6_1.ASM6_2.ASM
TAB 0007
PC 0005
偏移量 2
-
串行口与串并转换串行,数据一位一位地输入输出。
波特率,每秒钟传输的位数。
两个 串行口数据缓冲器 通过特殊功能寄存器 SBUF来访问。写入
SBUF的数据储存在发送缓冲器,用于串行发送;从 SBUF读出的数据来自接收缓冲器。两个缓冲器共用 SBUF的地址。
8031的引脚 P3.0的第二功能为串行数据接收端( RXD); 引脚
P3.1的第二功能为串行数据发送端( TXD) 在本实验中串行数据通过 RXD输出,TXD输出移位时钟作为移脉冲输出端。
当执行指令 MOV SBUF,A一个数据写入串行口数据缓冲器 SBUF,
就开始发送。在此期间发送控制器 TXD送出移位信号,使发送移位寄存器的内容右移一位。直到最高位数字移出后,停止发送数据和移位脉冲。
波特率为 fosc/12(fosc为单片机振荡频率)
移位寄存器 74LS164实现 串并转换查表程序
MOVC A,@A+DPTR,表头可在 64K范围任何位置。
MOVC @A+PC,由于偏移量 (-128~+127),因此表头必须在范围之内。
偏移量等于表头地址减该指令后面指令的地址。
查表就是根据变量 x,在表格中查找 y,使 y=f(x),
这 f(x)可以是任意函数。因此查表程序用途极为广泛,如打印机打印,数据补偿、计算、转换等。
如求三角函数;温度测量的非线性补偿。具有程序简单、执行速度快等优点。
返回伪指令伪指令是非执行指令,它只是在对源程序进行汇编的过程中起某种控制作用。伪指令汇编后不产生目标代码,不影响程序的执行,故称伪指令。主要便于程序阅读、编写和修改。
1,ORG 用来设定程序或数据存储区的起始地址。一个源程序可以多次 ORG指令,但所规定的地址必须是从小到大,
不允许有重叠。
2,END 表示源程序结束。在 END后所写的指令,汇编程序都不予处理。一个程序只能有一个 END指令,放在程序末尾。
3,DB 从指定地址开始,定义若干字节数据或 ASCII码字符,常用于定义数据常数表。
4,DW 从指定地址开始,定义若干字节数据,常用于定义地址表。一个字占两个存储单元返回习题课
1,可位寻址区的地址范围是 ~,位地址为 23H是字节地址为的第 位 。
2.(PSW)= 00H,若设定寄存器 R0~R7工作在 2区,则 (PSW)= B。
3.若 P1口的 P1.3接地,其余均接高电平,执行下列指令后 (A)= 。
MOV P1,#0FFH
MOV A,P1
4.(A)=0EFH,(B)=08H,(PSW)=00010010B,执行 MUL AB 后,(A)=,
(PSW)= B。
5,将下列指令的寻址方式填在后面
MOV A,R0
XCH A,@R1
POP R0
6,设 (SP)= 07H,指令 ACALL DIS指令地址为 2030H,执行这个指令后,
(SP)=,(08H)= 。
7,HERE,SJMP HERE的机器码为 80
8,标号为 LABEL的语句首地址 2010H,则 AJMP LABEL的机器码为 。
9,在单片机扩展系统中三总线为,,。
74LS373常作为 器 。
写出下列指令:
1,将累加器 A的最高位置 1:
2,将累加器 A的内容压入堆栈:
3,将累加器 A的内容同指针 R0所指地址的内容交换:
4,将累加器 A的内容同与 R0中的内容相异或:
5,将 20H单元的内容清零:
6,从外部数据存储器读取数据
7,如果 20H=1就转移到标号 NEXT,且将 20H复位习题课
1、取 20H~26H中的无符号数的中值(中值滤波 )。
结果
2
3
5
13
27
32
90
7个数大循环 6次,即 N
个数大循环 M=N-1次用 R2表示大循环次数,
初始值为 6
第一次
5
13
3
90
27
32
2
小循环
6次第二次
5
3
13
27
32
2
90
小循环
5次第三次
3
5
13
27
2
32
90
小循环
4次第四次
3
5
13
2
27
32
90
小循环
3次第五次
3
5
2
13
27
32
90
小循环
2次第六次
3
2
5
13
27
32
90
小循环
1次用 R3控制小循环次数。
第一次小循环次数为 M,
以后依次递减。因此,
初始值可以用 R2表示。
用 R0为数据指针初始值为 20H
小循环体是分支程序:如果
(R0)<(R0+1),
则两者对换。
(R3) (R2)
(R0)=20H
(R0) (R0+1)
( R0)<(R0+1)
指向下一个数
(R3-1)=0
(R2-1)=0
(R2)=06H
结束
ORG 0000H
MOV R2,#06H
SORT:MOV A,R2
MOV R3,A
MOV R0,#20H
LOOP:
DONE:DJNZ R3,LOOP
DJNZ R2,SORT
SJMP $
MOV A,@R0
INC R0
PUSH A
CLR C
SUBB A,@R0
POP A
JC DONE
XCH A,@R0
DEC R0
MOV @R0,A
INC R0
2、查表法求 1~9的立方数子程序。 X在 A中,
结果高位存 R6,低位存 R7。
ORG 0000H
MOV DPTR,#TAB
CLR C
RLC A
PUSH A
MOVC A,@A+DPTR
MOV R6,A
POP A
INC A
MOVC A,@A+DPTR
MOV R7,A
RET
TAB,DW 0000H,
0001H,0008H,0027H,
0064H,0125H,0216H,
0343H,0516H,0729H
ORG 0000H
CLR C
RLC A
MOV R6,A
ADD A,
MOVC A,@A+PC
XCH A,R6
ADD A,
MOVC A,@A+PC
MOV R7,A
RET
TAB,DW 0000H,
0001H,0008H,0027H,
0064H,0125H,0216H,
0343H,0516H,0729H
#06H
#03H
第七次任务
--编程实验
一、实验目的
进一步掌握程序的编制和调试的方法
二、实验设备
DVCC仿真系统一套、计算机一台。
三、实验内容
1、将 20H~27H中的无符号数中的最大值、最小值存 28H、
29H中。
2,将 0~7的阶乘存入以 20H为首地址的内部 RAM中。
单片机最小系统小结
--硬件部分
1,单片机的总线系统
2,单片机的指令执行的过程
3,单片机的最小系统
4,单片机的存储器的配置
5,单片机并行口的功能
6,单片机串行口的输出过程
7,单片机外部存储器的编址
8,程序存储器与外部数据存储器的统一编址
9,程序状态寄存器 PSW中各位的含义
10,七段 LED显示器的显示原理总线系统配置
ROM RAM
指令
P口线选法 译码法
PSW
片内串行口
LED
64K
单片机最小系统小结
--软件部分
1、寻址方式
2、指令分类
3、伪指令
4、分支程序
5、循环程序
6、查表程序
7、子程序寻址指令伪指令双向 散转循环查表子程序第八次任务
--外部中断方式控制 LED
(一)、知识点
1,中断的概念
2,中断响应的过程
3,中断服务程序的编制方法
(二)、重点
1,中断响应的过程
2,中断服务程序的编制方法第八次任务
--外部中断方式控制 LED
一、实验目的
1,初步掌握中断的概念
2,初步了解外部中断的方法
3,掌握中断服务程序的编制方法
二、实验设备
DVCC仿真系统一套、计算机一台。
三、实验内容
1、当中断没发生时,8个 LED按间隔发光。当 P3.3 (INT1)为低电平时,8个 LED循环发光 16次。
2、将程序中的 CLR IT1改为 SETB IT1再运行。观察发生中断时与第一次有什么不同。
3、删除中断服务程序中的 PUSH ACC 和 POP ACC再运行。观察发生中断时与第一次有什么不同。
4、在 P3.3 (INT1)发生中断后,P3.2(INT0)中断,4个 LED循环发光 16次。
四、实验线路
P1.0
P1.1
P1.2
P1.3
P1.4
8031 P1.5
P1.6
P1.7
P3.3
+5V
+5V
LED0~LED7
1A1 1Y1
1A2 1Y2
1A3 1Y3
1A4 1Y4
2A1 2Y1
2A2 2Y2
2A3 2Y3
2A4 2Y4
74LS240
1G
2G
R0~R7
K
五、实验程序一
ORG 0000H
AJMP MAIN
ORG 0013H
SJMP ZD1
ORG 0020H
MAIN:CLR IT1
SETB EA
SETB PX1
SETB EX1
MOV A,#0AAH
HA1S1,MOV P1,A
AJMP HA1S1
DELAY,MOV R5,#0FFH
DELAY1,MOV R4,#0FFH
DJNZ R4,$
DJNZ R5,DELAY1
RET
ORG 0060H
ZD1,CLR EA
PUSH ACC
PUSH R0
SETB EA
MOV R0,#10H
MOV A,#0FFH
LOOP,MOV P1,A
ACALL DELAY
CPL A
ACALL DELAY
DJNZ R0,LOOP
CLR EA
POP R0
POP ACC
SETB EA
RETI
五、实验程序二
ORG 0000H
AJMP MAIN
ORG 0003H
SJMP ZD0
ORG 0013H
SJMP ZD1
ORG 0020H
MAIN:SETB IT0
SETB IT1
SETB EA
SETB PX0
SETB EX0
SETB EX1
MOV A,#0AAH
HA1S1,MOV P1,A
AJMP HA1S1
DELAY,MOV R5,#0FFH
DELAY1,MOV R4,#0FFH
DJNZ R4,$
DJNZ R5,DELAY1
RET
ORG 0060H
ZD0,CLR EA
PUSH ACC
PUSH R0
SETB EA
MOV R0,#10H
MOV A,#0FH
LOOP,MOV P1,A
ACALL DELAY
CPL A
ACALL DELAY
DJNZ R0,LOOP
CLR EA
POP R0
POP ACC
SETB EA
RETI
ORG 0080H
ZD1,CLR EA
PUSH ACC
PUSH R0
SETB EA
MOV R0,#10H
MOV A,#0FFH
LP,MOV P1,A
ACALL DELAY
CPL A
ACALL DELAY
DJNZ R0,LP
CLR EA
POP R0
POP ACC
SETB EA
RETI
返回中断的概念什么是中断,我们从一个生活中的例子引入。你正在家中看书,
突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。
中断即:计算机在运行某个进程的过程中,由于其它原因,有必要中止正在执行的进程,而去执行引起中断的事件进程,待处理完毕后,再回到被中止进程的被打断的地方继续执行。
CPU响应中断,进行中断处理类似于调用子程序。其区别在于:
由于引起中断的原因是随机发生的,因而转向中断服务程序进行中断处理也是随机的;而调用子程序,则是在程序中事先安排好的。
中断的优点:
1、实现分时操作。解决快速的 CPU与慢速的外设之间的矛盾。
2、实现实时处理。即对外来信号的及时响应并处理。
中断源什么可经引起中断,生活中很多事件可以引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了 …,等等诸如此类的事件,我们把可以引起中断的称之为中断源。
8031中一共有 5个:
两个外部中断,INT0(由 P3.2脚引入 ),INT1(由 P3.3脚引入 )
两个计数 /定时器中断,T0,T1
一个串行口接收或发送中断。 RI或 TI
中断源通常分为:
1、设备中断:由于计算机系统各组成部分的外部设备发生的中断申请。如键盘、打印机等。
2、定时时钟:定时提出中断申请。
3、故障源:由于系统的故障提出的中断申请。
4、程序性中断源:如为调试程序设置断点、单步工作等。
中断优先设置我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,
而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,
也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。
中断优先级中由中断优先级寄存器 IP来高置的,IP中某位设为 1,相应的中断就是高优先级,否则就是低优先级。
X X X PS PT1 PX1 PT0 PX0
串行口 T1 INT1 T0 INT0
优先基本规则:
1,低优先级中断源可被高优先级中断源所中断,而高优先级中断源不能被任何中断源所中断。
2、一种中断源一旦得到中断,与它同级的中断源不能再中断它若没设置优先级,则默认下列优先级:
INT0 最高
T0
INT1
T1
串行口中断 最低中断处理过程当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,
以便处理完中断后回到原来的地方继续往下执行程序。
因此,一个完整的中断过程包括:
中断申请
中断响应
中断处理
中断返回中断申请
INT0,外部中断 0请求,由 P3.2脚输入。通过外部中断 0触发方式控制位
IT0,来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便由硬件自动 IE0标志位置 1,向 CPU申请中断。
INT1,外部中断 1请求,由 P3.3脚输入。通过外部中断 1触发方式控制位
IT1,来决定中断输入信号是低电平有效还是负跳变有效。一旦输入信号有效,便由硬件自动 IE1标志位置 1,向 CPU申请中断。
IE1 IT1 IE0 IT0TCON
位地址 (H)
控制寄存器
8B 8A 89 88
IT1:外部中断 1触发方式控制位。 IT1=0时,外部中断 1控制为电平触发。
在电平触发方式中,INT1(P3.3)必须保持低电平,直到 CPU响应该中断为止,并且在该中断服务程序执行完毕之前,外部中断信号必须撤除,否则,将产生另一次中断。
IT1=1时外部中断 1触发方式为边沿触发方式。为使 CPU测到 (P3.3)中断请求信号由高到低的负跳变,外部中断源输入的高电平和低电平时间必须保持在 12个振荡周期以上。
IE1:外部中断 1请求标志。 IE1=1时,外部中断 1向 CPU请示中断,当
CPU响应中断时,由硬件自动清零(边沿触发方式)。如果是电平触发方式,则在 CPU执行完中断服务程序之前由外部中断源撤消有效电平,使
IE1清零。
中断响应条件中断响应的首要条件,
1、中断源发出中断申请。
2,CPU允许中断,即 EA=1。
3,申请中断的中断源允许中断,即相应有中断允许位为 1。
这样,单片机便在紧接着的下一个机器周期 S1的期间响应中断 。
否则,将丢弃中断查询的结果。
EX1为外部中断 1中断允许位。
EX1=1,允许外部中断 1中断; EX1=0,禁止外部中断 1中断。
EX0为外部中断 0中断允许位。
EX1=0,允许外部中断 1中断; EX1=0,禁止外部中断 0中断。
其次还要满足下列条件,
1、无同级或高级中断正在服务。
2、现行指令执行到最后一个机器周期且已结束。
3、若现行指令为 RETI或需访问特殊功能寄存器 IE或 IP的指令时,执行完该指令后,至少需要再执行完一条其它指令。
EA EX1 EX0IE
位地址 (H)
中断允许寄存器
AF AA A8
中断响应过程
INT0 0003H
T0 000BH
INT1 0013H
T1 001BH
串行口 0023H
如果中断响应条件满足且不存在阻止中断响应的情况,则 CPU
将响应中断。
1、首先置位相应的优先级状态触发器,用于 CPU开始处理的中断优先级别;
2、然后执行一个硬件子程序调用,把断点地址压入堆栈,再把与各中断源对应的中断服务程序首地址送程序计数器 PC;
3,同时清除中断请示标志;
4、从而控制程序转移到中断服务程序。
各中断源对应的中断服务程序首地址如右所示:
由于各中断源的入口地址之间只相隔 8个字节,通常在此处存放一条无条件转移指令 LJMP addr16,这 addr16就是真正中断服务程序的入口地址。
典型程序如右所示。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP ZD0
ORG 0013H
LJMP ZD1
中断处理中断服务程序从入口地址开始执行直到返回指令 RETI为止的整个过程称中断处理。
中断服务程序的一般流程如右图所示:
关中断保护现场开中断中断服务关中断恢复现场开中断
RETI
所谓现场是指进入中断服务程序之前,有关寄存器(如 ACC,PSW等)中的内容。
当在中断服务程序中也用到这些寄存器,
就会破坏它们的内容,一旦返回主程序,
就会造成主程序的混乱。因此进入中断服务程序后,应首先保护现场。在返回主程序前,应恢复现场。
在保护现场和恢复现场时,CPU不能响应新的中断请求。所以,此前要关中断,
此后再开中断,允许有更高优先级的中断打断它。
典型程序如右所示:
ORG 0080H
ZD1,CLR EA
PUSH ACC
PUSH R0
SETB EA
中断程序
CLR EA
POP R0
POP ACC
SETB EA
RETI
若现场信息不需要保护,则保护现场和恢复现场都可以省去。
中断返回和中断响应时间
CPU在每个机器周期的 S5P2期间采样 INT0和 INT1电平并锁存到 IE0或 IE1标志位上,而 CPU要在下一个机器周期才会查询这些标志位,这时若满足中断响应条件,CPU
便接着 LCALL,转到相应的中断入口。 LCALL指令需 2个机器周期,因此,从外部中断请求有效到开始执行中断服务程序的第一条指令之间至少需要 3个机器周期。
实验程序
RETI是中断服务程序的结束标志。
CPU执行这条指令后,对中断响应时置 1的优先状态触发器清零,然后将堆栈中保护的断点地址弹出到程序计数器
PC中,于是 CPU返回断点处继续执行主程序。
下面我们再回头读实验程序,一方面看看典型中断程序的结构,另一方面回顾一下整个中断的处理过程。
作业八
简述中断、中断源和中断源优先级的含义。
MCS-51有哪些中断源。优先顺序如何。
简述中断响应过程。
外部中断有哪两种触发方式,如何定义?
它们对触发脉冲或电平有什么要求?
第九次任务
--脉冲计数
(一)、知识点
1,定时器 /计数器的概念和结构
2,定时器的控制字
3,定时器的四种工作方式
(二)、重点
1,定时器的控制字
2,定时器的四种工作方式第九次任务
--脉冲计数
一、实验目的
1,熟悉 8031定时 /计数功能
2,掌握定时 /计数初始化编程方法二、实验设备
DVCC仿真系统一套、计算机一台。
三、实验内容
1、对定时器 0外部输入的脉冲进行计数,并送显示器显示。
( CONT.ASM)
2、用定时器 0实现 P1.0所控制的 LED每秒钟闪烁一次。
3、定时器 0外部输入的 5个脉冲,P1.0所控制的 LED闪烁一次。
四、实验线路
Vcc P2.0~P2.3
XTAL2
ALE
XTAL1
RST
8031
P0.7
|
P0.0
P1.0
EA PSEN
Vss
74LS373
Vcc
G
Q7
D7 |
| Q0
D0
GND
E
A11~A8
Vcc
Vpp
2764
A7~A0
D7~D0 CS
OE+5V
+5V
+5V
+5V
LED
3
8
8
+5V
用单片机点亮发光二极管 LED( 最小系统 )
五、实验程序一
ORG 0000H
CONT,MOV SP,#53H
MOV TMOD,#05H
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
CONT1:MOV R2,TH0
MOV R3,TL0
LCALL CONT2
MOV R0,#79H
MOV A,R6
LCALL PWOR
MOV A,R5
LCALL PWOR
MOV A,R4
LCALL PWOR
五、实验程序二
ORG 0000H
AJMP START
ORG 000BH
AJMP TIME0
ORG 0030H
START:MOV P1,#0FFH
MOV 30H,#00H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B7H
SETB EA
SETB ET0
SETB TR0
LOOP,AJMP LOOP
TIME0:PUSH ACC
PUSH PSW
INC 30H
MOV A,30H
CJNE A,#20,T_RET
T_L1,CPL P1.0
MOV 30H,#0
T_RET:MOV TH0,#3CH
MOV TL0,#0B7H
POP PSW
POP ACC
RETI
END
计数与定时
1、单片机中的定时器和计数器是一个东西,只不过计数器是记录的外界发生的事情,而定时器则是由单片机提供一个非常稳定的计数源。在 MCS51中有两个定时器 /计数器 T0,T1。
3、当定时器 /计数器发生溢出时,则向 CPU申请中断。
T0的中断入口地址是 000BH,T1的中断入口地址是 001BH
4、对定时器 /计数器预置常数,就可以控制发生溢出的时间或次数。且该常数愈大,发生溢出的时间愈短,次数愈少。
2、单片机中用工作方式来确定定时器 /计数器 TH,TL的容量。
方式 0,13位计数器;方式 1,16位计数器;方式 2:自动再装入 8位计数器 ;方式 3,T0为二个 8位计数器,T1对外停止计数一、计数概念的引入从选票的统计谈起:画“正”。这就是计数,生活中计数的例子处处可见。
例:录音机上的计数器、家里面用的电度表、汽车上的里程表等等,再举一个工业生产中的例子,线缆行业在电线生产出来之后要计米,也就是测量长度,怎么测法呢?用尺量?不现实,太长不说,要一边做一边量呢,怎么办呢?行业中有很巧妙的方法,用一个周长是 1米的轮子,将电缆绕在上面一周
,由线带轮转,这样轮转一周不就是线长 1米嘛,所以只要记下轮转了多少圈
,就可以知道走过的线有多长了。
二、定时
8031中的计数器除了可以作为计数之用外,还可以用作时钟,时钟的用途当然很大,如打铃器,电视机定时关机,空调定时开关等等,那么计数器是如何作为定时器来用的呢?
一个闹钟,将它定时在 1个小时后闹响,换言之,也可以说是秒针走了 3600次
,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间的确十分相关。那么它们的关系是什么呢?那就是秒针每一次走动的时间正好是 1秒。
三、计数器的容量从一个生活中的例子看起:一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴不断落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。录音机上的计数器最多只计到 999…,那么单片机中的计数器有多大的容量呢? 8031单片机中有两个计数器,分别称之为 T0和 T1,这两个计数器分别是由两个 8位的 RAM单元组成的,即每个计数器都是 16位的计数器,最大的计数量是 65536。
四、溢出让我们再来看水滴的例子,当水不断落下,盆中的水不断变满,最终有一滴水使得盆中的水满了。这时如果再有一滴水落下,就会发生什么现象?水会漫出来,用个术语来讲就是“溢出”。
水溢出是流到地上,而计数器溢出后将使得 TF0变为,1”。至于 TF0是什么我们稍后再谈。一旦 TF0由 0变成 1,就是产生了变化,产生了变化就会引发事件
,就象定时的时间一到,闹钟就会响一样。这个事件就是中断五、任意定时及计数的方法刚才已研究过,计数器的容量是 16位,也就是最大的计数值到 65536,因此计数计到 65536就会产生溢出。这个没有问题,问题是我们现实生活中,经常会有少于 65536个计数值的要求,如包装线上,一打为 12瓶,一瓶药片为 100粒,
怎么样来满足这个要求呢?如果是一个空的盆要 1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水,还需要 10000滴嘛?显然我们采用预置数的方法,我要计 100,那我就先放进 65436,再来 100个脉冲,不就到了 65536了吗。
定时器 /计数器的方式控制字振荡器 /12
T0引脚
C/T=0
C/T=1
K TL0
(5位 )
TH0
(8位 ) TF0
TR0
1 ≥1 &
INT0
引脚
GATE
定时器共有两个控制字,由软件写入 TMOD和 TCON二个 8位寄存器,用来设置 T0和 T1的工作方式和控制功能。系统复位时,两个寄存器各位清 0。
1、工作方式寄存器 TMOD( 89H)
GATE C/T M1 M0 GATE C/T M1 M0
T1 T0
M1 M0 工作方式
00 方式 0
01 方式 1
10 方式 2
11 方式 32、控制寄存器 TCON( 88H)
TF1 TR1 TF0 TR0 用于外部中断 定时器计数器
1 0 INT0
1
GATE=1时,还要求
INT0=1,TR0才能启动计数
INT0
0 1
1
1 GA E=0时,计数不受
I 控制,TR0=1就能启动计数
1
计数方式工作 -实验程序一分析
ORG 02A0H
CONT,MOV SP,#53H
MOV TMOD,#05H
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
CONT1:MOV R2,TH0
MOV R3,TL0
调二转十进制子程序结果送显示缓冲器调显示子程序
SJMP CONT1
置堆栈顶指针
0000 0 1 01
TMOD
M1M0=00
方式 0,13
位计数器
C/T=1
计数方式GATE=0仅 TR0=1
就可启动计数最大计数值 =213-T0初值
=8192-0=8192
启动计数定时方式工作 -实验程序二分析
ORG 0000H
AJMP START
ORG 000BH
AJMP TIME0
ORG 0030H
START:MOV P1,#0FFH ;关所有的灯
MOV 30H,#00H ;软件计数器预清 0
MOV TMOD,#01H ;T0工作方式 1
MOV TH0,#0ECH
MOV TL0,#78H ;预置数 60536
SETB EA ;开总中断允许
SETB ET0 ;开 T0允许
SETB TR0 ;T0开始计数
LOOP,AJMP LOOP ;等待中断
TIME0,PUSH ACC
PUSH PSW ; 保护现场
INC 30H; (30H)+1→ 30H
MOV A,30H
CJNE A,#64H,T_RET ;(30H)=100?
T_L1,CPL P1.0 ;到了,取反 P1.0
MOV 30H,#00H ;清软件计数器
T_RET,MOV TH0,#3CH
MOV TL0,#0B7H ;重置定时常数
POP PSW;恢复现场
POP ACC
RETI
END
思路,1秒 =1000ms=10ms× 100,因此定时器定时 t=10ms中断一次,
中断时使 30H的数加 1,加到 100时,P1.0取反,使 LED灭或亮。
关键是确定初值 x。 x =216- t /机器周期,晶振频率为 6Mz时,机器周期为 2
× 10-6秒。即 x =216- (10 × 10-3) /( 2 × 10-6) =60536=EC78H,所以,
TH0= 0ECH,TL0= 78H
计数中断方式工作 _实验程序三
ORG 0000H
AJMP START
ORG 000BH
CPL P1.0
RETI
ORG 0030H
START:MOV P1,#0FFH
MOV TMOD,#06H
MOV TH0,#0FBH
MOV TL0,#0FBH
SETB IT0
SETB EA
SETB ET0
SETB TR0
LOOP,AJMP LOOP
END
0000 0 1 10
TMOD
M1M0=10
方式 2,自动值初值的 8位计数器
C/T=1
计数方式GATE=0仅 TR0=1
就可启动计数启动计数负脉冲触发中断总允许允许计数器中断
T0初值 =28 -计数值
=256- 5 =251=0FBH
定时器 /计数器程序编制
1、选择工作方式和定时 /计数,确定 TMOD
2,根据定时时间或脉冲数计算初值,t=(2N-x) × 机器周期,N为指定工作方式下对应的计数器的位数。
3、编写程序。一般形式如下:
主程序
OGR 0000H
LJMP MAIN
ORG 000BH
LJMP T0
ORG 001BH
LJMP T1
ORG 0030H
START:MOV TMOD,#; 确定工作方式
MOV THx,#; 置初值
MOV TLx,#
MOV IE,#; 开中断
SETB TRx; 启动计数
LOOP:……… ; 执行正常程序
SJMP LOOP
中断服务程序
OGR xxxxH
T0:PUSH xx; 保护现场
MOV THx,#; 重置初值,
MOV TLx,#; 方式 2不要实际中断操作内容
POP xx; 恢复现场
RETI ; 中断返回作业八
1,P79 3。
2,P79 4。
3,P79 6。
4,P79 8
第十次任务
--串行通信
(一)、知识点
1,串行通信和异步通信的概念
2,MCS51串行口的组成和四种工作方式
3,波特率的概念和计算
4,初始化,发送和接收程序的编制
(二)、重点
1,异步通信的概念
2,串行口方式的初始化,发送和接收程序的编制第十次任务 --串行通信
一、实验目的
1,掌握串行口工作方式 2的程序设计,掌握单片机通信程序编制方法 。
2,了解实现串行通信的硬环境,数据格式的协议,数据交换的协议 。
掌握双机通信的原理和方法 。
二、实验设备
DVCC仿真系统二套。
三、实验内容
1、利用 8031单片机串行口,实现双机通信。
2、将 1号实验机键盘上键入的数字显示到 2号实验机的数码管上。
3、将 1号机内部 RAM50H~5FH中的数据发送到 2号机对应的内部 RAM中。
第九次任务
--串行通信
四、实验步骤
1、按图接线
2、两台 DVCC实验系统处于,P.”状态下。
3、在 1号机上输入 0D00后,按 EXEC键。
4、在 2号机上输入 0E30后,按 EXEC键。
5、从 1号机的键盘上输入数字键,会显示在 3号机的显示器上。
五、实验线路
8031 8031
U1 U2
P3.1
P3.1
P3.0
P3.0
GND GND
六、程序框图发送 开始置串行口模式置 TI模式及常数启动定时器显示 8031-1
有数字键按下发送键值发送完
N
N
Y
Y
接收 开始置串行口模式置 TI模式及常数启动定时器显示 8031-2
串行口有数据接收数据
N
Y
显示数据七、参考程序发送 ORG 0000H
LOOP0:MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV SCON,#0C0H
SETB TR1
MOV R0,#50H
MOV R7,#10H
LOOP1:MOV A,@R0
MOV C,P
MOV TB8,C
MOV SBUF,A
WAIT,JBC TI,LOOP2
SJMP WAIT
LOOP2,INC R0
DJNZ R7,LOOP1
接收 ORG 0000H
LOOP0:MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV SCON,#0C0H
SETB TR1
MOV R0,#50H
MOV R7,#10H
LOOP1,JBC RI,LOOP2
SJMP LOOP1
LOOP2,MOV A,SBUF
MOV @R0,A
INC R0
DJNZ R7,LOOP1
返回串行通讯的基本概念
1,单片机与外界进行信息交换称之为通讯。 8051单片机的通讯方式有两种:并行通讯和串行通讯。
2,并行通讯,数据的各位同时发送或接收。
3,串行通讯,数据一位一位顺序发送或接收。包括异步通讯和同步通讯。
4,通讯方向:在串行通讯中,把通讯接口只能发送或接收的单向传送方法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。
5,波特率:即数据传送的速率,其定义是每秒钟传送的二进制数的位数。
异步通讯
异步通讯:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:
在一帧格式中,先是一个起始位 0,然后是 8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位 1。用这种格式表示字符,则字符可以一个接一个地传送。
在异步通讯中,CPU与外设之间必须有两项规定,
即 字符格式 和 波特率 。字符格式的规定是双方能够在对同一种 0和 1的串理解成同一种意义。
同步通讯
同步通讯:在异步通讯中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,
为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
8051单片机的串行接口结构
8051串行接口是一个可编程的全双工串行通讯接口。它可用作异步通讯方式( UART),与串行传送信息的外部设备相连接,或用于通过标准异步通讯协议进行全双工的 8051多机系统也可以通过同步方式,使用 TTL或 CMOS移位寄存器来扩充 I/O口。
8051单片机通过引脚 RXD( P3.0,串行数据接收端)和引脚 TXD( P3.1,串行数据发送端)
与外界通讯。 SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被 CPU读出数据,一个只能被 CPU写入数据。
串行口的控制寄存器串行口控制寄存器 SCON用于定义串行口的工作方式及实施接收和发送控制。字节地址为 98H,其各位定义如下表:
D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 TR8 TI RI
SM0 SM1 工作方式 功能 波特率
00 方式 0 8位移位寄存器 fosc/12
01 方式 1 10位 UART 可变
10 方式 2 11位 UART fosc/64或 fosc/32
11 方式 3 11位 UART 可变工作方式位多机方式控制位接收允许控制位待发送数据的第九位接收到数据的第九位发送中断标志接收中断标志特别提示:除方式 0外,TI,RI在中断响应后,必须用软件清 0
SM2,多机通讯控制位。在方式 0时,SM2一定要等于 0。在方式 1中,当( SM2) =1则只有接收到有效停止位时,RI才置 1。在方式 2或方式 3当( SM2) =1
且接收到的第九位数据 RB8=0时,RI才置 1。
REN,接收允许控制位。由软件置位以允许接收,又由软件清 0来禁止接收。
TB8,是要发送数据的第 9位。在方式 2或方式 3
中,要发送的第 9位数据,根据需要由软件置 1
或清 0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。
RB8,接收到的数据的第 9位。在方式 0中不使用 RB8。 在方式 1中,若( SM2) =0,RB8为接收到的停止位。在方式 2或方式 3中,RB8为接收到的第 9位数据。
TI,发送中断标志。在方式 0中,第 8位发送结束时,
由硬件置位。在其它方式的发送停止位前,由硬件置位。 TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。
TI必须用软件清 0。
RI,接收中断标志位。在方式 0,当接收完第 8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于 SM2的说明)。
RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。 RI也必须用软件清 0。
程序解读 —发送程序发送 ORG 0000H
LOOP0:MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV SCON,#0C0H
SETB TR1
MOV R0,#50H
MOV R7,#10H
LOOP1:MOV A,@R0
MOV C,P
MOV TB8,C
MOV SBUF,A
WAIT,JBC TI,LOOP2
SJMP WAIT
LOOP2,INC R0
DJNZ R7,LOOP1
0 0 1 0 0 0 0 0
定时工作方式 工作方式 2
定时器 1 定时器 0;定时器 1方式 2定时;置定时器初值,选定波特率为 9600bps
1 1 0 0 0 0 0 0
通信方式 3:为波特率可变的
11位 UART方式。 1个起始位,0”,8个数据位,一个附加第 9位(在 TB8中)和 1
个停止位,1”
SM0 SM1 SM2 REN TB8 TR8 TI RI
不允许多机通信不允许发送禁止中断;选择通信方式 3;启动计数;指针指向待发送数据所在的地址; R7为长度计数器,共 10H个数;待发送数传送到 A;奇偶标志传送到 CY;再传送到 TB8信为第九位;通过 SBUF发送;等待发送完毕,并使 TI复位TI=0,表示没发送完毕,继续等待;
TI=1,表示发送完毕,令 TI=0,并转移到 LOOP2;指向下一个待发送的数 ;数据没发送完毕,继续;完毕则结束置定时器初值,选定波特率为 9600bps
SMOD=0或 1
)2 5 6(1232
2
31
X
f o scS M O D

波特率和串行口方式程序解读 —接收程序接收 ORG 0000H
LOOP0:MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV SCON,#0C0H
SETB TR1
MOV R0,#50H
MOV R7,#10H
LOOP1,JBC RI,LOOP2
SJMP LOOP1
LOOP2,MOV A,SBUF
JB PSW.0,ONEE
JB RB8,ERRR
SJMP RIGT
ONEE,JNB RB8,ERRR
RIGT,MOV @R0,A
INC R0
DJNZ R7,LOOP1
ERRR,.…,.;定时器 1方式 2定时;置定时器初值,选定波特率为 9600bps;选择通信方式 3;启动计数;指针指向待发送数据所在的地址; R7为长度计数器,共 10H个数;等待 R接收完毕,并使 RI复位;接收到的数传送到 A;接收到的数是奇数,转移到 ONEE;是偶数,若 RBB=1,则接收错误,转 ERRR;是偶数,RBB=0,则接收正确,转 RIGT;是奇数,若 RBB=0,则接收错误,转 ERRR;接收正确,存入指定地址;地址指针加 1;没接收完,则继续接收,否则结束;接收错误处理程序作业
P95 1
P95 5
P95 6
第十一次任务
--用 TTL芯片扩展并行 I/O口
(一)、知识点
1,接口的概念
2,接口的功能
3,I/O的编址技术
4,I/O数据传送的控制方式
5,用 TTL芯片扩展并行 I/O口
( 二 ),重点
1,接口的功能
2,I/O的编址技术
3,用 TTL芯片扩展并行 I/O口第十一次任务
--用 TTL芯片扩展并行 I/O口
一、实验目的
学习在单片机系统 中 用 TTL芯片扩展并行 I/O口 的基本 方法
二、实验内容
1、总线扩展法:采用 74LS244作扩展输入,输入开关的状态; 74LS373作扩展输出,控制 8个
LED的亮灭。
2、利用 74LS164串并转换扩展,在数码管上循环显示 0~9。 实验线路 2
三、实验线路 1
返回
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
8031
WR
P2.6
P2.5
P2.4
RD
+5V
LED0~LED7
1A1 1Y1
1A2 1Y2
1A3 1Y3
1A4 1Y4
2A1 2Y1
2A2 2Y2
2A3 2Y3
2A4 2Y4
74LS240
1G
2G
R0~R7
D1 Q1
D2 Q2
D3 Q3
D4 Q4
D5 Q5
D6 Q6
D7 Q7
D8 Q5
74LS373
CLK
CLR
1Y1 1A1
1Y2 1A2
1Y3 1A3
1Y4 1A4
2Y1 2A1
2Y2 2A2
2Y3 2A3
2Y4 2A4
74LS244
1G
2G
≧ 1
≧ 1
+5V GND
74LS
138
四、参考程序程序一
ORG 0600H
HA3S:MOV DPTR,#0A000H
MOVX A,@DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
MOV R2,#20H
ACALL DELAY
SJMP HA3S
DELAY:。。。。。。
RET
END
程序二
ORG 0000H
ADDR EQU 20H
START,MOV A,ADDR
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
MOV R7,#07H
LOOP,DJNZ R7,LOOP
LCALL DELAY
SJMP START
TAB:DB 0FCH,60H,0DAH,0F2H
DB 66H,0B6H,0BEH,0E0H
DB 0FEH,0F6H,0EEH,3EH
DB 9CH,7AH,9EH,8EH
DELAY,。。。。。。
RET
END
接口与端口的概念接口则特指计算机与外设之间在数据传送方面的联系 。 其功能主要是通过电路实现的 。 因此称之为接口电路 。
一个接口电路中可能包括有多个口,例如保存数据的数据口,保存状态的状态口和保存命令的命令口等,因此一个接口电路就对应着多个端口地址 。
端口是供用户使用的,用户在编写有关数据输入 /输出程序时,要用到接口电路中的各个端口 。
因此要知道它们的设置和编址情况 。
接口的功能
1,速度协调由于 CPU与外设速度上的差异,使得数据的 I/O传送只能在确认外设已为数据传送作好准备的前提下才能进行 I/O操作 。 而要知道外设是否准备好,就需要通过接口电路产生或传送外设的状态信息,以此进行 CPU与外设之间的速度协调 。
2,数据锁存在接口电路中需设置锁存器,以保存输出数据直至为输出设备所接收 。 因此数据锁存就成为接口电路的一项重要功能 。
3,三态缓冲只允许当前时刻正在进行数据传送的数据源使用数据总线,
其它数据源都必须与数据总线处于隔离状态 。 为此要求接口电路能为数据输入提供三态缓冲功能 。
4,数据转换需要使用接口电路进行数据信号的转换 。 其中包括,D/A 转换,A/D转换,串 / 并转换和并 / 串转换等 。
I/O编址技术在计算机中,凡需进行读写操作的设备都存在着编址的问题 。 具体说在计算机中有两种需要编址的部件,一种是存储器,另外一种就是接口电路 。 存储器是对存储单元进行编址,而接口电路则是对其中的端口进行编址 。 对端口编址是为 I/O操作而进行的,因此也称为 I/O编址 。 常用的 I/O编 址共有两 种方式,即独立编 址方式和统一编 址方式 。 80C51使用统一编址方式 。
⑴ 独立编址方式优点是 I/O地址空间和存储器地址空间相互独立,但需要专门设置一套 I/O指令和控制信号,从而增加了系统的开销 。
(2) 统一编址方式统一编址就是把系统中的 I/O和存储器统一进行编址 。 在这种编址方式中,把接口中的寄存器 ( 端口 ) 与存储器中的存储单元同等对待 。 为此也把这种编址称之为存储器映像编址 。
I/O数据传送的控制方式为了实现数据的输入输出传送,共有四种控制方式 。 在单片微机中主要使用以下三种方式 。
1,无条件传送方式在进行 I/O操作时,不需要测试外部设备的状态,可以根据需要随时进行数据传送操作 。 一般用于具有常驻的或变化缓慢的数据信号的外部设备如机械开关,指示灯,发光二极管,
数码管等,以及工作速度非常快,足以和 CPU同步工作 的外部设备如数 /模转换器 。
2,程序查询方式为了实现查询方式的数据输入输出传送,需要由接口电路提供外设状态,并以软件方法进行状态测试 。
4 程序中断方式采用中断方式进行数据传送时,当外设为数据传送作好准备之后,就向 CPU发出中断请求 。 CPU响应中断后,再继续执行被中断的原程序 。
例例
80C51的 I/0扩展
并行扩展的 I/O芯片采用并行三总线的扩展方式和串行口扩展方式。
由于 80C51的外部数据存储器 RAM和 I/ O口是统一编址的,因此用户可以把外部 64k字节的数据存储器 RAM空间的一部分作为扩展外围 I/ O的地址空间。这样,单片微机就可以像访问外部 RAM存储器那样访问外部接口芯片,对其进行读/写操作。
总线图串行总线扩展法在单片机应用系统中,经常采用
TTL电路或 CMOS电路锁存器和三态门作为 I/O口扩展芯片,这类芯片常用的有,373,273,244、
245等。一般通过 P0口扩展
ORG 0600H
HA3S:MOV DPTR,#0A000H
MOVX A,@DPTR
MOV DPTR,#0B000H
MOVX @DPTR,A
MOV R2,#20H
ACALL DELAY
SJMP HA3S
DELAY:。。。。。。
RET
END
74LS244的地址赋给地址指针 DPTR,Y2=0。
WR
P2.6
P2.5
P2.4
RD
≧ 1
74LS
138
≧ 1
74LS
373
CLK
74LS
244
G
8031
Y3
Y2
P2.7 P2.6P2.5P2.4 值 Y2 Y3
1 0 1 0 A 0 1
1 0 1 1 B 1 0
该指令使 WR引脚产生一个负跳变信号,使 G=0,即
244有效,将开关状态读入累加器 A
74LS373的地址赋给地址指针 DPTR,
Y3=0。
该指令使 RD引脚产生一个负跳变信号,使 CLK=0,即
373有效,将累加器 A的值输出给 373。
串行口扩展方式
ORG 0000H
ADDR EQU 20H
START,MOV A,ADDR
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
WAIT,JNB TI,WAIT
CLR TI
MOV R7,#07H
LOOP,DJNZ R7,LOOP
LCALL DELAY
SJMP START
TAB:DB 0FCH,60H,0DAH,……
DELAY,……
RET
END
典型线路在 MCS51应用系统中,若串行口未被占用,则可用串行口的工作方式 0来扩展并行 I/O
口。它不占用片外 RAM的地址。
用串行口扩展并行 I/O口常用的芯片是移位寄存器,如
74LS164,74LS165等。典型线路如图所示。
相应程序如右所示:
复位时 SCON=00H
方式 0、禁止中断、
禁止接收第十二次任务
--并行接口 8255控制交通灯
(一)、知识点
1,8255内部结构
2,8255的工作方式
3,8031与 8255A的接口
(二)、重点
1,8255的工作方式
2,8031与 8255A的接口第十二次任务
--并行接口 8255控制交通灯
一、实验目的
了解 8255芯片的结构及编程方法,学习交通灯控制的实现方法
二、实验内容用 8255做输出口,控制 12个发光二极管亮灭,模拟交通灯管理。初始状态 0为东西红灯,南北红灯。然后实现状态 1-2-3-4-1的循环。
状态 1:东西绿灯,南北红灯状态 2:东西绿灯灭,黄灯闪烁几次,南北红灯状态 3:东西红灯,南北绿灯状态 4:东西红灯,南北绿灯灭,黄灯闪烁几次三、实验线路
D0 PB.0
D1 PB.1
D2 PB.2
D3 PB.3
D4 PB.4
D5 PB.5
D6 PB.6
D7 PB.7
8255
A0 PC.0
A1 PC.1
RD PC.2
WR PC.3
CS PC.4
RESET PC.5
PC.6
PC.7
+5V
LED1~LED8
1A1 1Y1
1A2 1Y2
1A3 1Y3
1A4 1Y4
2A1 2Y1
2A2 2Y2
2A3 2Y3
2A4 2Y4
74LS240
1G
2G
R0~R7
+5V
1A1 1Y1
1A2 1Y2
1A3 1Y3
1A4 1Y4
2A1 2Y1
2A2 2Y2
2A3 2Y3
2A4 2Y4
74LS240
1G
2G
R0~R7
LED9~LED12
D0
D1
D2
D3
D4
D5
D6
D7
RD
WR
P2.0
RESET
74LS
3738031
8255A是一个 40引脚的双列直插式集成电路芯片 。
按功能可把 8255A分为三个逻辑电路部分,即,口电路,总线接口电路和控制逻辑电路 。
1,口电路
8255A共有三个 8位口,其中 A口和 B口是单纯的数据口,
供数据 I/O使用 。 而 C口则既可以作数据口,又可以作控制口使用,
用于实现 A口和 B口的控制功能 。
数据传送中 A口所需的控制信号由 C口高位部分 ( PC7~
PC4) 提供,因此把 A口和 C口高位部分合在一起称之为 A组;同样理由把 B口和 C口低位部分 ( PC3~ PC0) 合在一起称之为 B组 。
8255A的逻辑结构和信号引脚结构图
2,总线接口电路总线接口电路用于实现 8255A和单片微机的信号连接。
其中包括,数据总线缓冲器和读 /写控制逻辑电路 。
数据总线缓冲器是一个三态双向 8位缓冲器,作为单片机与 I/O口和控制字寄存器之间的缓冲器读 /写控制逻辑电路输入的控制信号有,CS—片选信号,
RD—读信号和 WR—写信号 。 A0,A1—端口选择信号 。
8255A共有四个可寻址的端口 ( 即 A口,B口,C口和控制寄存器 ),用二位地址编码即可实现选择 。 RESET—复位信号 ( 高电平有效 ) 。 复位之后,控制寄存器清除,各端口被置为输入方式 。
3,控制逻辑电路控制逻辑电路包括 A组控制和 B组控制,合在一起构成 8
位控制寄存器 。 用于存放各口的工作方式控制字 。
8255A的逻辑结构和信号引脚 结构图
I/O工作状态
8255A共有三种工作方式,即方式 0,方式 1,方式 2.
1,方式 0 基本输入 /输出方式方式 0下,可供使用的是两个 8位口 ( A口和 B口 ) 及两个 4
位口 ( C口高 4位部分和低 4位部分 ) 。 四个口可以是输入和输出的任何组合 。 方式 0适用于无条件数据传送,也可以把 C口的某一位作为状态位,实现查询方式的数据传送 。
8255A工作方式
3、方式 2 双向数据传送方式只有 A口才能选择这种工作方式,这时 A口既能输入数据又能输出数据。在这种方式下需使用 C口的五位线作控制线。
方式 2适用于查询或中断方式的双向数据传送。如果把 A口置于方式 2下,则 B口只能工作于方式 0.
2、方式 1 选通输入 /输出方式
A口和 B口分别用于数据的输入 /输出。而 C口则作为数据传送的联络信号。 方式 1适用于查询或中断方式的数据输入 /输出。
C口定义用于输入操作的联络信号有:
STB—选通脉冲,输入,低电平有效 。 当外设送来 STB信号时,
输入数据装入 8255A的锁存器 。
IBF—输入缓冲器满信号,输出,高电平有效 。 IBF信号有效,
表明数据已装入锁存器,因此它是一个状态信号 。
INTR—中断请求信号,高电平有效,当 IBF为高,信号由低变高 (后沿 )时,中断请求信号有效 。 向单片微机发出中断请求 。
数据输入过程,当外设准备好数据输入后,发出信号,输入的数据送入缓冲器。然后 IBF信号有效。如使用查询方式,则 IBF
即作为状态信号供查询使用;如使用中断方式,当 信号由低变高时,产生 INTR信号,向单片微机发出中断。单片微机在响应中断后执行中断服务程序时读入数据,并使 INTR信号变低,
同时也使 IBF信号同时变低。以通知外设准备下一次数据输入。
数据输入操作
C口定义数据输出操作用于数据输出操作的联络信号有:
ACK—外设响应信号,输入,低电平有效。当外设取走输出数据,并处理完毕后向单片微机发回的响应信号
OBF—输出缓冲器满信号,输出,低电平有效 。 当单片微机把输出数据写入 8255A锁存器后,该信号有效,并送去启动外设以接收数据 。
INTR—中断请求信号,输出,高电平有效 。
数据输出过程:外设接收并处理完一组数据后,发回 ACK信号 。 该信号使 OBF变高,表明输出缓冲器已空 。 如使用查询方式,则 OBF可作为状态信号供查询使用;如使用中断方式,
则当 ACK信号结束时,INTR有效,向单片微机发出中断请求 。 在中断服务过程中,把下一个输出数据写入 8255A的输出缓冲器 。 写入后 OBF有效,表明输出数据已到,并以此信号启动外设工作,取走并处理 8255A中的输出数据 。
C口定义
8255A是可编程接口芯片,共有两种控制字,即 8255A
工作方式控制字和 C口位置位 /复位控制字 。
1,工作方式控制字工作方式控制字用于确定各口的工作方式及数据传送方向 。
8255A的控制字工作方式控制字
2,C口位置位 /复位控制字
C口的每一位都可以进行置位或复位。对 C口各位的置位或复位是由位置位 /复位控制字进行的。 D7是该控制字的特征位,
其状态固定为 0。在使用中,控制字每次只能对 C口中的一位进行置位或复位。 C口位控制字
8255A与 80C51的接口及工作方式 0
ORG 0630H
HA4S:MOV SP,#60H
MOV DPTR,#0FF2BH
MOV A,#80H
MOVX @DPTR,A
MOV DPTR,#0FF29H
MOV A,#49H
MOVX @DPTR,A
INC DPTR
MOV A,#49H
MOVX @DPTR,A
调延时子程序
HA4S3,根据要求向 B口和 C口输出数据调延时子程序
……
SJMP HA4S3;指向控制口;写控制命令,A,B,C口均输出,方式 0
1 0 0 0 0 0 0 0
C口下半部输出
B口输出方式 0
C口上半部输出
A口输出方式 0
置方式标志有效;将控制命令写入工作方式控制字寄存器;指向 B口; 49H=01001000B; 49H送到 B口,东西红灯亮;地址指针加 1,FF2AH,指向 C口; 49H送到 C口,南北红灯亮
8255初始化
8255A的初始化例设 8255A的 A口为工作方式 1输入,B口和 C口下半部分为工作方式 0输出,
PC3经非门接 8031的 INT0脚,以中断方式工作,试写初始化程序。
HA4S:MOV SP,#60H
MOV DPTR,#0FF2BH
MOV A,
MOVX @DPTR,A
MOV A,
MOVX @DPTR,A
SETB EA
STEB IT0
。。。。。。
1 0 1 1 0 0 0 0
C口下半部输出
B口输出方式 0
C口上半部输出
A口输入方式 1
置方式标志有效
0 0 0 0 1 0 0 0
复位
PC3
(INTRA)
不用位操作标志有效
INTRA
=0
#0B0H
#09H
返回作业
1,8255A有几种工作方式,它们的功能是什么?
2、设 8255A的 A口为工作方式 2输出,B口为工作方式 0输入,C口剩余口为方式 0输出,试写初始化程序。(口地址同上课)
3,8255A与 8031接线如图所示,写出其全部口地址
A7
A6
P2.5
A1
A0
CS
第十三次任务
--A/D,D/A转换
(一)、知识点
1,常用 A/D,D/A转换的芯片
2,A/D,D/A转换的程序编制
3,A/D,D/A转换芯片与 8031的接口
(二)、重点
1,A/D,D/A转换的程序编制
2,A/D,D/A转换芯片与 8031的接口第十三次任务 --A/D,D/A转换
一、实验目的
1,掌握 A/D,D/A转换与单片机的接口方法 。
2,了解 A/D 转换芯片 0809转换性能及编程方法 。
3,了解 D/A转换芯片 0832转换性能及编程方法,
4,了解单片机如何进行数据采集 。
二、实验内容
1、由实验仪上的 W1电位器提供模拟量输入,通过 0809转换为数字量,并在二位七段数码管显示器显示。
2、利用 0832输出一个从 -5V开始逐渐升到 0V,
再逐渐升到 5V,再从 5V开始逐渐降到 0V,再逐渐降到 -5V的锯齿波电压。
三、实验线路 ( A/D部分)
CLK
ADDA
ADDB
ADDC
ADC0809
DB0 IN-0
DB1 IN-1
DB2 IN-2
DB3 IN-3
DB4 IN-4
DB5 IN-5
DB6 IN-6
DB7 IN-7
START ref(-)
ALE
ref(+)
OE
8031
ALE
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
WR
P2.7
RD
≥ 1
≥ 1
Vi0
Vi7
G 74LS373
D Q
C Q
三、实验线路 ( D / A 部分)
ILE=1,WR2=0,
WR1=0 CS=0,Xfer=0
返回四、参考程序 ( A/D部分)
ORG 06D0H
START,MOV A,#00H
MOV DPTR,#9000H
MOVX @DPTR,A; 启动 A/D转换
MOV A,#00H
MOV SBUF,A
MOV SBUF,A; 清两个数码管
MOVX A,@DPTR; 读转换结果
DISP,MOV R0,A; 查表显示结果
ANL A,#0FH; 显示低四位
LP,MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
MOV R7,#0FH; 延时
H55S,DJNZ R7,H55S
MOV A,R0; 显示高四位
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV SBUF,A
MOV R7,#0FH
H55S1,DJNZ R7,H55S1
LCALL DELAY
AJMP START
TAB:DB ……,
DELAY:……
RET
END
四、参考程序 ( D / A 部分)
ORG 0740H
HA6S:MOV SP,#53H
HA6S1:MOV R6,#00H
HA6S2:MOV DPTR,#8000H
MOV A,R6
MOVX @DPTR,A
MOV R2,#0BH
LCALL DELAY
INC R6
CJNE R6,#0FFH,HA6S2
HA6S3:MOV DPTR,#8000H
DEC R6
MOV A,R6
MOVX @DPTR,A
MOV R2,#0BH
LCALL DELAY
CJNE R6,#00H,HA6S3
SJMP HA6S1
DELAY:……
RET
END
D/A转换器的基本功能和主要性能指标主要性能指标分辨率 --指最小输出电压 (对应的输入数字量只有最低有效位为 1)
与最大输出电压之比。或用数字输入信号的有效位表示,如 8位、
12位。
线性度 --非线性误差,即理想的输入 /输出特性的偏差与满刻度输出之比的百分数。如 ≤± 0.02% FSR(满刻度英文缩写 )
转换精度 --以最大的静态转换误差的形式给出。精度是指转换后的实际值与理想值的接近程度。与分辨率是不同概念
建立时间 --DAC中的数入代码有满度值变化,其输出模拟电压
(电流 )达到满刻度值± 1/2LSB或与满刻度值差百分之多少时所需时间。
D/A转换器的基本功能 是将一个用二进制表示的数字量转换成相应的模拟量。实现这种转换的基本方法是对应于二进制的每一位,产生一个相应的电压,而这个电压的大小则正比于二进制的权。
DAC0832简介
⒈ DAC0832的技术特性输入数字量为 8位,逻辑电平与 TTL兼容,参考电压 Vref的工作范围为+ 10~- 10 V,单电源电压 Vcc的范围为+ 5V~+
15V,电流建立时间为 1μs,CMOS工艺,低功耗 20mW,20脚双列直插式封装,具有单缓冲,双缓冲和直通三种数据输入工作方式 。
⒉ DAC0832的内部逻辑结构数/模转换器 DAC0832的内部逻辑结构如图所示。芯片内有一个 8位输入寄存器,一个 8位 DAC寄存器,形成两级缓冲结构。这样可使 DAC转换输出前一个数据的同时,将下一个数据传送到 8位输入寄存器,以提高数/模转换的速度。在一些场合 (比如 X-Y绘图仪的单片微机控制 ),能够使多个数模转换器分时输入数据之后,同时输出模拟电压。
结构
DAC0832的引脚及其功能
CS,片选,低电平有效。与 ILE信号结合,可对 WR1 是否起作用进行控制。
ILE,允许数据输入锁存,高电平有效 。
WR1,写信号 1,输入,低电平有效 。 用于将 CPU数据总线送来的数据锁存于输入寄存器中,1有效时,和 ILE必须同时有效 。
WR2,写信号 2,输入,低电平有效,用于将输入寄存器中的数据传送到
DAC寄存器中,并锁存起来 。 当 2有效时,也必须同时有效 。
XFER,传送控制信号,低电平有效 。 用来控制 WR2,选通 DAC寄存器 。
DI7~ DI0,8位数字输入,DI7为最高位,DI0为最低位。
Iout1,DAC电流输出 1,当数字量为全 1时,输出电流最大;当数字量为全
0时,输出电流最小。
Iout2,DAC电流输出 2
Rfb,反馈电阻 (15KΩ),已固化在芯片中。因为 DAC0832是电流输出型
D/A转换器,为得到电压输出,使用时需在二个电流输出端接运算放大器。
Rfb作为运算放大器反馈电阻,为 DAC提供电压输出。
Vref,参考电压输入,通过它将外加高精度电压源与内部的电阻网络相连接 。 Vref可在+ 10~一 10V范围内选择 。
VCC,数字电路电源 。
DGND,数字地 。
AGND,模拟地 。
引脚所谓单缓冲方式就是使 DAC0832内部的输入寄存器或
DAC寄存器中有一个处于直通方式,另一个处于受控的锁存状态,或者二个寄存器同时处于受控的锁存状态 。 要使输入寄存器处于直通方式,应使 ILE=1,CS=0,WR1=0。 要使
DAC寄存器处于直通方式,应使 XFER=0,WR2=0。
DAC0832的 单缓冲方式
ORG 0030H
MAIN,MOV DPTR,#7FFFH
MOV R0,#0
LP,MOV A,R0
MOVX @DPTR,A
INC R0
SJMP LP
CS=XFER=0,使 0831被选中,且选通 WR2。
例,产生锯齿波。 DAC0832为单缓冲方式,输入寄存器和 DAC
寄存器同时受控锁存。 DAC0832的地址为 7FFFH(P2.7=0) 。
置转换初值该指令使 WR产生负跳变,使
WR1=WR2=0,数据输入到输入锁存器,并输出与输入数据对应的电流。
待转换值加 1
对于多路 D/A转换接口,必须采用双缓冲同步方式实现同步
D/A转换输出 。 CPU分时地向各路 D/A转换器输送待转换的数字量,并锁存在各自的输入寄存器中;然后 CPU对所有的 D/A
转换器发出控制信号,使各个 D/A转换器同步输出 。
P2,7同时控制二片 DAC0832的第二级缓冲,地址为 7FFFH。
若第一片的数据在 R0中,第二片的数据在 R1中 。
DAC0832的双缓冲方式此时送数程序为:
MOV DPTR,#0DFFFH
MOV A,R0
MOVX @DPTR,A
MOV DPTR,#0BFFFH
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#7FFFH
MOVX @DPTR,A
把数据送第一片
0832的输入锁存器把数据送第二片
0832的输入锁存器二片 0832同时输出模拟量电路主要技术指标
分辨率 ∶ 输出数字量变化一个相邻数码所需输入模拟电压的变化量。定义为满刻度电压与 2n之比值 (n为 ADC的位数 )
量化误差 ∶ 在不计其他误差情况下,一个分辨率有限的 ADC的阶梯状转移曲线与具有无限分辨率的 ADC的阶梯状转移曲线 (直线 )之间的最大偏差。是固有的。
误差 ∶ 偏移误差 (输入为 0,输出不为 0),满刻度误差
线性度 ∶ 实际的转移函数与理想直线的最大偏移。
精度 ∶ 绝对精度、相对精度
转换速率 ∶ 能够重复进行数据转换的速度,即每秒转换次数。
A/D转换器的作用及主要技术指标作用
A/D转换器能把输入的模拟信号转化成数字形式,这样微处理机能够从传感器,变送器或其他模拟信号获得信号 。
8位 ADC0809简介
ADC0809的主要技术指标
ADC0809是采用 CMOS工艺制成的 8位 8通道逐次逼近式模数转换器,可实现对 8路模拟信号的分时进行 A/D转换,其转换时间为 100μs左右 。 可用单一电源供电,此时模拟电压输入范围为 0~ 5V,无需调零和满刻度调整 。 分辨率为 8位 。 非调整误差为 ± 1LSB。 三态锁存输出 。 低功耗为 15mW。 采用 28脚
DIP封装,
ADC0809的内部逻辑结构
ADC0809的内部结构逻辑框图示于 图 12- 4。从逻辑框图中可看到,ADC0809芯片包 含一个 8路模拟开关、模拟开关的地址锁存和译码电路、比较器,256R电阻网络、电子开关逐位比较寄存器 SAR,三态输出锁存缓冲器以及控制与定时电路等。
图 12_4
·ADD A,ADD B,ADD C,模拟通道的地址选择线,输入 。
·ALE,地址锁存允许信号,输入 。 由低到高的正跳变有效,此时锁存地址选择线的状态,从而选通相应的模拟通道,以便进行 A/D转换 。
2–1~ 2–8:数字输出线,输出 。 2–8为最低位,2–1为最高位 。
·IN0~ IN7,模拟量输入通道,信号为单极性,电压范围 0~ VCC。 若信号过小还需加以放大。在 A/D 转换过程中模拟量的值不应变化,对变化速度快的模拟量,在输入前应增加采样保持电路。
·START,启动信号,输入,高电平有效 。 为了启动转换,在此端上应加一正脉冲信号 。 脉冲的上升沿将内部寄存器全部清 0,在其下降沿开始转换 。
EOC,转换结束信号,输出,高电平有效 。 在 START信号的上升沿之后 0~ 8个时钟 周期内,EOC变为低电平 。 当转换结束时,EOC变为高电平,这时转换得到的数据可供读出 。
·OE,输出允许信号,输入,高电平有效 。 当 OE有效时,A/D的输出锁存缓冲器开放,将其中的数据放到外面的数据线上 。
·CLK,时钟,输入 。 时钟频率范围为 10K~ 1280KHz。
ADC0809的引脚及功能引脚图根据接线图,A/D转换通道的地址为 7FF8H~ 7FFFH
( 实验系统为 8000H~8007H)。
ADC0809的查询方式
ORG 0030H
MAIN,MOV R1,#20H
MOV DPTR,#7FF8H
MOV R7,#08H
LOOP,MOVX @DPTR,A
LCALL DELAY
MOVX A,@DPTR
MOV @R1,A
INC DPTR
INC R1
DJNZ R7,LOOP
RET 接口; 指向 ADC0809的 0号通道; 共转换 8个通道; 转换等待; 存 A/D转换结果; 指向下一通道地址; 8个通道循环; 启动转换 WR及地址有效; 读入 A/D转换结果 RD有效; 指向下一存储单元
ADC0809的中断方式
ORG 0000H
SJMP MAIN
ORG 0003H
LJMP INT0
ORG 0100H
SAMP,MOV R0,# 20H
MOV R2,# 8
MOV DPTR,# 7FF8H
START,SETB F0
MOVX @ DPTR,A
SETB IT0
SETB EX0
SETB EA
LOOP,JB F0,LOOP
DJNZ R2,START
RET
INT0,MOVX A,@ DPTR
MOV @ R0,A
INC R0
INC DPTR
CLR F0
RETI; 置中断标志; 指向 0通道; 启动 A/D; 置边沿触发方式; 允许外部中断 0; 开中断; 是否有中断标志?也可执行其它的程序; 8个通道转换结束?; 清中断标志线路图中断服务程序作业
1、一个满刻度电压为 5V的 10位 D/A转换器能够分辨出的输入电压变化的最小值是多少?
2、如果将一个最大幅值为 4.8V的模拟信号转换为数字信号,要求模拟信号每变化 20mV,数字信号的最低位发生变化,问应该用多少位的 A/D转换器。
3,8位单极性 D/A转换器的满刻度电压为 +10V,当数字输入量为
7FH,81H,F3H时,试计算模拟输出电压。
第十三次任务
--键盘显示接口
(一)、知识点
1,显示器接口电路
2,键盘接口电路
3,8155可编程 I/O扩展接口
(二)、重点
1,8155可编程 I/O扩展接口
2,键盘和 显示器 接口电路的基本工作原理第十三次任务 --键盘显示接口
一、实验目的
1,了解 8155与单片机的接口方法 。
2,了解键盘接口的基本方法 。
3,了解显示器接口的基本方法 。
二,实验内容
1、将 21H~23H中的压缩 BCD码,在六个数码管上显示出来。
2、将键盘的各键的键值存放在片内 RAM
30H~50H。
三、实验程序 -程序一
ORG 0000H
MOV R0,#79H
MOV A,22H
LCALL PWOR
MOV A,21H
LCALL PWOR
MOV A,20H
LCALL PWOR
LCALL DISP
PWOR:MOV R1,A
LCALL PWOR1
MOV A,R1
SWAP A
PWOR1:ANL A,#0FH
MOV @R0,A
INC R0
RET
DISP,SETB 0D4H
MOV R1,#7EH
MOV R2,#20H
MOV R3,#00H
DISP1:MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#TAB
MOV A,@R1
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A
DISP2:DJNZ R3,DISP2
DEC R1
CLR C
MOV A,R2
RRC A
MOV R2,A
JNZ DISP1
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
CLR 0D4H;RS1=0
RET
TAB,DB 0C0H,……
三、实验程序 -程序二
ORG 0000H
MOV DPTR,#0FF20H
MOV A,#03H
MOVX @DPTR,A
MOV R0,#30H
MOV R7,#20H
LOOP:ACALL KEY
MOV @R0,A
INC R0
DJNZ R7,LOOP
MOV A,#80H
MOV DPTR,#0FF22H
MOVX @DPTR,A
SJMP $
KEY:SETB 0D4H
MOV A,#0FFH
MOV DPTR,#0FF22H
MOVX @DPTR,A
KEY0:MOV R2,#0FEH
MOV R3,#08H
MOV R0,#00H
KEY1,MOV A,R2
MOV DPTR,#0FF21H
MOVX @DPTR,A
NOP
RL A
MOV R2,A
MOV DPTR,#0FF23H
MOVX A,@DPTR
CPL A
NOP
NOP
NOP
ANL A,#0FH
JNZ KEY2
INC R0
DJNZ R3,KEY1
SJMP KEY8
KEY2,CPL A
JB ACC.0,KEY3
MOV A,#00H
SJMP KEY7
KEY3,JB ACC.1,KEY4
MOV A,#10H
SJMP KEY7
KEY4,JB ACC.2,KEY5
MOV A,#20H
SJMP KEY7
KEY5,JB ACC.3,KEY8
MOV A,#30H
KEY7,ADD A,R0
CLR 0D4H
KEY8:RET
END
8155的结构和引脚
8155有两个 8位并行 I/O端口 A和 B,一个 6位并行 I/O端口 C,
256个字节的静态 RAM,一个 14位定时器 /计数器及其控制逻辑电路。
8155共有 40个引脚,采用双列直插式封装。各引脚功能如下:
AD0~AD7,地址 /数据总线。
CE,片选信号线,低电平有效 (对于 8156,用 CE表示,高电平有效 )。
RD,存储器读信号线,低电平有效。
WR:存储器写信号线,低电平有效。
ALE,地址及片选信号锁存信号线,高电平有效,其后沿将地址及片选信号锁存到器件中,
8155引脚功能和 I/O接口地址
IO/M,I/ O接口与存储器选择信号线,高电平表示选择 I/O接口,
AD0~AD7为 I/O接口地址,低电平选择 8155片内存储器,
AD0~AD7为 RAM的的地址。
PA7~ PA0,A口输入/输出线。
PB7~ PB0,B口口输入/输出线。
PC3~ PCo,C口输入/输出或控制信号线
TIMER IN,定时器/计数器输入端。
TIME OUT,定时器/计数器输出端
RESET,复位信号线。
Vcc,+5V电源。 Vss,地。
AD7~AD0 I/O口与寄存器
A7 ~ A3 A2 A1A0
x x x x x 0 0 0 命令 /状态寄存器
x x x x x 0 0 1 A口
x x x x x 0 1 0 B口
x x x x x 0 1 1 C口
x x x x x 1 0 0 定时器低 8位
x x x x x 1 0 1 定时器高 6位与
2位计数器方式位
I/O接口地址
(1) 作片外 RAM
当 IO/=0时,8155只能作片外 RAM使用 。 其寻址范围由片选线 ( 高位地址译码 ) 和 AD7~ AD0决定,应与系统中其他的数据寄存器统一编址,使用片外 RAM访问指令 MOVX。
8155的工作方式及控制方式控制字 状态字与 8031接口
(3)作定时器 /计数器使用是一个 14位减法计数器 TIMERIN端输入计数脉冲,计满溢出时,由输出脉冲或方波,当 TIMERIN接外脉冲时位计数方式
,接系统时钟时为定时方式 。
(2)作扩展 I/O口使用
8155作 I/O时。 IO/应为高电平。在 8155的控制逻辑部件中,
设置有一个控制命令寄存器和一个状态标志寄存器。 8155的工作方式由 CPU写入控制命令寄存器中的控制字来确定。
状态标志寄存器,用来存放 A口和 B口的状态标志。状态标志寄存器的地址与命令寄存器的地址相同,CPU只能读出,不能写入。
定时器 /计数器
8155初始化与 8031接口若 A口设定为基本输入方式,B口设定为基本输出方式,从 A
口读入状态,取反且从 B口输出,并且用定时器 /计数器作方波发生器,要求输出方波的频率为输入时钟频率的 16分频,
则相应的初始化程序如下:
START,MOV DPTR,#7F04H ; 指向定时器字节计数器
MOV A,#01H ; 赋定时初值
MOVX @DPTR,A; 写入定时器低 8位
INC DPTR ;指向定时器高字节计数器
MOV A,#40H; 设定定时器为方式 1
MOVX @DPTR,A ; 写入定时器高 8位
MOV DPTR,#7F00H ; 指向命令命令寄存器
MOV A,02H ; 启动计数器,B口输出,A口输入
MOVX @DPTR,A ; 写入命令
MOV DPTR,#7F01H ; 指向 A口
MOVX A,@DPTR ; 读入 A口状态
CPL A
INC DPTR ;指向 B口
MOVX @DPTR,A; 从 B口输出返回键盘及其接口概述键盘是单片微机应用系统中一个很关键的部件,它能实现向计算机输入数据、传送命令等功能,是人工干预计算机的主要手段。
键盘接口应具有如下功能:
u 1,键扫描功能,即检测是否有键按下 。
u 2,键识别功能,确定被按下键所在的行列的位置 。
u 3,产生相应的键的代码 ( 键值 ) 。
u 4,消除按键弹跳及对付多键串键 ( 复按 )
8031与键盘的接口可采用下列四种方式:
u 1,8031通过 并行扩展芯片 ( 8155,8255) 与键盘接口 。
u 2,8031自身的串行口 与键盘接口 。
u 3,8031通过 专用芯片 8279与键盘接口 。
u 4,8031自身的并行口 直接与键盘接口 。
返回独立式按键接口设计独立式按键就是各按键相互独立,每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其它输入线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按健被按下了。故此种键盘适用于按键较少的场合。按键直接与 80C51的 I/O口线相接,通过读 I/O口,判定各
I/O口线的电平状态,即可识别出按下的按键。
8031
P1.0
P1.1
P1,2
P1.3
+5V
K0
K1
K2
K3
无键按下
P1→ A
屏蔽 A的低四位
(A)=0FH
ACC.0=0
ACC.1=0
K0处理程序
K2处理程序
K1处理程序
ACC.2=0
K3处理程序
Y
Y
Y
Y
Y
N
N
N
K0键按下矩阵键盘工作原理矩阵式键盘适用于按键数量较多的场合。它由行线和列线组成,
按键位于行、列的交叉点上。一个 3X3的行、列结构可以构成一个有 9个按键的键盘。因此能节省很多的 I/ O口。
平时无按键动作时,列线处于高电平状态,即全为 1
设此键按下
0
1
1
1 1 1
第一行无键按下,三列全为 1
1
0
0
第二行有键按下,三列不全为 1,有键按下所在的列线为 0
行扫描码回复码 矩阵键盘判断按键的工作原理 是用扫描码逐行扫描,若回复码全 1,
则该行无键按下;否则,该行有键按下,再判断 0所在的列,即可知该键所在的行和列。
键盘编码的工作原理 是由扫描码构成高四位( 0101),由回复码构成低四位( 0101)。则此键的编码为 01010101B=55H。 根据编码就可执行该键的相应程序。
5V
8155控制矩阵键盘程序解析 -主程序
ORG 0000H
MOV DPTR,#0FF20H
MOV A,#03H
MOVX @DPTR,A
MOV R0,#30H
MOV R7,#20H
LOOP:ACALL KEY
MOV @R0,A
INC R0
DJNZ R7,LOOP
MOV A,#80H
MOV DPTR,#0FF22H
MOVX @DPTR,A
SJMP $
指向命令 /状态寄存器工作方式命令字
0 0 0 0 0 0 1 1
A,B口基本输入输出 C口输入
A口输出
B口输出
A口禁止中断
B口禁止中断空操作写入工作方式命令字
8155
初始化指向存储键值的起始地址共 4× 8=32个键盘,R7为计数器调键处理程序存键值指向下一个存储地址
32个键盘按完显示 8
表示结束
8155控制矩阵键盘程序解析
-识别有否键按下程序
SM0:MOV R2,#0FEH
MOV R3,#08H
MOV R0,#00H
SM1,MOV A,R2
MOV DPTR,#0FF21H
MOVX @DPTR,A
RL A
MOV R2,A
MOV DPTR,#0FF23H
MOVX A,@DPTR
CPL A
ANL A,#0FH
JNZ SMEND
INC R0
DJNZ R3,SM1
SMEND,RET
11111110第 0列为低电平共 8列,循环 8次
R0记低电平所在的列数,初值为 0
指向 A口扫描码从 A口输出,使指定列为低电平使下一列为低电平循环左移 11111110→ 11111101
扫描码存 R2
指向 C口
C口的回复码读入 A
A取反 屏蔽 A低四位若无键按下,取反前低四位必全
1,取反后则必有全 0,屏蔽低四位后则 A为 0,若有键按下,
则 A不为 0。 因此,A是否为 0可作为键按下的标准
A≠0,有键按下,
转键处理程序

扫描下一列
8列未扫描完,返回
KEY1继续
8155控制矩阵键盘程序解析
-识别键值程序 1
KEYV,CPL A
JB ACC.0,KEYV1
MOV A,#00H
SJMP KEYV4
KEYV1,JB ACC.1,KEYV2
MOV A,#08H
SJMP KEYV4
KEYV2,JB ACC.2,KEYV3
MOV A,#10H
SJMP KEYV4
KEYV3:MOV A,#18H
KEYV4,ADD A,R0
KEYVEND:RET
设第 5列第 2行的键按下。由识别有否键按下程序得:
R0=05H
(A)=00000100B
A取反,(A)=11111011B
ACC.0=1,转移 KEY3
ACC.1=1,转移 KEY4
ACC.2=0 不转移每行 8个键,因此每行的起始码为 00H、
08H,10H和 18H
行代码 (A=08H)与列代码 (R0=05H)相加为健值并存 A中 (A)=0DH,这就是第 5列第 2行的键值
8155控制矩阵键盘程序解析
-识别键值程序 2KEYV,CPL A
JB ACC.0,KEYV1
MOV A,#00H
SJMP KEYV4
KEYV1,JB ACC.1,KEYV2
MOV A,#08H
SJMP KEYV4
KEYV2,JB ACC.2,KEYV3
MOV A,#10H
SJMP KEYV4
KEYV3:MOV A,#18H
KEYV4,ADD A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
SJMP KEY8
设第 1列第 1行的键按下。由识别有否键按下程序得:
R0=01H
(A)=00000010B
A取反,(A)=11111101B
ACC.1=0 不转移第 1行的键值在表中从第 08H(8)开始加上 R0中的列代码 01H,等于 09H,这就是第 1列第 1行的键值在键值表中的序号
TAB,DB 07H,04H,08H,05H,09H,06H,0AH,0BH
DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH
DB ……
KEY8:RET
ACC.0=0 转移 KEY3
查表得键值 00H,这个键正好是数字键
,0” 。这为后面区分数字键和命令键提供了方便(命令键的键值大于 0FH)
显示器及其接口技术在单片微机系统中,常用的显示器有,发光二极管显示器,简称 LED; 液晶显示器,简称 LCD;
荧光管显示器 。近年来也开始使用 简易的 CRT接口,
显示一些汉字及图形。前三种显示器都有两种显示结构:段显示 (7段,“米”字型等 )和点阵显示 (5× 7,
5 × 8,8 × 8点阵等 )。而发光二极管显示又分为固定段显示和以拼装的大型字段显示,此外还有共阳极和共阴极之分等。
三种显示器中,以荧光管显示器亮度最高,发光二极管次之,而液晶显示器最弱,为被动显示器,
必须有外光源。
LED段显示器
LED显示块是由发光二极管显示字段组成的显示器,有 7段和“米”字段之分。这种显示块有共阳极和共阴极两种。
共阴极 LED显示块的发光二极管的阴极连接在一起,通常此公共阴极接地,当某个发光二极管的阳极为高电平时,
发光二极管点亮,相应的段被显示。
由 N片 LED显示块可拼接成 N位 LED显示器。 N位 LED显示器有 N根 位选线 和 8× N(或 16× N)根 段选线 。根据显示方式的不同,位选线和段选线的连接方法也各不相同。 段选线控制显示字符的字型,而位选线则控制显示位的亮、暗。
分 静态显示方式 和 动态显示方式 。静态显示方式接口,编程容易,管理也简单,付出的代价是占用口线资源较多。
动态显示方式采用扫描显示方式,利用人眼的视觉暂留现象,
造成多位同时亮的假象,达到显示的目的。
返回
LED的 静态 显示方式
LED显示器工作于静态显示方式时,各位的共阴极 (或共阳极 )连接在一起并接地 (或 5V); 每位的段选线
(a~ dp)分别与一 8位的锁存输出相连。之所以称为静态显示,是由于显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存器的输出将维持不变,
直到显示另一个字符为止。也正因为如此,静态显示器的亮度都较高。
这种显示方式接口,编程容易,管理也简单,付出的代价是占用口线资源较多。若用 I/ O口线接口;
则要占用 4个 8位 I/ O口,若用锁存器 (如 74LS373)接口,
则要用 4片 74LS373芯片。而如果用“米”字段的 LED
显示器,则静态显示方式需要更多的硬件资源。如果显示器位数增多,则静态显示方式更是无法适应。
静态
LED的 动态 显示方式在多位 LED显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个 8位 I/O口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别由相应的 I/O口线控制,实现各位的分时选通。附图所示为一个 4
位 7段 LED动态显示器电路图。其中段选线占用一个 8位 I/O口,而位选线占用一个 4位 I/O口。
由于各位的段选线并联,若要各位 LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字符的字型码,这样同一时刻,4位 LED中只有选通的那一位显示出字符,
而其它三位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,同时,在段选线上输出相应位将要显示字符的宇型码,则同一时刻,只有选通位显示出相应的字符,而其它各位则是熄灭的。
如此循环下去,就可以使各位显示出将要显示的字符,虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于人眼有视觉暂留现象,只要每位显示间隔足够短,则可造成多位同时亮的假象,达到显示的目的。
动态
8155控制 LED的程序解析
DISP,MOV R1,#7EH
MOV R2,#20H
MOV R3,#00H
DISP1:MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#TAB
MOV A,@R1
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A
8155控制 LED的电路图见附图。
PA口为字选控制,地址为 FF21H;
PB口为段选控制,地址为 FF22H。
79H~7EH为 6个显示缓存单元。其中是待显示内容在字形表中的序号。
LED为共阳。
DISP2:DJNZ R3,DISP2
DEC R1
CLR C
MOV A,R2
RRC AMOV R2,A
JNZ DISP1
SJMP DISP
TAB,DB 0C0H,……
R1指向显示缓存
R2存字选码,为 00100000,选中最右边的
LED延时初值指向 PA口字选码送 PA口查字形码指向 PB口字段码送 PB口延时指向下一个显示缓存
R2带 CY循环右移,指向下一个 LED
R2=0表示 6个 LED扫描完毕,否则继续
6个 LED扫描完毕,从头开始段码表电路图单片机接口扩展技术小结
接口的功能
数据传送的方法
各接口的编址
各接口的初始化
键盘显示技术
模块化程序设计详细论述详细论述
64K编址 例图
8155 8255
键盘 显示模块化程序设计把一个程序分成具有多个明确任务的程序模块,分别编制、调试,
然后再将它们连接在一起形成一个完整的程序,这样的程序设计方法称为模块化程序设计。
模块化程序设计的关键是模块的划分。常用的工具是层次图和模块说明。层次图是一个方块图,用来表示主模块和子模块的关系。
主模块模块 A 模块 B 模块 C
模块 D 模块 B
模块 D
模块说明应简要地写出模块的功能、所用基本算法、模块的输入输出以及它们的数据结构等。
并考虑数据的存储和传递方式。
模块划分完毕后,进行各个模块程序的编写。应采用结构化程序设计方法。即程序的设计、编写和测试采用一种规定的组织方式进行,
在这种程序中只使用顺序、分支、
循环三种基本的逻辑结构,每种结构都只有一个入口和一个出口。整个程序是各种基本逻辑结构的组合。
电脑时钟系统设计 -硬件部分设计要求:从键盘上输入时间初值。按 EXEC键时钟开始工作,在 6
位 LED数码管上显示时、分、秒。
硬件设计,1、数字键 0~9共 10个,命令键 EXEC一个,共需 11个键,考虑系统的扩展,备用一些键,采用 4× 8=32个键盘。
2、显示部分,6个 LED数码管。采用动态显示方式。
3、键盘显示管理采用 8155,PA输出扫描码,PB口输出字形码,
PC口接收回复码,因此,PA,PB口基本输出,PC口输入,禁止 PA、
PB口中断,不计数。
4、整个系统采用最小系统加 8155控制 4× 8个键盘和 6个 LED数码管即可满足要求。
5,具体电路图如图所示。由图可得扩展的地址如下:
EPROM,0000H~1FFFH
8155的 RAM字节地址,7E00H~ 7EFFH。
命令 /状态口地址为 7F00H,PA口地址为 7F01H
PB口地址为 7F02H,PC口地址为 7F03H
定时器低 8 位地址为 7F04H,定时器高 8位地址为 7F05H。
电路图电脑时钟系统设计 -软件部分整个软件主要任务有:系统初始化、键盘管理,显示管理和计时。
各任务具体要求如下:
一、计时采用每 0.1秒发生中断,使相应寄存器的内容加
1。累计 10次后使显示部分刷新一次,并将该寄存器清 0。
二、键盘管理:除完成基本功能外,还要完成如下功能:
1、判断是否有键按下,若无键按下,且 EXEC键已按过,
则显示当前的时间;若 EXEC键没按过,等待键按下。
2、若是数字键,则在显示器上从右边进入显示,原显示内容依次向左移一位。
3、若是 EXEC键盘,则从当前时间开始计时。
三、显示管理:采用动态显示方式。
存储单元分配,7EH~79H,显示缓冲区。 23H~20H:
0.1秒、秒、分和小时。
层次图模块功能电脑时钟程序设计 -主程序
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP TINTRUP
ORG 0340h
MAIN,MOV SP,#50H
MOV R0,#23H
MOV R4,#04H
CLR A
CLOCK1,MOV @R0,A
DEC R0
DJNZ R4,CLOCK1
MOV DPTR,#0FF20H
MOV A,#03H
MOVX @DPTR,A
MOV TMOD,#01H
ORL IE,#82H
MOV TL0,#0B7H
MOV TH0,#3CH
GNKEY,LCALL KEY
CJNE A,#10H,GNKEY
SETB TR0
CLOCK2:LCALL DISDA
LCALL DISP
SJMP CLOCK2
开始时分秒置 0
8155初始化定时器 T0初始化中断设置,开中断调显示子程序键处理程序启动计数显示当前时间是执行键
DISP
1
1
2
2
3
3
4
4
5
5
DISDA
DISDA,将 20H~22H
的时分秒压缩 BCD值拆成两字节 BCD码存入显示缓冲区 7FH~79H。
DISP,显示子程序。
将显示缓冲区的内容显示出来。
KEY,键处理子程序
Y
N
电脑时钟程序设计 -键盘程序
KEY,LCALL SM
JNZ KEY
LCALL KEYV
CJNE A,#10H,NUM
SJMP KEYEND
NUM,LCALL KEYNUM
SJMP KEY
KEYEND,RET
SM KEYV
KEYNUM,MOV 7EH,7DH
MOV 7DH,7CH
MOV 7CH,7BH
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,A
RET
扫描键盘
A=0?
有键按下读键值
A>0FH?
命令键数字键处理返回
Y
Y
N
N
SM,扫描键盘子程序扫描键盘,将回复码存入累加器 A。
KEYV,读键值子程序将所按下键的键值存入累加器 A
KEYNUM,数字键处理子程序。
从右边进入显示,
原显示内容依次向左移一位。
电脑时钟程序设计 -中断服务程序保护现场重置时间常数
(23H)+1→ 23H
23H清 0,(22H)+1→ 22H
1秒到? (23H)=10
1分到? (22H)=60
22H清 0,(21H)+1→ 21H
1小时到? (21H)=60
21H清 0,(20H)+1→ 20H
24小时到? (20H)=24
20H清 0
恢复现场中断返回
MOV TL0,#0B7H
MOV TH0,#3CH
PUSH PSW
PUSH A
SETB 0D3H
INC 23H
MOV A,23H
CJNE A,#0AH,UP
MOV 23H,#00H
INC A
DA A
MOV 22H,A
CJNE A,#60H,UP
……
UP:POP ACC
POP PSW
RETI
图 1-1 MCS-51单片机的引脚
VSS,接地端;
VCC,电源端,接 +5V;
XTAL1,XTAL2,接外部晶体的引脚或外部时钟信号
RST/VPD,复位信号接入; VCC掉电后此引脚可接上备用电源,以保持内部 RAM中的数据;
ALE/PROG,地址锁存允许 。 当单片机访问外部存贮器时该引脚的输出信号 ALE用于锁存 P0的低八位地址 。 对 8751片内 EPROM编程时,编程脉冲由该引脚引入;
PSEN,程序存储器允许 。 输出读外部程序存储器的选通信号;
EA/VPP,EA=0,单片机只访问外部程序存储器 。
对 8031此引脚必须接地 。
EA=1,单片机访问内部程序存储器 。 对
8051,8751此引脚应接高电位,但地址超过 4KH
,单片机将自动访问外部程序存储器;
在 8751单片机片内 EPROM编程期间,
此引脚引入 21V的编程电源 VPP;
P0.0~P0.7,P0数据 /地址复用端口;
P1.0~P1.7,P1静态通用端口;
P2.0~P2.7,P2动态端口;
P3.0~P3.7,P3双功能静态端口 。
图 1-2 地址锁存器 74LS373
输入 输出
OE G D Q
L H H H
L H L L
L L X 保持
H X X 高阻
74LS373锁存器逻辑功能表图 1-3 程序存储器 2764
A11~A8
Vcc
Vpp
2764
A7~A0
D7~D0 CS
OE PGM
引脚 功能
A0~A12 13位地址线( 0000~1FFFH共 8K)
D0~D7 8位数据线
CE 片选端(低电平有效)
OE 输出允许端(低电平有效)
PGM 编程写入允许(低电平有效)
Vpp 编程写入电源图 1-3 程序读取时序图
P2口始终输出高八位地址( PCH)。
当 P0口输出低八位地址( PCL) 时,ALE为高电平,74LS373的 G脚则为高电平,P0输出的低八位地址通过 74LS373 输入到程序存储器的
A0~A7。
当 ALE为低电平,74LS373的 G脚也为低电平,74LS373处于锁存状态,以保证指令的读入 P0口时,其 Q0~Q7并不随 P0口数据的变化而变化,仍为低八位地址。 PSEN为低电平,2764的 OE端则为低电平,允许
2764对应地址的指令从其 D0~D7端读入 P0口。
图 2-1 片内数据存储器图 2-1 片内数据存储器的地址空间分布图表 2–1 字节地址和位地址的关系图 3-1 线选法
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
8031
ALE
P0
WR
PSEN
RD
CE
A12
A11
A10
A9
A8
2764(1)
A7
|
A0
D7~D0 OE
CE
A12
A11
A10
A9
A8
2764(2)
A7
|
A0
D7~D0 OE
CE
A12
A11
A10
A9
A8
6264(1)
A7
|
A0 WR
D7~D0 OE
CE
A12
A11
A10
A9
A8
6264(1)
A7
|
A0 WR
D7~D0 OE
74LS373
Q7
G |
Q0
D7~D0
4000H~
5FFFH
4000H~
5FFFH
2000H~
3FFFH
2000H~
3FFFH
P2.7 P2.6 P2.5 P2.4~P2.0 P0.7~P0.0
0 1 0 00000 00000000
0 1 0 11111 11111111
P2.7 P2.6 P2.5 P2.4~P2.0 P0.7~P0.0
0 0 1 00000 00000000
0 0 1 11111 11111111
图 3-2 地址译码法
74LS139
G Y2
B Y1
A Y0
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
8031
ALE
P0
WR
PSEN
RD
CE
A12
A11
A10
A9
A8
2764(1)
A7
|
A0
D7~D0 OE
CE
A12
A11
A10
A9
A8
2764(2)
A7
|
A0
D7~D0 OE
CE
A12
A11
A10
A9
A8
6264(1)
A7
|
A0 WR
D7~D0 OE
CE
A12
A11
A10
A9
A8
6264(1)
A7
|
A0 WR
D7~D0 OE
74LS373
Q7
G |
Q0
D7~D0
0000H~
1FFFH
0000H~
1FFFH
2000H~
3FFFH
2000H~
3FFFH
G A B Y0 Y1 Y2 Y3
0 0 0 0 1 1 1
0 0 1 1 0 1 1
0 1 0 1 1 0 1
0 1 1 1 1 1 0
74LS139逻辑功能表P2.7 P2.6 P2.5 P2.4~P2.0 P0.7~P0.0
0 0 0 00000 00000000
0 0 0 11111 11111111
P2.7 P2.6 P2.5 P2.4~P2.0 P0.7~P0.0
0 0 1 00000 00000000
0 0 1 11111 11111111
图 3-4 80C51存储器结构和地址空间图 3-3 读外部数据存储器的时序与读程序存储器的区别是:当指令为 MOVX时,会产生相应的 RD( 或 WR)
有效信号,在 P0口上将出现有效的输入数据(或输出数据)供 CPU存取。对外部数据存储器操作期间,在同一机器周期的 S6状态将不再出现 PSEN有效信号,下一机器周期的第一个 ALE也不再出现。
图 5-1PSW例
RS1 RS0 R0~R7
0 0 0区 00H~07H
0 1 1区 08H~0FH
1 0 2区 10H~17H
1 1 3区 18H~1FH
01011011
00111011
10010110
+
C6=0C7=1
+
1
两正数相加为
150>127溢出
OV=1
10100000
10000101
00100101
+
C6=0C7=1
+
1
两负数相加为
-96-123=-219
>-128
OV=1
01011011
00111011
10010110
+
C6=0C7=0
+
1
两正数相加为
150>127溢出
OV=1
寻址方式
立即寻址 MOV A,#70H
直接寻址 MOV A,70H
寄存器寻址 INC Rn(n=0~7)
寄存器间接寻址 INC @Rn(n=0,1)
基寄存器加变址寄存器间接寻址
MOVC A,@A+PC
相对寻址 JC rel
指令系统小结
数据传送类
MOV,MOVC,MOVX,XCH,XCHD,PUSH,POP
算术运算类 ( 注意对标志位 Cy,Ac和 OV的影响 )
ADD,ADDC,SUBB,INC,DEC,MUL,DIV,DA A
逻辑操作类 ( 注意下划线部分指令只能对 A操作 )
ANL,ORL,XRL,CLR,CPL,RL,RLC,RR,RRC,SWAP
子程序和参数的传递方法调用子程序的优点:避免对相同程序段的重复编程;简化程序的逻辑结构也便于子程序调试;节省存储器空间。
1、用累加器或寄存器进行参数传递。其特点是程序简单,但由于寄存器数量有限,不能传递的参数不多。
调用指令:短调用指令 ACALL( 子程序地址必须与下一条指令的第一个字节在相同的 2K页面内)。
长调用指令 LCALL可以调用 64K范围内所指定的子程序。
子程序调用的过程:首先将下一条指令地址保存到堆栈,PCL先进,PCH
后进,遇到 RET后按先进后出原则再将地址弹出到 PC中。继续执行主程序。
编写子程序必须先确定入口条件和出口条件以保证参数正确传递。

2、用指令寄存器进行参数传递,常用于待处理数据较多的场合,参数在内部 RAM时用 R0和 R1,参数在外部 RAM或程序存储器时用 DPTR

3、用堆栈进行参数传递。调用前主程序用 PUSH指令将参数压入堆栈,子程序在执行按堆栈指针间接访问栈中参数,并将运算结果送回堆栈。返回主程序后,用 POP指令取出结果,其特点是传递参数多,且必另外分配存储单元 例 返回
64K全地址译码电路
80C51系列单片微机的并行三总线结构定时器 /计数器的结构计数器定时器:相等时间间隔计数运行控制位
TR1=1
时间常数寄存器 计数溢出,TF1=1
中断申请图 11_1 8255A的逻辑结构图图 11_2 8255A方式控制字图 11_3 8255A的 C口按位操作控制字图 11_4 8255A与 80C51的接口电路图 11_5 8255A接口工作状态选择表本实验系统 8255
各端口地址
FF28H
FF29H
FF2AH
FF2BH
A1
A0
P2.7
A1
A0
CS 1XXXXXXX XXXXXX00B=FFFCH A口
A7
A6
P2.7
0XXXXXXX 00XXXXXXB=7F3FH A口因此,各端口地址与硬件接线有关图 11_6 8255A C口联络信号定义图 11_7 8255A的 C口按位操作控制字图 12-1 DAC0832逻辑结构图图 12-2 DAC 0832的引脚图 12-3 DAC0832双缓冲方式接口电路图 12-4 ADC0809的内部结构图 12-
5ADC0
809的引脚图图 12-6 ADC0809与 80C51查询方式连接图图 12-7 ADC0809与 80C51中断方式连接图
TM2 TM1 IEB IEA PC2 PC1 PB PA
0,A口为输入方式; 1,A口为输出方式
00 方式 1,A,B口为基本输入输出,C口为输入方式
11 方式 2,A,B口为基本输入输出,C口为输出方式
01 方式 3,A口选通输入输出,B口为基本输入输出
PC0,AINTR,PC1,ABF,PC2,ASTB
PC3~5,输出
10 方式 4,A口,B口选通输入输出
PC0,AINTR,PC1,ABF,PC2,ASTB
PC2,BINTR,PC4,BBF,PC5,BSTB
0:禁止 A口中断
1:允许 A口中断
0,B口为输入方式; 1,B口为输出方式
00 空操作,不影响定时 /计数器操作
01 停止定时 /计数器操作
10 若定时 /计数器正在计数,长度减为 1时停止计数
11 启动,置定时 /计数器方式和长度后立即启动计数若正在计数,溢出后按新的方式和长度计数
0:禁止 B口中断
1:允许 B口中断图 13_1 8155工作方式控制字返回
× TIMER INTE B INTR INTE A INTR
B BF B A BF A
A口中断请求标志
A口缓冲器满标志
A口中断允许标志
B口中断请求标志
B口缓冲器满标志
B口中断允许标志定时器中断允许标志,定时器计数到指定长度时置,0”,读状态后清,0”
图 13_2 8155的状态字返回图 13_3 8155与 8031的连接和口地址
8
+5VWR
RD
ALE
P2.7
P2.0
RESET
8031 Vcc
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
Vss
WR
RD
ALE
CE 8155 PA
IO/M
RESET
Vcc
AD7 PB
AD6
AD5
AD4 PC
AD3
AD2
AD1
AD0 TIN
Vss TOUT
8
6
RESET
RAM 字节地址:
7E00H~ 7EFFH。
I/O口地址:
A口地址为 7F01H
B口地址为 7F02H
命令 / 状态口地址为
7F00H
定时器低 8 位地址为
7F04H
定 时 器 高 8 位 地 址 为
7F05H。
返回
0XXX XXX0 0000 0000 7E00H0XXX XXX0 1111 1111 7EFFH1 XXXXXX000 7 00HB口 0X XXX XXXXXX010 7F02HA口 01 1
AD2~AD0 I/O口与寄存器
A2 A1 A0
0 0 0 命令 /状态寄存器
0 0 1 A口
0 1 0 B口
0 1 1 C口
1 0 0 定时器低 8位
1 0 1 定时器高 6位与 2
位计数器方式位图 13_4 8155定时器 /计数器方式
T7 T6 T5 T4 T3 T2 T1 T0
D7 D6 D5 D4 D3 D2 D1 D0
D7 D6 D5 D4 D3 D2 D1 D0
TL(04H)
TH(05H) M2 M1 T13 T12 T11 T10 T9 T8
M 方式 定时器输出波形
00
01
10
11
单方波连续方波单脉冲连续脉冲其中,T13~T0为记数长度,因此可表示的长度范围是 2H~3FFFH。 对于
MCS-51主频为 3MHz时,定时时间范围为 0.66ms~ 5.46ms。
M1,M2用来设置定时器输出方式。定时器有 4种输出方式:单方波、连续方波、单脉冲、连续脉冲。 8155定时器方式及对应的输出波形如下表所示。
返回图 13_5 8155
键盘显示接口
AD0 PA0
AD1 PA1
AD2 PA2
AD3 PA3
AD4 PA4
AD5 PA5
AD6 PA6
AD7 PA7
8155
PB0
CE PB1
RD PB2
WR PB3
IO/M PB4
ALE PB5
PB6
PB7
TMROUT PC0
PC1
TMRIN PC2
PC3
PC4
RESET PC5
+5V
D0
D1
D2
D3
D4
D5
D6
D7
P2.7
RD
WR
A0
ALE
RST A口,B口输出,C口输入,禁止中断和计数驱动器位选码输出段选码输出图 13-6四位静态 LED显示器电路
a b c d e f g dp a b c d e f g dp a b c d e f g dp a b c d e f g dp
I/O口( 1) I/O口( 2) I/O口( 3) I/O口( 4)
图 13-7四位动态 LED显示器电路
I/O口
( 1)
a b c d e f g dp a b c d e f g dp a b c d e f g dp a b c d e f g dp
I/O口( 2)
8279键盘显示接口
31
30
29
28
27
26
25
24
8031
ALE
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
INT1
P2.7
RD
WR
CLK
A0
D7
D6
D5
D4
D3
D2
D1
D0
IRQ
CS
RD
WR
7
6
5
4
3
2
1
0
A7A6A5A4A3A2A1A0
G 74LS373
1
RL7
RL6
RL5
RL4
RL3
RL2
RL1
RL0
SL0
SL1
SL2
OUTB0
OUTB1
OUTB2
OUTB3
OUTA0
OUTA1
OUTA2
OUTA3
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
A
B
C
2GA
2GB
GND
74LS138
a
b
c
d
e
f
g
h
75451× 4
7407
8位显示器+ 5V
RESET
+ 5V
P0.0

P0.7
P2.0
P2.1
P2.2
P2.3
8031 P2.4
P2.5
P2.6
RD
P2.7
WR
ADDA
ADDB
ADDC
OE
0809
START
74LS373
D0 Q0

D7 Q7
A0

2764
A7
A8
A9
A10
A11
A12
CE
IO/M
8155
CS
0832
WR1
A0

A7
6264
A8
A9
A10
A11
A12
≥ 1
≥ 1
2764和 6264的
A0~A12接
8031的 P0.0~P0.7
和 P2.0~P2.4,地址范围
0000000000000B
~
1111111111111B

0000H~01FFH
2764 6264 8155 0809 0832
RAM PA口 PB口 PC口 命令 /状态口 IN2 IN60000H
~
01FFH
0000H
~
01FFH
8031的 P2.7脚通过与非门接 0809的 OE
和 START脚。 P2.0、
P2.1,P2.2对应接
ADDA,ADDB、
ADDC。 因此,IN0和
IN7高 8位的地址分别为,0×××× 000B
和 0×××× 111B 。
IN2和 IN6即地址是:
0×××× 010B和
0×××× 110B即
7A00H和 7E00H
7A00H7E00H
8031的 P2.6脚接
0832的 CS脚。因此,0832的高 8位地址为,
× 0×××××× B即
0BF00H
0BF00H
的 5脚接
8155的 CS脚。
P2.0脚接 8155的
IO/M脚。因此,
8155 R M的高 8位地址为,
×× 0×××× 0B,即
0DEH。 低 8位地址范围为,00H~FFH。 因此,8155RAM的 地址范围是:
DE00H~0DEFFH
0DE00H
~
0DEFFH
的 脚接的 脚。
脚接 的脚。因此,
IO的高 8位地址为,
×× ×××× 1,即
F 。 PA口的低 8
位地址为,
××××× 001B 。 因此,PA口的 地址是:
FF9H
0DFF9H
的 脚接的 脚。
脚接 的脚。因此,
的高 位地址为
××××,即
。 PB口的低位地址为
010 。 因此,口的 地址是:
A
0DFFAH
0DFFBH
0DFF8H
我们约定,高 8位地址中,
凡可为任意值时取,1”,
高 8位地址中,凡可为任意值时取,0” 。
由此可见,扩展接口的地址取决于硬件的连接。在编址时要注意各接口的地址不能重叠。本例采用的线选法。其特点是地址不连续,分布分散。
层次图返回主程序
MAIN
键盘管理
KEY
显示管理
DISP
扫描键盘
SM
识别键值
KEYV
显示缓冲区存数
DISDA
数字键处理
NUMKEY
计时
TIME
系统初始化拆字
CZ
模块功能说明
DISDA,将 20H~22H的时分秒压缩 BCD值拆成两字节 BCD
码存入显示缓冲区 7FH~79H。
DISP,显示子程序。将显示缓冲区的内容显示出来。
KEY,键处理子程序
SM,扫描键盘子程序扫描键盘,将回复码存入累加器 A。
KEYV,读键值子程序将所按下键的键值存入累加器 A
KEYNUM,数字键处理子程序。从右边进入显示,原显示内容依次向左移一位。
CZ,将 R0所指地址的压缩 BCD拆成两字节 BCD码存入 R1所指首地址的两存储单元内。
TIME,0.1秒加 1,并处理时、分、秒的进位返回
DISDA
DISDA,MOV R0,#79H
MOV A,22H
ACALL CZ
MOV A,21H
ACALL CZ
MOV A,20H
ACALL CZ
RET
CZ,MOV R1,A
ACALL CZ1
MOV A,R1
SWAP A
CZ1,ANL A,#0FH
MOV @R0,A
INC R0
RET 返回