单片微机原理系统设计与应用 笔记

更新时间:2023-06-02 13:06:02 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

万福君、潘松峰

单片机原理备课笔记
使用课本:单片微机原理系统设计与应用(中国科学技术大学出版社)万福君 第2版

《第1学时∶》
第0章:绪论
要求:希望各班的班长和学习委员集中班里同学的问题在上课前提出。
第1节:微机发展史

第2节:微机分类
第3节:微机的应用

第1章:微型机的基本知识
第一节:微处理器、微型机和单片机概念
讲解单片机的产生条件、发展过程,与通常概念上的计算机的区别
一、微处理器(Microprocessor)
二、微型计算机(Microcomputer)组成∶
1、CPU及辅助器件∶用于数据的计算构成
2、内部存储器:程序存储器;数据存储器。EPROM、PROM、EEPROM、SRAM、DRAM
3、外部存储器:软磁盘、硬盘、磁带机(海量存储器)、光盘、纸带、卡片、数据存储卡(如数字相机存储卡)、IC卡、磁卡等
4、电源∶用于计算机系统供电。
5、输入输出设备∶键盘、鼠标、扫描仪、数字化仪、手写输入板、纸带读入机、卡片读入机、CRT显示器、液晶屏显示器、数码管(LED、LCD、荧光管等)、打印机、绘图仪、网络适配器、调制解调器、异步串行通讯口、数字照相机、麦克风等。

目前发展方向:硬件速度、软件功能、媒体多样、
新机型价格仍在心理最高价位

三、单片机(Single Chip Microcomputer)组成∶(或微控制器Microcontroller)
(一般不包含电源)(板书单片机结构框图)
1、 CPU∶用于数据的计算
位数,指令条数,指令功能等
2、内部存储器:程序存储器;数据存储器。
3、振荡电路
4、定时器、计数器
5、I/O口:并行口、串行口(同步、异步)、AD/DA、PWM、高速输入、输出口
6、操作系统(OS)[如可在线编程的单片机、可上网的单片机等]

目前发展方向:多方面发展,硬件集成度发展两头,品种、功能多样专业化,减少设备芯片数量为目的的功能电路集成


单片机是微型计算机发展的一个分支,是在大规模集成电路的基础上发展起来的。并且由于市场庞大,发展极快。主要应用于小型智能产品中。

四、单片机的发展
从4位机,8位机,16位机,32位机
单片机主要生产厂商及其单片机∶
1974年12月 仙童公司 F8系列单片机 8位第一个
1976年9月 Intel公司 MCS-48系列单片机 8位低档
1980年 Intel公司 MCS-51系列单片机 8位高档
1983-84年 Intel公司 MCS-96系列单片机 16位
1988年 Intel公司 MCS-8098单片机 准16位
之后Intel公司推出32位单片机MCS-80960系列单片机

1975年 Texas公司 TMS1000系列单片机 4位

1984年 仙童公司 TMS-9900系列单片机
1977年 Mostek公司和仙童公司 3870系列单片机
1984年 Mostek公司

万福君、潘松峰

68200系列单片机

1979年 Motorola公司 6801系列单片机 8位
Motorola公司 6804系列单片机 8位
Motorola公司 6805系列单片机 8位
1983年 Motorola公司 68HC05系列单片机 8位低档
1985年 Motorola公司 68HC11系列单片机 8位高档
1990年 Motorola公司 68HC16系列单片机 16位
1990年 Motorola公司 68300系列单片机 32位

1978年 Zilog公司 Z8系列单片机 8位
ATMEL公司 AT89C系列 8位

NS公司 COPS-400系列单片机 4位
NEC公司 uMOS40系列单片机 4位
Rockwell公司 PPS/1系列单片机 4位
松下公司 MN1400系列单片机 4位
夏普公司 SM系列单片机 4位
富士通公司 MB88系列单片机 4位

80--90年代是单片机快速发展的时期,目前根据各种应用环境和要求产生了大量的单片机品种,美国Echelon公司开发出集成了TCP/IP协议的能够上网的单片机,使单片机的应用面更广。

第二节、单片机应用领域:
1、 武器装备:导弹制导、定时引爆等需要体积小、功能较简单、成本低的
2、 智能仪表:工业用数字调节器、记录仪、专用控制器等
3、 测量仪器:便携式测量仪器、
4、 家用电器:洗衣机、冰箱、微波炉、电视机、手机、BP机、助听器、录像机、摄像机、影碟机等等
5、 机器人
6、 计算机键盘、硬盘、打印机、显示卡等


六、一般用于选择单片机的性能指标:
资源方面:
1、CPU∶位数,指令条数,指令功能等
2、 内部存储器:程序存储器、数据存储器、RAM、EPROM、EEPROM数量
3、 寻址范围
4、 振荡电路
5、 定时器、计数器
6、 I/O口:并行口、串行口(异步串行口、同步串行口、总线、USB口等)
7、 中断源数量
8、 看门狗(自由运行计数器)
9、 AD数量、位数
10、 DA(或PWM)数量、位数
11、 高速输入输出口数量
12、 其他 如:操作系统(OS)[如可在线编程的单片机、可上网的单片机等]
13、 单片机厂家提供的特色功能

电气性能方面:
1、 运行速度
2、 电源电压适应范围
3、 功耗
4、 抗干扰能力
5、 温度指标
6、 信号标准、驱动能力

在此提醒大家一下,单片机的应用,与其功能、应用场合与选择的工作方式紧密相关。如安全性、保密性等

单片机制造工艺的演变
74LS~TTL标准电平(I
n∶0.8V/2.0V;Out:0.5V/2.7V)
74HC~标准电平(In∶1.0V/3.5V;Out:0.1V/4.9V)
CMOS~
HMOS~NMOS工艺
C-HMOS~CMOS+HMOS工艺
工艺的演变与芯片的集成度、速度、功耗、抗干扰性能紧密联系

单片机封装

万福君、潘松峰

工艺
DIP,SIP,PLCC,LCC,PDIP,PQFP,SOIC,TQFP 等等
引脚数量越来越多,集成度越来越高,功能越来越强,可靠性越来越好
LQFP44 DIP40 PLCC44









第三节、单片机工业产品(IGP)概念

1、民用级(或称商级)∶0~70℃
军品和工业级产品筛选过降级使用

2、工业级∶-40~85℃
生产流程要求∶
.采用全密封式封装
.-40~85℃全范围电气测试
.125℃44小时老化处理
.老化处理后100%-40~85℃全范围电气测试及最终质量检验

3、汽车级:-45~125℃全范围电气测试和工业级其它指标
4、军用级∶-55~125℃全范围电气测试和工业级其它指标

第四节:单片机学习的准备及特点
一、学习特点∶
1、接触一些新的概念及一些名词的适用范围
2、学习内容不连续性
3、学习内容的积累、组合特点
4、学习内容时空概念的理解
5、与其它课程学习方法的不同点,要求其实践性
6、必须预习待讲课程

二、概念知识的准备
1、寄存器、锁存器、缓冲器、累加器
2、触发器(RS、JK、D触发器以及一些变形的特殊用途触发器)
3、译码器
4、驱动器(功率驱动、标准信号转换等)
5、门电路(与门、或门、非门、同或门、异或门等组合门电路以及三态门电路)
6、运算器(ALU)
7、微指令控制器
8、CPU(中央处理器)、MPU(微控制器)
9、内部存储器及编址方法(程序存储器、数据存储器、统一编址、独立编址)
10、扩展外部存储器
11、RAM(SRAM、DRAM)、ROM(PROM、EPROM、EEPROM、OTPROM、闪速存储器等)
12、GAL(可编程逻辑阵列)
13、接口(I/O口)
14、A/D(模数转换器)
15、D/A(数模转换器)
16、滤波器(RC、LC、Л型滤波等;高通、低通、带通等)
17、中断
18、定时器
19、计数器
20、串行数据、串行通讯(同步方式、异步方式、应答方式)
21、并行数据、并行通讯(同步方式、异步方式、应答方式)
22、传感器
23、变送器
24、执行机构
25、人机接口
26、数制(二进制、八进制、十进制、十六进制、六十进制等)
27、码制(原码、补码、BCD码、ASCII码、电报码、格雷码、循环冗余码、海明码、七段码等)
28、编码与码制转换
29、 时序图表示方式
30、 程序功能框图、程序结构框图、程序流程图

三、课程及知识的准备
1、 电子学
2、 数字电路
3、 数字逻辑(布尔代数)
4、 微机原理
5、 汇编语言

6、 数学
7、 物理
8、 自动控制理论

9、 微机控制技术
10、 测量仪表
11、 调节仪表
12、 分析仪表
13、 电机拖动
14、 机械原理
15、 机械设计
16、 化工原理
17、 企业管理

第1章总结 ……
以上内容介绍了单片机的概念、单片机的产生环境、应用领域和发展过程。
以及学习

万福君、潘松峰

中的准备知识、相关课程和学习特点

《第3学时∶》
第2章∶MCS单片机系统结构
第一节∶单片机结构
参看P11的图2.1 MCS-51结构框图



















制作一个简单的CPU结构框图用于讲解CPU工作过程∶
用于简化理解CPU的工作过程,建立CPU工作的时空观念;着重描述微指令控制器(译码阵列)的工作过程。
包含∶1、ALU
2、微指令控制器(译码阵列)
3、程序计数器PC
4、累加器A
5、累加器B
6、程序存储器
7、数据存储器
8、数据指针寄存器
9、堆栈指针寄存器
10、指令锁存器
11、振荡器电路及分配器
12、 八位口输出锁存器/输入缓冲器
《第4学时∶》
第2章∶MCS单片机系统结构
第一节∶单片机结构 --模型机CPU结构框图




第二节∶8051引脚功能说明
引脚图 及引脚功能分类图见P15图2.2(根据单片机型号不同引脚分布和数量不同)
Vss 电源公共端(电源地)
Vcc 电源端
RST/VPD 复位(振荡器工作时保持2个震荡周期有效)*画复位电路*/后备电源端,保证内部RAM电源(接电池或后备电源正)
EA\/VPP(变异)
ALE/ PROG\ (变异)允许地址锁存信号P12(访问外部数据存储器时以1/12晶振频率输出,不访问外部数据存储器时以1/6晶振频率输出。参考P17时序图)/编程脉冲输入端(8751、87CXX等)
PSEN\ 外部程序存储器选通信号
XTAL1 晶振(外部振荡信号时接地)
XTAL2 晶振(外部振荡信号时接信号输入)
P0口∶P0.0~P0.7 带外部存储器扩展时用于地址低八位和八为数据总线
P1口∶P1.0~P1.7 (增减)
P2口∶P2.0~P2.7 (增减)带外部存储器扩展时用于地址高八位
P3口∶P3.0~P3.7 (增减)

P3.0……RXD (异步串行口数据入)
P3.1……TXD (异步串行口数据出)
P3.2……INT0\ (外部中断触发信号)
P3.3……INT1\ (外部中断触发信号)
P3.4……T0 T0启动信号/T0计数脉冲(由特殊寄存器设定状态后启动)
P3.5……T1 T1启动信号/T1计数脉冲(由特殊寄存器设定状态后启动)
P3.6……WR\(读写外部数据和程序信息时自动产生)
P3.7……RD\(读写外部数据和程序信息时自动产生)



第三节∶中央处理器 CPU
一、算术/逻辑运算部件 ALU
+ - × ÷运算;与、或、异或 逻辑操作;移位、置零/清零、取反、加1、减
1、求补操作;以及位操作的 与、或、异或 逻辑操作、置零/清零、取反操作等。
二、专用寄存器
1、累加器A
2、寄存器B
*3、程序状态字PSW
PSW.7 CY 进位标志/布尔累加器C
PSW.6 AC 半进位标志
PSW.5 FO

万福君、潘松峰

用户标志
PSW.4 RS1
PSW.3 RS0 (RS1,RS0用于选择寄存器组)
RS1,RS0 组号 RAM地址 寄存器
0 0 组0 00H~07H R0~R7
0 1 组1 08H~0FH R0~R7
1 0 组2 10H~17H R0~R7
1 1 组3 18H~1FH R0~R7

PSW.2 OV 溢出标志∶用于带符号数运算的溢出 OV=D7异或D6
PSW.1 - 空
PSW.0 P 奇偶校验位∶累加器A中1的个数为偶数时P=0
累加器A中1的个数为奇数时P=1

4、 栈指针寄存器SP(8位)∶压栈(PUSH)加一;出栈(POP)减一(中断、子程序调用、直接栈操作都影响SP值)
5、 数据指针DPTR(16位)∶51单片机中唯一可直接访问的16位寄存器
6、 程序计数器PC(16位)∶不可直接访问的16位寄存器

三、振荡器、时钟电路及工作时序
震荡器及震荡电路见P16
取指令时序图见P17
12个振荡周期(6个状态组S1~S6)形成一个机器周期。S1P1~S6P2
ALE信号每一个机器周期出现2次可用于参照

《第5学时∶》

第四节∶并行I/O结构及操作
一、 并行I/O口的内部结构
见P18图2.5、P19图2.6、P20图2.7、P21图2.8,在此不作详细讲解
二、读…修改…写操作
指令系统的一大特点,可避免误操作
命令举例∶ANL Px,A
ORL Px,A
XRL Px,A
CPL Px.y
INC Px
DEC Px
DJNZ Px,LABEL
MOV Px.y,C
CLR Px.y
SETB Px.y
x代表某口;y代表某位
三、并行I/O口的写操作 P22
介绍对口写入的时序
四、并行I/O口的负载能力
根据单片机的设计指标各有不同,一般应能驱动8—20mA。
五、 总线
根据总线所在位置分为:内部总线和外部总线;相对
参照物不同,其内涵也不同。通讯总线
根据总线功能分为:数据总线、地址总线、控制总线
总线方式要求三态条件,高阻抗状态保证总线通路的选通与关闭
通过总线缓冲器讲解总线

第五节∶RST/VPD引脚功能
作为一个特殊的功能引脚,在单片机应用设计中,有着不可忽视的作用
一、 复位

万福君、潘松峰

功能∶
复位信号必须保持2个机器周期,以防干扰和初始化内部寄存器,终止冻结运行方式和掉电保护运行方式。
上电复位应保证晶振的启动时间和内部复位时序的要求(>15毫秒)
内部寄存器初始化状态见P24
二、节电运行方式
51单片机有两种节电方式:
1、 冻结运行方式(PCOM中D0位IDL=1)
CPU冻结运行;RAM、振荡器、中断系统、串行口、定时器、计数器、输出口保持供电工作。中断和复位可解除冻结状态
2、掉电保护运行方式(PCOM中D1位PD=1)
RAM供电由VPD保持;CPU、振荡器、中断系统、串行口、定时器、计数器、输出口停止供电。只能用复位解除掉电保护状态

三、CMOS芯片的节电运行应用
在一些便携式仪器仪表中应用广泛,(计算器、摄像机、自动照相机等)

第六节∶8751H单片机(简介)
现在的单片机设计中,市售的单片机开发系统都具备以下功能
一、片内EPROM、EEPROM、OTPROM编程
二、内部程序校验
三、内部程序存储器保密位
四、片内EEPROM擦除特性
五、仿真功能(软件、硬件)
以上单片机的具体时序,一般开发者不必对其详细了解,因为通常会使用购买的单片机开发系统,以上功能又开发系统自动完成。

第七节∶片内振荡器 在各个单片机应用手册中都有典型电路
一、HMOS型
二、C-HMOS型
各种电路可根据单片机用户手册中的典型电路设计,内部电路不必深究。


第3章∶MCS-51存储器和布尔处理器

第一节∶概述
存储器结构是研究计算机系统必须的内容,决定了其编程和数据处理的方法。
存储器类型:SRAM、DRAM、掩膜ROM、EPROM、OTPROM、EEPROM、闪速存储器等
不同类型存储器的应用场合:(举例、讲解)

第二节∶MCS-51存储器结构
一、程序存储器地址空间
P38图3.3标明51和52单片机的存储器映象
程序启动地址和中断矢量表地址分配P39表3.1
功能名称 地址 命令
启动地址 0000H LJMP START(复位时PC=0,即从地址0000H开始执行)
INT0中断 0003H LJMP P0INT
T0中断 000BH LJMP T0INT
INT1中断 0013H LJMP P1INT
T1中断 001BH LJMP T1INT
串行口中断 0023H LJMP RTINT
T2中断 002BH LJMP T2INT

二、 数据存储器地址空间
P39图3.4标明51和52单片机的内部数据存储器地址空间
P40图3.5标明51和52单片机的内部数据存储器位地址寻址空间


、特殊功能寄存器地址空间
P41图3.6标明51和52单片机的内部特殊功能存储器地址空间
第三节∶MCS-51外部扩展存储器的访问
一、外部扩展的数据总线和地址总线(P0,P2)
二、外部扩展程序存储器的访问(PSEN;RD;ALE)
访问内部程序存储器和外部扩展程序存储器的

万福君、潘松峰

程序时自动区分,并由EA信号指定是否使用内部程序存储器。
访问程序存储器中的数据时使用MOVC(16位地址)指令:
如(16位地址)指令 MOVC A,@A+PC
MOVC A,@A+DPTR
三、 外部扩展数据存储器的读写(RD;WR;ALE)
访问内部RAM使用MOV(8位地址)指令:如 MOV A,@R0
访问外部RAM使用MOVX指令:
如(8位地址)指令 MOVX A,@R1 MOVX @R1,A
(16位地址)指令 MOVX A,@DPTR MOVX @DPTR,A

第四节∶MCS-51的寻址方式
一、 寄存器寻址方式
例:MOV A,R0
二、 直接寻址方式
例:MOV 20H,33H
三、寄存器间接寻址方式
例:MOV A,@R0
四、立即寻址方式
例:MOV R1,#33H (数据放在程序存储器中)
五、变址间接寻址方式
例:MOVC A,@A+DPTR
六、相对寻址方式
例:JC LOOP
七、位寻址方式
例:MOV 20H,C

第五节∶布尔处理器
20H—2FH的128个位地址和地址80H—FFH中的可被8整除的特殊功能存储器地址单元都可进行位寻址



第4章∶MCS-51指令系统

各指令的使用举例;用法和用途∶
第一节∶指令系统概述

一、指令是计算机能直接识别,并用于控制计算机执行一定操作的命令代码,一种计算机的指令的集合称为该计算机的指令系统。
在计算机的存储器中的指令是以二进制形式存放的,称为机器语言或机器码
每种计算机的指令系统各有不同,但指令的功能和类型基本相同。一般都有几种类型的指令:
1、 传送类指

万福君、潘松峰


2、 算术运算类指令
3、 逻辑运算类指令
4、 控制转移类指令
另外根据指令系统的不同,为提高执行速度和方便编程而增加一些复合指令
二、程序与程序设计
程序是为完成一定功能,按一定要求编排的指令序列;
编制程序的过程叫程序设计
程序设计的过程就是根据任务要求,选择一定的算法,并将指令有机的、按一定顺序排列形成可完成预定功能的程序的过程
三、汇编语言
汇编语言:将指令系统中的指令和必要的信息用具有一定规则的助记符方式表达出来,形成汇编语言
[标号:] 操作码助记符 [目的操作数] [,源操作数] [;注释]
或:
[标号:] 操作码助记符 [操作数1] [,操作数2] [;注释]

汇编语言与机器语言的关系



汇编语言种的指令和伪指令及常用符号
指令是指可以编译成机器码并可执行的指令
伪指令指为支持汇编过程,仅在汇编过程中起控制作用,并不产生机器码的汇编指令
如:ORG、END、DB、DW、DS、EQU、DATA、BIT等(P57-58)
在51指令系统使用的符号:
Rn: n=0~7 八个通用寄存器名
Ri: i=0~1 两个间址寄存器名
Direct:8位内部数据存储器地址
#data: 8位立即数数据
#data16: 16位立即数数据
addr16:16位地址
addr11:11位地址
rel:8位带符号偏移量
bit:位地址
@:间接寻址前缀
/:位操作取反

第二节∶51指令的寻址方式
一、 寄存器寻址方式 例:MOV A,R0
二、 直接寻址方式 例:MOV 20H,33H
三、 寄存器间接寻址方式 例:MOV A,@R0
四、 立即寻址方式 例:MOV R1,#33H
(数据在程序存储器中跟在指令码后面)
五、 变址间接寻址方式 例:MOVC A,@A+DPTR
六、 相对寻址方式 例:JC LOOP
七、 位寻址方式 例:MOV 20H,C








第三节∶指令系统介绍
MCS-51系列单片机指令系统由111条指令组成

一、数据传送类指令
数据传送类操作:MOV/MOVX/MOVC/PUSH/POP/XCH/XCHD/SWAP
数据传送类指令 P67—75



指令符号(助记符)       说 明MOV A,Rn   寄存器内容送到累加器MOV A,irect 直接地址中内容送到累加器MOV A,@Ri  间接RAM内容送到累加器MOV A,#daa 立即数送到累加器MOV Rn,A  累加器内容送到寄存器MOV Rn,dire
ct直接地址中内容送到寄存器MOV Rn,#data 立即数送到寄存器 MOV Direct,A 累加器内容送人直接地址 MOV Direct,Rn寄存器内容送入直接地址 MOV Direct,direct
一个直接地址内容送入另一个直接地址MOV Direct

万福君、潘松峰

,@Ri 间接RAM送入直接地址MOV Direct,#data 立即数送入直接地址 MOV@Ri,A    累加器送入间接RAM MOV@Ri,direct 直接地址中内容送入间接RAM MOV@Ri,#data 立即数送入间接RAM MOV DPTR,#data16十六位常数装入DPTRMOVC A,@A+DPTR以DPTR的内容为基地址传送MOVC A,@A+PC 以PC为基地址传送MOVX A,@Ri 从外部RAM(8位地址)送入累加器MOVX A,@DPTR  从外部RAM(16位地址)送入累加器MOVX @Ri,A 从累加器送入外部RAM(8位地址)MOVX @DPTR,A 从累加器送入外部W(16位地址)XCH A,Rn   寄存器和累加器交换 XCH A,direct 直接地址内容和累加器交换XCH A,@Ri  间接RAM与累加器交换XCHD A,@Ri 间接低半字节RAM与累加器交换SWAP A    在累加器内进行半字节交换PUSH direct 把直接地址内容推入堆栈POP direct 从堆栈中弹入直接地址 二、算术运算类指令
算术运算操作:ADD/ADDC/INC/DA/SUBB/DEC/MUL/DIV

算术运算类指令P76—83

指令符号(助记符) 说 明 ADD A,Rn 寄存器内容加到累加器 ADD A,direct 直接地址中内容加到累加器 ADD A,@Ri 间接RA-M内容加到累加器 ADD A,#data  立即数加到累加器 ADDC A,Rn 寄存器和进位加到累加器 ADDC A,direct直接地址中内容和进位加到累加器 ADDC A,@Ri 间接RAM和进位加到累加器 ADDC A,#data 立即数和进位加到累加器 SUBB A,Rn 从累加器减去寄存器内容和错位 SUBB A,direct从累加器减去直接地址中内容和借位 SUBB A,@Ri 从累加器减去间接RAM和错位 SUBB A,#data 从累加器减去立即数和借位 INC A 累加器增量(加 1) INC Rn 寄存器增量(加 1)INC direct
直接地址中内容增量(加 1) INC @Ri 间接RAM增量(加 1) DEC A    累加器减1 DEC Rn   寄存器减1 DEC direct 直接地址中内容减1 DEC @R

万福君、潘松峰

i 间接RAM减1INC DPTR 数据指针增量(加 1)MUL AB       A乘以BDIV AB       A除以BDA A     累加器十进制调整

三、逻辑运算类指令
逻辑运算类操作:CLR/CPL/RL/RLC/RR/RRC/ ANL/ORLXRL
逻辑运算类指令 P85—90

指令符号(助记符) 说 明 ANL A,Rn 累加器和寄存器相与 ANL A,direct 累加器与直接地址中内容相与ANL A,@Ri 累加器与间接RAM相与 ANL A,#data 累加器和立即数相与 ANL Direct,A 直接地址中内容和累加器相与 ANL Direct,#data
直接地址中内容和立即数相与ORL A,Rn 累加器与寄存器相或ORL A,irect 累加器和直接地址中内容相或ORL A,@Ri 累加器与间接RAM相或ORL A,#data 累加器和立即数相或ORL Direct,A 直接地址中内容和累加器相或ORL Direct,#data
直接地址中内容和立即数相或XRL A,Rn 累加器与寄存器异或XRL A,irect 累加器和直接地址中内容异或 XRL A,@Ri 累加器与间接RAM异或XRL A,#data 累加器和立即数异或 XRL Direct,A 直接地址中内容和累加器异或XRL Direct,#data
直接地址中内容和立即数异或CLR A 清除累加器 CPL A 累加器求反 RL A 累加器循环左移 RLC A 累加器连进位循环左移 RR A 累加器循环右移 RRC A 累加器连进位循环右移

四、控制转移类指令
控制转移类操作:
ACALL/LCALL/RET/RETI/
AJMP/LJMP/SJMP/JMP/NOP/
JZ/JNZ/CJNE/DJNZ/ JC/JNC/JB/JNB/JBC/
无条件控制转移类指令P91—93
条件控制转移类指令 P93—95
子程序调用及返回指令 P95—96
ACALL lddrll 绝对调用于程序LCALL addrl6 长调用子程序RET 从子程序返回REM 从中断返回AJMP addr11 绝对跳转JMP addr16
长跳转SJMP rel 短跳转(相对地址)JMP @A+DPTR相对于(A+DPTR)的间接转移 JZ rel    若累加器为零则跳转JNZ rel   若累加器不为零则跳转CJNE A,direct,rel 累加器和直接地址中内容

万福君、潘松峰

比较若不相等CJNE A,#data,rel 累加器和立即数比较若不相等则跳转CJNE Rn,#data,rel 寄存器和立即数比较若不相等则跳转 CJNE@Ri,#data,rel 间接RAM和立即数比较若不相等则跳转DJNZ Rn,re     寄存器减 1若非零则跳转DJNZ Direct,rel 直接地址中内容减1若非零则跳转 NOP 空操作
五、布尔处理类指令 P97—101
由于51单片机在结构上设计了位处理功能,使得在系统的角度上增强了逻辑操作能力,提高了逻辑操作的效率和速度。
17条按位处理的指令,位处理指令自动识别位地址
位地址可用多种方式表达
*直接用位地址表达00H—0FFH
*用位寄存器的定义名称如:F0,F1,IDL等
*用字节地址加位号如:20.4H(对应位地址04H)
*用特殊寄存器名加位号如:PSW.0 P1.3
*用定义字节名称加位号如:SRHCQ.4
(一)布尔数据传送类指令:一共两条,两个操作数中的一个必须是位累加器,另一个是上述表达方式所指的位参数
MOV C,bit
MOV bit,C
(二) 布尔状态控制类指令
1、 位清零 CLR C 2、位置1 SETB C 3、位取反 CPL C
CLR bit SETB bit CPL bit
(三)布尔逻辑操作类指令
1、位与 ANL C,bit 2、位或 ORL C,bit
ANL C,/bit ORL C,/bit

(四)布尔条件转移类指令
1、 判位累加器转移
JC rel
JNC rel
2、判位变量转移
JB bit,rel
JNB bit,rel
3、判位变量并清零转移
JBC bit,rel
指令符号 说 明CLR C 清除进位 CLR bit 清除直接位 SETB C 置进位位 SETB bit 置位直接位 CPL C 进位求反 CPL bit 直接位求反 ANL C,bit 进位和直接位相与 ANL C,/bit 进位和直接位的反码相与 ORL C,bit 进位和直接位相或ORL C,/bit 进位和直接位的反码相或MOV C,bit 直接位送人进位位 MOV Bit,C 进位位送入直接位JC rel 若进位位为“l”则转移JNC rel 若进位位不为“ l”则转移JB Bit,rel 若直接位为“
l”则转移JNB Bit,rel 若直接位不为“ l”则转移 JBC Bit,rel 若直接位为“ l”则转移并清
总结:数据传送类指令,算术运算类指令,逻辑运算类指令,控制转移类指令,布尔处理类指令。以后将跟随应用举例使用以上所学命令。
提请注意:各命令对状态字PSW

万福君、潘松峰

中各状态位的影响


第5章∶汇编语言程序设计
第一节∶概述
一、 汇编的优点:
1、 占用资源少
2、 程序执行速度快
3、 可有效利用专有特性
4、 能准确掌握执行时间,适用于实时控制
二、 程序框图的设计
1、 程序结构框图(粗略的)
2、 程序功能框图(说明性的)
主要用于表述程序完成的功能与各功能之间的从属关系
3、 程序框图或程序流程图(详细)
4、 使用标准图符编制框图
(1)
起始框;结束框


(2)功能框

功能框



(3)判断框
N
条件判断框


Y

(4) 转向节点


A B C



练习题:2-13、2-18、3-7、3-8、4-5、4-7

三、评价程序质量的标准
1、 程序的可靠性: 是否可用
包括计算的准确性、快速自恢复能力、容错能力、逻辑判断的完整性等等
2、 程序的有效执行时间: 执行动作是否准确
3、 程序的长度: 占用资源情况
4、 程序的逻辑性和可读性: 功能合理性
5、 程序的兼容性和可扩展性:维护工作的可能性
四、程序(系统)设计的进行步骤
  由于单片机应用的特点,程序的设计离不开所设计的系统要求的功能和所依附的硬件结构,因此应当在充分了解整体情况后进行程序设计。
1、 了解被控对象的功能和控制要求,以及异常情况出现的可能性
2、 根据需要的功能和所需I/O数量、特点、要求设计硬件电路逻辑功能框图
3、 根据需要的功能和所需I/O数量、特点、要求设计软件功能框图和异常情况的处理方法
4、 了解各选择使用元器件的性能、封装形式及引脚功能
5、 根据电路逻辑框图设计硬件电路原理图
6、 根据硬件电路原理图设计印制电路板图并加工印制电路板
7、 购置芯片并焊接电路板
8、 编制简单I/O操作程序对电路板进行调试、修改、完善
9、 根据软件功能设计程序结构框图
10、 确定算法和数据结构
11、 编制总框架程序(硬件初始化、数据初始化、主程序循环体、中断程序框架等)
12、 编制分功能程序并进一步修改硬件设计
(1) 显示子程序(完成要求的正常数据显示功能并可在程序调试过程中显示调试过程中的标志和状态)
(2) 键盘程序

(3) I/O操作子程序(通用操作程序和特殊操作程序)
(4) 时钟中断服务程序(处理定时标志和必要的功能程序)
(5) 其它中断处理程序
(6) 控制功能子程序(完成主要的控制逻辑功能)
(7) 数据通讯程序
(8) 打印程序
12、 优化程序设计并调试
13、 连入模拟

万福君、潘松峰

负载试运行、
14、 修改并完成电路设计和程序设计
15、 制作样机进行考机
16、 编制设计文件
(1) 整理设计任务书
(2) 整理硬件设计图纸及硬件资源分配说明
(3) 整理程序流程图、数据分配表和程序清单
(4) 书写系统设计技术说明书
(5) 书写系统使用说明书
(6) 书写软件维护说明书
17、 产品定型

五、 程序设计的方法及程序设计的格式
1、 使用伪指令定义数据,使程序易读
常用伪指令:EQU、DL、DB、DW、ORG、END等
由于各种语言的编译程序要求的标准不同,伪指令稍有差别
2、 程序中标号的使用比较灵活,即可表示一个立即数,也可表示一个存储器地址、还可表示一组数据的首地址,等等。熟练的使用标号可大大提高编程的效率和速度。
3、 汇编程序的语句包括几个字段
(1) 标号:
(2) 指令或伪指令
(3) ;注释
4、编程的规则:
(1) 数据定义
(2) 程序开始地址定义
(3) 中断矢量表定义
(4) 硬件初始化程序
(5) 数据初始化程序
(6) 功能程序循环体
(7) 中断服务程序
(8) 通用子程序库
(9) 数据表定义
(10) 其它
5、使用子程序实现结构化编程方法
利用主循环体的功能程序将中断程序和各种子程序组合,组成大的应用程序


第二节∶程序结构类型
一、 简单(顺序)结构程序
不带分支,顺序执行(见P108例1)顺序结构程序是最基本的程序结构,各种结构的程序都是在其基础上形成的。
例1:ORG 1000H
F1:MOV R0,#22H;设置结果存放的地址的指针
MOV @R0,#0;清空结果存放单元
MOV A,20H;取BCD码数据
XCHD A,@R0;置换低四位
ORL22H,#30H;低位BCD码转换为ASCII码
SWAPA;准备高位BCD码
ORL21H,#30H;高位BCD码转换为ASCII码
MOV21H,A;保存高位ASCII码
RET

例2:ORG 1000H;子程序方式
F2:MOV R0,#21H;设置ASCII码存放的地址的指针
MOV R1,#20H;设置BCD码存放的地址的指针
CALLF3
……

ORG2000H
F3:CLRA;两位BCD码转ASCII码子程序
;R0存放ASCII码低地址指针
;R1存放BCD码地址指针
;占用A、R0、R1寄存器
MOV @R0,A;清空结果存放单元
MOV A,@R1;取BCD码数据
XCHD A,@R0;置换低四位
XCHA,@R0;先处理低位
ORLA,#30H;低位BCD码转换为ASCII码
XCHA,@R0;低位ASCII码放低位地址
INCR0;移动指针到高位
SWAPA;准备高位BCD码
ORLA,#30H;高位BCD码转换为ASCII码
MOV@R0,A;保存高位ASCII码至高位地址

RET
二、 分枝程序
(1) 简单条件分支P111
单一条件转移
例:数据排序—将30H和31H中的大数放在31H中,
小数放在30H中
PX:CLRC;清除标志位,准备减法
MOVA,30H;
SUBBA,31H;30H中的数据与31H中的
;数据

万福君、潘松峰

比较
JCNEXT;若30H中的数据比31H中
;的数据小则退出
MOVA,30H;当30H中的数据大于等
;于31H中的数据
;则将30H、31H中的数据交换
XCHA,31H;
MOV30H,A;
NEXT:RET
多重分支P113
例:数据排序—将30H和31H中的大数放在31H中,
小数放在30H中
PX:CLRC;清除标志位,准备减法
MOVA,30H;
SUBBA,31H;30H中的数据与31H中的
;数据比较
JCNEXT;若30H中的数据比31H
;中的数据小则退出
JZNEXT;若30H中的数据与31H
;中的数据相等退出
MOVA,30H;当30H中的数据大于
;等于31H中的数据
;则将30H、31H中的数
;据交换
XCHA,31H;
MOV30H,A;
NEXT:RET



例、设定20H字节中D0—D7放置八个条件,程
序根据条件执行相应的程序,并清除相应标志
FZTZ:JNB00H,TJ1
  CLR00H
LCALLTJ0CL
TJ1: JNB01H,TJ2
CLR01H
LCALLTJ1CL
TJ2: JNB02H,TJ3
CLR02H
LCALLTJ2CL
TJ3: JNB03H,TJ4
CLR03H
LCALLTJ3CL
TJ4: ······





(2) 散转分支(N路分支)
方法1:累加器中存放命令号,计算累加器中的偏量后执行
 MOVDPTR,#JMP-TBL
 CLRC
 RLCA
 JMP@A+DPTR
JMP-TBL:AJMPADDR1
 AJMPADDR2
 AJMPADDR3
 AJMPADDR4
 ·····
方法2:P115-P116; 方法3:P117
以上各种方法的区别在于计算转移地址,可灵活运用


三、 循环程序
对于有规律可循又反复处理的程序,可采用循环处理方式
(一)循环程序的组成
1、 循环体的初始化及初始化条件
2、 循环体及循环控制
3、 循环结束方式
(二)循环程序的形式
(1) 无限循环(死循环)
XH1: MOVXHJSQ,#20
LOOP:····
AJMPLOOP
(2) 定次数循环
XH1: MOVXHJSQ,#20
LOOP:····
DJNZXHJSQ,LOOP
RET
(3) 限幅式循环(条件退出或循环次数计满退出)
XH1: MOVXHJSQ,#100
LOOP:JBTJ1,TCXH
····
DJNZXHJSQ,LOOP
TCXH:RET
(4) 条件查询循环 (容易造成死循环,酌情使用)
LOOP:JNBTI,LOOP
···

JNBBIT,LOOP
···


(5) 多重循环、复合循环和循环嵌套







(6) 循环程序的变化---可重入的循环
XH1:MOVXHJSQ,#20
CALLXH2
····

XH2:DJNZXHJSQ,LOOP
····

LOOP: RET
(三)循环程序使用中应注意的问题:书上P125的6条中的2、3、4条在有效完成功能的前提下不必拘泥于此。


四、查表程序
查表程序在控制中应用比较广泛;对于非线性数据计算;复杂运算等工作中经常用到。
即能简化运算过程;又能提高运算速度。
如对热电偶采样数据线性化、作复杂运算等非线性运算、显示码表、数据转换等等时,可使用查表方式。
 MOVDPTR,#WENDUB;取数据表首址
 MOVA,WENDU;热电偶电压采样数据
MOVCA,@A+DPTR;取程序存

万福君、潘松峰

储器中的
;表格数据
 ···
WENDUB:DB 00,02,08,11
DB 15,19,23,29
   ···
   
   
练习题:2-13、2-18、3-7、3-8、4-5、4-7
2-13:不存在,内部和外部程序存储器用EA\引脚的电平区分,内部和外部数据存储器用指令区分,如 MOV 和 MOVX(P40)
2-18:不能,特殊功能寄存器只能用直接寻址方式访问。间接寻址方式读到的是高128字节RAM内容或随机数。
3-7:向2000H单元开始的十个字节中放入30H~39H的数,或者说0~9的ASCII码
3-8:将2000H单元开始的50H个字节,放入片内存储器30H地址开始的50H个字节中。程序执行完成后SP=7FH。
4-5:AAA:MOV R0,#30H;初始化数据指针
MOV R1,#38H
CLRA;初始化数据、标志
MOVB,A
MOV@R1,A
CLRC
MOVR2,#8;设循环次数
BBB:MOVA,@R1;循环累加
ADDCA,@R0
MOV@R1,A
MOVA,B
ADDCA,#0
MOVB,A
INCR0
DJNZR2,BBB
MOVR2,#3;除以8
CCC:MOVA,B
RRCA
MOVB,A
MOVA,@R1
RRCA
MOV@R1,A
DJNZR2,CCC
RET
4-7:MOVR0,#BLOCK
MOVR1,#MINI
MOVR2,#LEN
MOVA,@R0
AAA:CLRC
MOVB,A
INCR0
SUBBA,@R0
JCBBB
MOVA,B
XCHA,@R0
SJMPCCC
BBB:MOVA,B
CCC:DJNZR2,AAA
MOV@R1,A
RET


五、子程序结构
(一) 子程序的优点
1、 提高编程效率
2、 便于简化程序的逻辑结构,便于阅读
3、 减少程序长度,节省占用存储器空间
4、 使程序模块化、通用化,共享程序资源
5、 便于调试
(二) 子程序的调用
1、 在程序中写入子程序数据准备程序
2、 写入子程序的调用指令 “CALL 子程序名”
3、 取用子程序运算数据
(三) 子程序的结构
子程序的结构必须具备子程序入口(地址或标号)和RET指令
(四) 编制子程序应注意的问题:
1、 注意主程序与子程序之间数据的传递方法(数据区、寄存器、堆栈等)
利用堆栈传送数据:在单片机编程中由于RAM资源与编程方法的限制酌情使用,在进行少量数据交换时也会用到,或作数据暂存
2、 数据的保护:堆栈、寄存器组等
调用子程序和响应中断时的现场保护
需要保护的数据:原则是中断程序中使用到的那些通用寄存器
(1) PSW
(2) ACC
(3) DPL、DPH
3、 子程序的通用性
4、 子程序的可浮动性(正确使用标号,对于单片机,使用自动编译程序时一般不考虑)
5、 子程序的可递归、可嵌套和可重入性
6、 加子程序说明:子程序名、使用的
寄存器名、入口数据类型、出口数据类型、子程序功能说明、调用其它程序说明等

(五) 子程序递归调用
递归调用是一种比较复杂算法中用到的调用形式,在子程序中反复调用自身的子程序,容易造成堆栈溢出,使用中必须注意可能调用的层数。



AAA:PUSHPSW; 递归调用

万福君、潘松峰

例1
JBBIT,ABC

CALL AAA

ABC:POPPSW
RET

AAA:PUSHPSW; 递归调用例2
JBBIT,ABC

CALL BBB

ABC:POPPSW
RET

BBB:PUSHPSW
JBBIT,ABC1

CALL AAA

ABC1:POPPSW
RET



六、程序设计技巧
注意51单片机指令的特点和标志位的变化,仔细分析书中实例
(一) 程序的系统结构
1、 主程序部分
(1) 堆栈指针设置:根据运行程序的最大可能深度设置
(2) 硬件初始化:要用到的需要设置的硬件部分的初始化
(3) 数据初始化:开机数据的设置、复位和掉电的判断等保证系统正常运行的数据的设置与恢复
(4) 功能循环体:通过判断条件有序的循环执行功能程序
2、 中断矢量与中断程序部分
(1) 定义中断服务程序名称、中断矢量设置
(2) 编制时钟中断服务程序
(3) 编制其它中断服务程序如:计数器中断、外部中断、串行口中断等
3、 功能子程序部分
(1) 键盘、显示程序:键盘扫描、输出显示
(2) 输入、输出程序:数据采集、控制输出
(3) 数据滤波程序:数据真实性处理
(4) 数据保存程序:E2PROM写入程序及写入可靠性判断
(5) 控制功能程序:完成工艺要求的控制功能,并有效处理生产过程中发生的异常情况
(6) 报警程序:对控制过程中的异常情况报警并记录
(7) 通讯程序:与系统中的其它控制器或计算机进行必要的数据交换
(8) 打印程序:
4、 通用子程序部分:包括各种通用运算程序,可形成子程序库,形成积累,提高编程速度和质量
5、 数据表部分:必要的数据准备
(二) 数字滤波程序设计
1、 程序判断法滤波和限幅滤波 :根据实际数据数值的可能性,去除不合理的数据
2、 算术平均滤波:将多次采样数据取平均值
3、 中值法滤波:取中间值作为有效值
4、 加权滤波:根据各次采样数据的比重进行计算
5、 递推滤波、滑动平均值滤波:取最近数次采样的数据平均
6、 斜率法滤波:根据信号变化的最大斜率限幅
7、 复合滤波和其它方法滤波
(三)软件抗干扰技术
1、 单字节指令重复
CLRA
CLRA
MOVA,R0
2、 关键程序执行前的通行证的发放与执行时的判别方法(如EEPROM的写入程序等)
3、 软件陷阱(在RET、RETI、绝对转移指令后加入软件陷阱程序)
RET JMP…
NOP
NOP
LJMP ERR
4、 错误处理程序软件复位(P189)0
ERR:CLREA;关中断
MOVDPTR,#ERR1;准备返回地址
PUSHDPH
PUSHDPL
RETI;清除高
级中断激活标志
ERR1:MOV66H,#0AAH;重建上电标志
MOV67H,#55H
CLRA;准备复位地址
PUSHA
PUSHA
RETI;清除低级中断激活标志
5、 看门狗电路扫描(外加单稳定时电路)
6、 软件看门狗保护
7、 关键

万福君、潘松峰

程序标志保护

第6章∶定时器/计数器、串行通讯口及中断系统

第一节∶定时器和计数器(控制程序执行节奏的核心)
一、定时器和计数器的控制与状态寄存器
1、定时器和计数器的数量以及与系统时钟的关系
T0、T1、(T2)---16位加1计数器
脉冲源变化形成计时和计数的功能不同
计数器时,Tx(P3.4和P3.5)用于外部信号计数,由外部脉冲的下降沿触发(计数的最大频率为主频的1/24以保证正确判断计数脉冲的变化)
定时器时,系统时钟12分频 (计时器方式)






2、定时器的4种工作方式的设置及有关功能寄存器
工作方式控制寄存器TMOD∶T1∶(GATE、C/T\、M1、M0) T0∶(GATE、C/T\、M1、M0)
GATE:用于选通控制:
=0时—只要TRX=1即选通定时/计数器工作
=1时—只有当INTX端口为高电平,且TRX=1时才选通
C/T:用于选择计数器或定时器模式,----即选择脉冲源
=1时为计数器、
=0时为定时器,
M1、M0 用于定义工作方式
0 0 方式0 13位计数器
0 1 方式1 16位计数器
1 0 方式2 自动再装入的8位计数器
1 1 方式3 将T0分成两个8位计数器并占用T1的控制寄存器状态位
启停与中断控制寄存器TCON∶
T1∶(TF1、TR1);T0∶(TF0、TR0);
INT1∶(IE1、IT1);INT0∶(IE0、IT0)
TFx:溢出中断请求标志位 (硬件自动复位)(只用于检测)
TRx:定时器起停控制位
IEx:外部中断请求标志位(只用于检测)
ITx:外部中断触发形式设定位 =0 低电平触发 =1 下降沿触发
T2CON:(TF2,EXF2,RCLK,TCLK,EXEN2,TR2,C/T2,CP/RL2)
TF2: 溢出中断请求标志位 (由软件复位)
EXF2: T2外部中断请求标志位
RCLK: 串行口接收时钟标志位
TCLK: 串行口发送时钟标志位
EXEN2:T2外部采样允许标志(1允许;0不允许)
TR2: T2定时器起停控制位
C/T2: 用于选择计数器或定时器模式
CP/RL2:捕获/再装入选择标志位

二、定时和计数方式的用途和例程举例
1、 方式0 定时器/计数器工作例程
13位! 这种方式好象是为了在编程时方便用过48系列单片机的人
例:
MOV TMOD,#84H ;设置定时/计数器1为13位定时方式,由INT1引脚高电平且,TR1置1时启动(可用于监测INT1引脚脉冲宽度)
设置定时/计数器0为13位计数方式,由T0引脚输入计数脉冲,TR0置1时立即启动
MOV TH0,#XXH;设置定时器1的定时参数(高位字节)
MOV TL0,#XXH;(低位字节)
MOV TH1,#XXH;设置计数器0的计数参数(高位字节)
MOV TL1,#XXH;(低位字节)
;以上参数设置指令,必须在中断处理程序的开始重写,即每次中断都要设置一次
SETB TR0;启动计数器0
SETB TR1;

万福君、潘松峰

启动计数器1,并在INT1引脚高电平时启动定时(可利用外部中断读取计时值)


P174图6-3定时器/计数器方式0工作逻辑图

2、方式1 定时器/计数器工作例程
16位定时器/计数器方式:定时时间长,可用于高频计数,并可方便的用于测量信号的频率。

例:
MOV TMOD,#95H ;设置定时/计数器1为16位定时方式,由INT1引脚高电平且
;TR1置1时启动
;设置定时/计数器0为16位计数方式,由T0引脚输入计数脉冲
;TR0置1时立即启动
MOV TH0,#XXH;设置定时器1的定时参数(高位字节)
MOV TL0,#XXH;(低位字节)
MOV TH1,#XXH;设置计数器0的计数参数(高位字节)
MOV TL1,#XXH;(低位字节)
;以上参数设置指令,必须在中断处理程序的开始重写,即每
;次中断都要设置一次
SETB TR0;启动计数器0
SETB TR1;启动计数器1,并在INT1引脚高电平时启动

3、 方式2 定时器/计数器工作例程
自动再装入的8位定时器/计数器:
定时器/计数器的高8位用于重装值(计数初值)寄存器,低8位用于做运行定时器/计数器
这种方式不丢失计数值。用于反复定时(如用于系统时钟定时器和串行口的波特率发生器且波特率发生器只能用方式2工作);另外还可以用于反复等量计数(装箱流水线)






例:
MOV TMOD,#0A6H ;设置定时/计数器1为8位自动重装定时方式,由INT1引脚高
;电平且TR1置1时启动
;设置定时/计数器0为8位自动重装计数方式,由T0引脚输入计
;数脉冲,TR0置1时立即启动
MOV TH0,#XXH;设置计数器1的计数参数(高位字节:重装用)
MOV TL0,#XXH;(低位字节:定时用)
MOV TH1,#XXH;设置定时器0的定时参数(高位字节:重装用)
MOV TL1,#XXH;(低位字节:)
;以上参数设置指令,不用在中断处理程序的开始重写,可自
;动重装,除非要改写运行参数
SETB TR0;启动计数器0
SETB TR1;启动定时器1,并在INT1引脚高电平时启动


4、 方式3 定时器/计数器工作例程
将T0分成两个独立的计数器,TL0组成完整的8位计数器;TH0组成只能计时的8位定时器。这种方式不常用,往往是在既有串行口的波特率发生器,又需要两个8位定时器的场合(这是在51系列初期解决定时器比较少的问题时不得已的方法,在52单片机中增加了T2)

T0具有以上4种工作方式,T1只具有前面3种工作方式
例:
MOV TMOD,#27H ;设置
定时/计数器1为8位自动重装定时方式(可用于波特率
;发生器,不允许中断),
;设置定时/计数器0为两个8位计数方式,由T0引脚输入TL0计
;数脉冲,TR0置1时启动TL0定时/计数器,TR1置1时启动TH0
;定时器,
MOV TH0,#XXH;设置定时器TH0的计数参数

万福君、潘松峰


MOV TL0,#XXH;设置计数器TL0的计数参数
MOV TH1,#XXH;设置定时器0的定时参数(高位字节:重装用)
MOV TL1,#XXH;(低位字节:)
;以上TH0和TL0参数设置指令,要在中断处理程序的开始重写
;T1参数设置指令,不用在中断处理程序的开始重写,可自
;动重装,除非要改写运行参数
SETB TR0;启动计数器TL0
SETB TR1;启动定时器TH0,并在INT1引脚高电平时启动



三、计数初值的计算
计算公式:使用12MHz晶振
12 12
一个机器周期=------------- = ---------- = 1微秒
晶振频率 12M

定时值计算:因为:定时时间=计数值X*机器周期
定时时间
所以:X= ---------- 而计数器设置初值 Y=2n-X
机器周期

定时时间
因此 Y=2n-(---------)
机器周期


四、 定时器/计数器编程举例:定时器初始化程序

例程∶》1
FFFFH=65536 55536 =D8F0H 65536-55536=10000
T0定时时间=10000*1us=10ms
设晶振频率位12MHz,P1口接八个指示灯,P2.0接一个选择开关,制作流水灯控制器,每0.01秒移动一次或每0.5秒移动一次(画出电路原理图)
方式1,定时,中断
ZDJSQEQU40H;中断计数器
SJSDZ1EQU42H;时间设定值1
SJSDZ2EQU44H;时间设定值2
SCHCQEQU2CH;输出缓冲区
T0BZEQU08H;0.1秒定时标志
YDBZEQU09H;移动标志

ORG 0000H;程序进入地址及转移指令
LJMP START
ORG 0003H;中断向量区
LJMP INTINT0;外部中断0转移指令
ORG 000BH
LJMP INTT0;定时器0中断转移指令
ORG 0013H
LJMP INTINT1;外部中断1转移指令
ORG 001BH
LJMP INTT1;定时器1中断转移指令
ORG 0023H
LJMP INTDX;串行口中断转移指令
ORG 002BH
LJMP INTT2;定时器2中断转移指令

ORG 0030H
START:MOV SP,#60H;初始化程序
MOV TMOD,#01H;00010000
MOV TH0,#0D8H
MOV TL0,#0F0H
SETB EA;开总中断
SETB ET0;开定时器0中断
SETBTR0;启动定时器0工作
MOVSJSDZ1,#1;初始化时间设定值
MOVSJSDZ2,#50;初始化时间设定值
MOVZDJSQ,SJSDZ2;取时间设定值
MOV SCHCQ,#01H
LOOP1:ACALL IOCZ;I/O操作子程序
ACALL BJCX;报警子程序
ACALL ZKCX;主控制程序
SJMP LOOP1

IOCZ:JBCYDBZ,IOZC1;IO操作子程序
RET
IOZC1:MOVA,SCHCQ
RLA
MOVSCHCQ,A
MOVP1,A
CLRYDBZ
RET

ZKCX:JNBT0BZ,ZKCX1;利用0.01秒定时中断
CLRT0BZ
DJNZZDJSQ, ZKCX1;判断延时时间到
JBP2.0,ZKCX2
MOVZDJSQ, SJSDZ1;初始
化时间设定值0.01S
SETBYDBZ
ZKCX1: RET
ZKCX2:MOVZDJSQ, SJSDZ2;初始化时间设定值0.5S
SETBYDBZ
RET

INTT0:PUSHPSW
PUSHACC
MOV TH0,#0D8H;重置定时

万福君、潘松峰

器初值
MOV TL0,#0F0H
SETBRS0;选择1组寄存器
CLRRS1
MOVA,SCHCQ
RLA
MOVP1,A
MOVSCHCQ,A
INCZDJSQ
MOVA,ZDJSQ
CJNEA,#50,INTT01
MOVZDJSQ,#0
SETBT0BZ;0.01秒置一次标志
INTT01:NOP
POPACC
POPPSW
RETI




例程2:方式2,计数24,中断.装箱流水线计数24个动作一次
使用T1对P3.5的脉冲计数,当计满24时在P1.0口输出低电平,控制气缸动作,当机械到位后P1.1口输入为低电平时,置位P1.0为高电平,P1.2接一个延时报警器
使用计数器1,P180图6-9
PJS1EQU40H;批计数低位(60箱一批)
PJS2EQU41H;批计数高位
ZDJSQEQU48H;中断计数器
ZXJS1EQU42H;整箱计数
ZXJS2EQU43H;整箱计数
T1BZEQU09H;T1中断标志
启动地址和中断矢量表
START:MOV SP,#60H;初始化程序
MOV TMOD,#06H;
MOV TH1,#0E8H
MOV TL1,#0E8H
SETBP1.1;设P1.1为输入方式
CLRP1.2;初始化报警器
SETB EA;开总中断
SETB ET1;开定时器1中断
SETBTR1;启动定时器1工作
CLRA;数据初始化
MOVZDJSQ,A
MOVZXJS1,A
MOVZXJS2,A
MOVPJS1,A
MOVPJS2,A
LOOP2:ACALL BJCX;报警子程序
ACALL ZKCX;主控制程序
SJMP LOOP2

BJCX:JBP1.1,BJCX1;报警子程序
;每次装箱响一次铃
SETBP1.2;高电平报警
RET
BJCX1:CLRP1.2
RET

ZKCX:JBP1.1,ZKCX1
SETBP1.0;复位装箱装置
MOVA,ZXJS1;装箱计数
ADDA,#1
MOVZXJS1,A
MOVA, ZXJS2
ADDCA,#0
MOVZXJS2,A
ZKCX1: JNBT1BZ,ZKCX2
NOP
INCPJS;批计数
ZKCX2:RET

INTT1:PUSHPSW
PUSHACC
SETBRS0;选择1组寄存器
CLRRS1
CLRP1.0;低电平控制输出,装箱
INCZDJSQ
MOVA,ZDJSQ
CJNEA,#60,INTT01
MOVZDJSQ,#0
SETBT1BZ;60箱子置一次标志
INTT01:POPACC
POPPSW
RETI




第二节∶串行口

数据的传输方式∶1、串行∶①同步方式*串行显示器、扩展I/O
②异步方式*串行通讯
③应答方式

2、并行∶①同步方式*扩展I/O
②异步方式
③应答方式*(打印机)
数据的传输方向:单工;半双工;双工
概述串行口的应用∶减少费用;BP机;联网;传真;卫星通讯等


SSSSSSSSSSS


串行通讯使用电线连接两台以上的计算机实现数据传送,达到费用省,连接方便灵活,传送距离长,可以扩展为无线通讯。
通用串
行口控制器举例: INS8250、INS8251、MC6850、Z80-SIO等都是可编程芯片,专门用于配合各种CPU用于串行通讯。一般CPU的操作数据工作在并行方式下,为了用串行方式通讯,必须把CPU的并行数据转换成串行方式送出去,或把串行数据转换成并行数据送入CPU。
波特率的概念

万福君、潘松峰

:近似于表示频率的赫兹,由于在数字传输中,信息的传送速率一定时,每个单位时间无论信号是0还是1,都表示一个信息位,所以使用波特率的概念。波特率是在一秒钟内传送的数据的位数。
一、 串行口的控制与状态寄存器P184
1、
2、 串口控制寄存器SCON∶SM0、SM1、SM2、REN、TB8、RB8、TI、RI
SM0、SM1用于方式选择见表6-3(P184)
SM2用于多机方式:
SM2=1且REN=1时,如果RB8=1则触发中断,RB8=0则不触发中断
SM2=0且REN=1时,RB8=0也可触发中断接收数据(从机)
REN用于输入允许:=1允许、=0禁止(采用RS-485标准通讯时防止读入写出数据)
TB8多机方式第九位输出
RB8多机方式第九位输入
TI、RI与其它中断请求标志不同,必须在中断程序中用软件清零,如果不清除会在退出中断程序后再次进入中断。
3、 PCON(地址87H,无位寻址)中的波特率选择位SMOD (PCON.7),在前面讲过省电方式中其它位的用处(P49)
4、 SMOD=1时方式1、2、3频率加倍(方式0是固定频率1/12fosc)
5、 波特率定时器T1或T2
51单片机的串行口的波特率取决于波特率发生器(定时器)的溢出率和波特率选择位SMOD.
6、 中断屏蔽位ES(IE.4地址A8H)

二、 51单片机串行口的工作方式

方式0∶同步移位寄存器方式(固定频率1/12fosc) 一般用于极短距离高速串行通讯,时序图见P185图6-11
(要求SM2=0)
TXD(P3.1)用作同步脉冲(只能主动方式)
RXD(P3.0)用作数据输入/数据输出(8位数据低位在先)
应用:
1、用移位寄存器做并口扩展
2、 用于串行工作方式芯片操作:A/D、D/A、EEPROM等
3、 用于多CPU并行工作时的数据连通
发送时:数据写入SBUF后开始自动发送,8位数据低位在先,移位完成后请求中断(应允许中断)
接受时:应允许中断,清除RI,当设置允许输入标志REN=1 时启动输入

方式1∶可设定频率常规异步串行通讯(8位UART格式,一帧数据10位:1位起始位、8位数据位、1位停止位) SM2=0
2SMOD
波特率=-------------×(T1或T2的溢出率)
32
T1的溢出率=定时器1的溢出次数/秒
时序图见P187图6-13
TXD(P3.1)用作数据输出 写入SBUF开始按设定波特率发送,发送完一帧数据后请求中断
RXD(P3.0)用作数据输入 REN=1 当RXD的电平从1到0时,按设定波特率接收,接收完一帧数据后请求中断(条件:RI=0、SM2=0,否则接收的数据作废)



式2∶固定频率多机方式异步串行通讯(1/64fosc或1/32fosc)(一帧数据11位:1位起始位、8位数据位、1位第9标志位,1位停止位)时序图见P187图6-14
SM2=1 时只有RB8=1接收的数据才有效,用于多机通讯地址的识别
2SMOD
波特率=-----------

本文来源:https://www.bwwdw.com/article/1uz1.html

Top