微机原理知识点汇总
Unit 1 微机基础
-
三总线:AB(address bus)地址总线、DB数据总线、CB控制总线
-
非压缩BCD——高位全0
-
ASCII码——先列后行
-
变补——即求[ – Y]补,所有位(包括符号位)按位取反,再加1
-
溢出——双高位判别法:
- Cs : 最高位,即符号位
- Cp : 数字最高位,即次高位
Unit 2 8086微处理器CPU
-
寄存器
-
通用寄存器
- 数据寄存器:AX(累加器),BX(基址),CX(计数),DX(数据)
- 指针寄存器:SP,BP(基址指针),SI,DI
- 变址寄存器:CS、DS、ES、SS
- 专用寄存器:IP、F
-
标志位寄存器F(9位有含义):
状态标志位
-
进位标志CF(carry flag):反映算术运算后是否出现进位或借位,有为1
-
辅助进位AF(assist flag),反应运算结果低4位是否向高位进位或借位
-
奇偶标志PF(parity flag),反应结果低8位中1的个数是否为偶数
-
零标志ZF(zero flag):当运算结果为0,ZF = 1
-
符号标志SF(sign flag):与运算结果最高位(符号位)保持一致,
-
溢出标志OF(overflow flag):有溢出则为1
控制标志位
-
方向标志DF(direction flag):控制串操作步进方向,为1则按地址递减(下–>上)进行,0按递增方向
-
中断允许标志IF(interrupt flag):允许中断为1,关闭中断为0
-
陷阱标志TF:为1执行一条指令则中断,调试程序时用
-
-
-
引脚
-
引脚功能:40个引脚分4部分:AB、DB、CB及其他(时钟和电源)
-
AB地址总线&DB数据总线
-
20条地址总线,对应1M内存,即220
-
在CPU和内存(或IO设备间传数据),是16位双向三态总线
-
引脚AD15到AD0为地址和数据分时复用线,找到地址后释放,变为数据总线
-
AD19到AD16/S6到S3为地址状态粉饰复用线
-
-
CB控制总线
- def : 传送控制信号的一组信号线
- 输出:传输CPU送至其他部件的控制命令
- 输入:从外部向CPU输入状态请求信号
- MN/MX非 线,即最小最大方式控制线,当接+5V时表示最小方式运行:
- M/(IO非)——存储器/输入输出控制信号,高电平表示CPU访问的是存储器memory,低电平访问的是I/O端口
- DT/R非——数据发送/接收信号,用于指示CPU执行写操作还是读操作
- DEN非数据允许信号,低电平有效表示允许接收数据
- WR非——指示CPU对M或I/O进行写操作
- ALE——地址锁存允许信号,至少21位
- INTA非——中断响应信号,CPU通过该引脚,给出连续两个连续的负脉冲表示响应中断
- 不受MN线控制:
- 其他信号:CLK、VCC、GND
-
-
存储器
-
分段管理:将内存20位地址分为64K 长度(对应段寄存器为16位)的24 = 16段管理,而当程序或数据量较大时,超过了64KB,那么可以定义多个代码段或数据段、堆栈段、附加段
-
物理地址——20位,逻辑地址——16位(段偏移量)
-
重要指针对:
-
规则字——高低位存在一对高低位库
-
堆栈——FIFO,暂存数据
- 最多64K个单元,SS存堆栈段首地址,SP存栈顶单元偏移量
- 堆栈操作按字(即2个byte,例如2233H)进行,因此SP是2位移动
- PUSH与POP操作(POP仅仅是读操作,数据仍存在地址中,只是SP下移)
- 高对到低对低存储
- 堆栈画图题
-
IO资源
- 存储空间为64K,即16条IO端口地址线(0000H~0FFFFH,而存储器地址是00000H ~ FFFFFH,故会有重叠部分
- 避免混乱——独立的指令IN/OUT
-
时钟与总线周期:
-
复位:大部分清零,只有CS寄存器FFFFH(故复位后,第一条指令放在FFFFH : 0000H)
-
Unit 3 汇编语言基础
3.1 寻址
-
寻址方式def:即逻辑地址EA生成PA物理地址的关系,操作数可位于寄存器、存储器或I/O端口中。
-
源操作数(src)和目的操作数(dst)应分别说明寻址方式
-
寻址方式
-
寻址方式小结:
-
立即数可以出现在方括号内,表示直接地址,如[2000H],类似指向2000H指针
- MOV [2000H],AL 即赋2000H值为AL
- MOV AL,[2000H] 即赋AL值 = 2000H存的数据
- MOV BX,2000H——把地址给BX
-
只有BX、BP、SI、DI这四个寄存器可以出现在[ ]内,它 们可以单独出现,也可以几个寄存器组合,或以寄存器与 常数相加的形式出现,但BX和BP寄存器不允许出现在同一 个[ ]内,SI和DI也不能同时出现
-
由于方括号有相加的含义,下面几种写法都是等价的
例如DISP[BX] [SI] < = > EA = BX + SI + DISP
-
若方括号内包含BP,则隐含使用SS来提供基地址
其余情况均隐含用DS作基地址, 物理地址 PA=16×DS+EA
-
注意:计算EA时,相加的结果一定要按16位归算
-
IO注意:一方只能为PORT或DX,另一方只能为AL(8位)或AX(16位)
-
-
(3)寄存器寻址,相对基址变址寻址
(5)隐含寻址,固定寻址
CS不可作为目的操作数
两个段寄存器间不能直接传输数据
-
PUSHF
-
寄存器间接寻址不能用AX——[AX] 是×
- MOV AX,2000H——取2000H存的数据给AX
- MOV AX,[2000H]——取2000H给AX
-
注意操作数位数对应MOV AX, WORD PTR[SI]
-
IO端口只能用DX
3.2 数据传输指令
-
-
注意事项:
-
R寄存器,SR段寄存器,M存储器,Im立即数
-
操作数的类型匹配(8/16位), 取决于R或者立即数 的位数
-
不允许在段R之间直接传送信息
-
CS和IP不能用作目的操作数,内容不能随便修改
-
-
通用传送指令——MOV
-
PUSH&POP
-
通用寄存器:PUSH AX
-
段寄存器:PUSH CS
-
存储器:PUSH [SI]
-
标志位:PUSHF/POPF
-
考点——堆栈实现轮转
-
-
累加器AX专用传送指令
- IN/OUT
- 对于IN指令,目的操作数只能为AL或AX,源操作数为PORT(直接)或DX(间接)
- OUT指令,目的操作数只能为PORT或DX,源操作数只能为AL或AX
- 换码指令XLAT
- BX为表首址,AL为要转换的数
- IN/OUT
-
地址目标传送——load EA/DS/ES
- LEA BX,[SI]——把SI的逻辑地址给BX
- LDS ——传送32位地址,低位给通用R,高位给DS
- LES ——传送32位地址,高位送ES,dst不能为段寄存器,src为M数
-
标志传送
- 读:LAHF——读F低8位(SF,ZF,AF,PF,CF)传给AH
- 写:SAHF——AH内容写入F低8位
3.3 算术运算指令
-
加法:
- 不带进位:ADD
- 带进位:CLC+ADC —— ADC dst,src => dst=src+dst+CF
- 自加1:INC src——不影响CF,其余的标志位影响
- DAA:自动调整压缩BCD码,14H变为14D,紧跟在AL赋值之后
- AAA:非压缩BCD码调整
-
减法:
-
不带错位:SUB——dst = dst -src
-
带错位:SBB
-
自减1:DEC
-
求变补:NEG——求相反数,用于求Im-M类型NEG AL&ADD AL,IM
-
比较指令:CMP,与SUB区别是只返回标志位
-
-
乘法:——隐含目的操作数为AX/DX+AX
- 无符号数:MUL src
- 8x8 : AL x src ->AX
- 16x16:AX x src ->DX AX
- 16x8 <=> 16 x 16(补0)
- 有符号数:IMUL src
- IMUL CL
- 无符号数:MUL src
-
除法类:隐含目的操作数为AX
-
-
无符号数:DIV src
-
有符号:IDIV src
-
结果超出AL/AX容量,产生0中断
-
除法运算后,AF、ZF、OF、SF、PF和CF都不确定(无意义)
-
-
带符号数扩展
- AL/8变AX/16:CBW(change byte word)
- AX扩展到DX+AX中:CWD(change word double)
3.4 逻辑运算
-
对寄存器影响
u表示无意义,x表示影响
进位清零,溢出清零
-
AND dst,src —— dst ← dst∧src
- AND AX,AX——仅影响标志位
- =CLC
- 通过ZF判断AX是否为0
- AND AX,AX——仅影响标志位
-
OR dst,src
- 同AND AX,AX
-
XOR dst,src
- 0异或A ——保持
- 1异或A ——取反
- XOR AX,AX —— AX,CF清零
-
NOT src —— src = ~src
- 不影响标志位
- 需说明属性——WORD PTR / BYTE PTR
-
TEST dst,src ——只影响标志位,用于测试指定位是0还是1
- TEST AL,80H —— 检验符号位,ZF = 1表示符号位为0
-
移位类
-
SAL src,count 算术左移
-
SAR src,count算术右移
-
SHL src,count逻辑左移
-
SHR src,count逻辑右移
count = n 时,先MOV CL,n再移位,n<255
算术移位用于带符号数,逻辑移位用于无符号数
-
左移即 x 2两种无区别,低位补零
-
SAR符号位不变,SHR符号位补零,低位均是移到CF
-
-
循环移位(不补零类似循环队列)
3.5 串操作
-
唯一一类src与dst均在存储单元的指令
-
隐含:DS:SI指向源串首地址,ES:DI指向目的串首地址,若同段操作则——MOV ES,DS。移动后自动加减
-
CLD让DF=0则由低到高递增进行 ↓,STD让DF=1 ↑则由高到低串尾到串首
-
重复次数与CX有关
-
处理长度为64K,即CX=0FFFFH
-
三种重复前缀
REPE/REPZ与CMPS连用,判断字符串是否一致
REPNE/REPNZ与SCAS连用,判断字符串是否有AX/AL中的值
-
移动串MOVSB与MOVSW
- MOVSB传输后自动SI/DI±1,MOVSW ±2
- SI<DI,即SI在上面,必须从高到低处理,先把尾部处理,先STD
-
取信息LODSB/LODSW——DS: SI取到AL/AX
-
存信息STOSB/STOSW——AL/AX信息存到ES: DI
-
比较串CMPSB/CMPSW——SI-DI只影响标志位
-
扫描串SCASB/SCASW ——AL/AX - ES:DI
-
范例
MOV AX,2000H MOV DS,AX MOV AX,3000H MOV ES,AX MOV SI,1500H MOV DI,0200H MOV CX,4 REP MOVSB
注:MOV AX,[2000H]指把存在2000H的数值赋给AX
3.6 转移指令
-
JUM无条件转移:
- 段内直接转移JMP NEAR PTR B2——IP变
- 段内短转移 JMP SHORT B2
- 段内间接转移JMP BX ——IP ←BX
- 段间直接转移JMP FAR PTR B2—— IP,CS都变
- 段间间接转移JMP DWORD PTR [BX]DS段/[BP] [DI]SS段/[BX] [SI]DS段
- 段内直接转移JMP NEAR PTR B2——IP变
-
CALL调用——产生断点去执行
-
CALL NEAR PTR B1
-
CALL FAR PTR B2
-
步骤
-
断点保护:段内调用IP入栈,段间调用CS入IP再入
-
CALL
-
RET 2/RET 4
-
-
-
条件转移
-
直接标志转移——标志位满足条件就转移
-
间接标志转移——标志位运算满足条件则转移
-
转移超限——针对条件转移
- 条件转移指令转移的范围只有-128~+127
- 接力法——条件转移+JMP
JZ ADDR1 ; ADDR1: JMP B1 ; B1: ;
- **反指令法——**反指令跳转原本不满足运行的下一条,再跟着JMP TARGET
JG AGAIN;超范围 NEXT:;
JLE NEXT JMP AGAIN
-
-
循环指令
-
LOOP B1——次数取决于CX值
-
LOOPE/LOOPZ B1—— ZF=1&CX!=0跳转B1执行,ZF=0退出
-
LOOPNE/LOOPNZ B1——ZF=1退出
-
3.7 控制指令
-
标志位控制指令
蓝色部分,需要背住
-
暂停指令——HLT
-
空操作——NOP
NOP空耗3个时钟周期
-
中断指令
-
保护断点CS:IP外还需要保护现场(F寄存器入栈)
-
调用格式:INT n(每级中断4个字节,共0~255占M最低03FF空间)
-
详解中断过程——以1号中断为例,必考
;关于中断空间存储的是啥 ;1号中断对应4个字节0004,0005,0006,0007H ;要执行的中断程序IP存前两个,CS存后两个 ;即IP存在0004H0005H ;CS存在0006H0007H
;起始位置 = 1 * 4 =0004H ;step1——F入栈,SP = SP-2, F→SP,SP+1 ;step2——IF=0;TF=0关闭中断 ;step3——原断点处CS入栈 ;step4——原断点处IP入栈 ;IP = {n*4+1,n*4} ;CS = {n*4+3,n*4+2}
-
内部专用中断—— n = 0~4
- n=2:不可屏蔽中断,NMI引脚收到上升沿时,产生不可屏蔽中断
-
中断返回——IRET,弹出IP/CS/F
-
3.8 DOS功能调用——汇编自带库函数
-
调用方法——MOV AH xx + INT 21H
-
重要考点
-
2号功能调用——显示一个字符
;显示数据给DL MOV AH,02 MOV DL,24H;显示‘$’,DL赋值为ASCII码 INT 21H
-
9号功能调用——显示字符串
;显示字符串,DS:DX指向存放字符串ASCII码的连续内存的首地址 ;连续内存最后有结束符号24H对应‘$’ ;因此9号功能调用无法显示‘$’ ;举例——显示字符串 STR1 DB “How are you?”,0DH,0AH,'$' ;0DH即回车CR,0AH即换行LF ;关键在于赋值DS:DX MOV AH,9 MOV DX,SEG STR1 MOV DS,DX MOV DX,OFFSET STR1 INT 21H
-
返回DOS功能——4CH,放在程序结尾处
;在每次调用完DOS后使用作为结尾 ;举例 CODE SEGMENT START: MOV AH,2 MOV DL,'$' INT 21H MOV AH,4CH INT 21H;返回DOS CODE ENDS ENDS START
-
Unit4 汇编程序设计
4.1 编译流程
- 考点——选择题
4.2 几个概念
- 指令性语句—— AA: ……
- 伪指令——ORG/PROC
- 宏指令——MACRO
- 操作数——常数,变量,标号(AA),保留字(系统预定义)
4.3 汇编段落属性伪指令
-
分段——SEGMENT……ENDS
DATA SEGMENT PUBLIC 'DATA';注意此处类别名为单引号 ;PUBLIC 指组合类型,表明本段与其他段关系 STR DB "Hello world",0DH,0AH,'$' DATA ENDS
说明:字符串一般使用“……”
若使用‘……’,则无法显示‘’THIS is ‘a’.”这种含单引号的语句
-
段指示——ASSUME
ASSUME CS:CODE,DS:DATA,SS:STACK
-
定位伪指令ORG和 当前位置计数器$
-
ORG 2000H——设置段起始位置2000H
-
$ ——始终指向下一 个存储单元的偏移地址
-
常用格式——获取数组长度
STR1 DB ..... COUNT EQU $-STR1
-
-
程序结束指令END——标记汇编源程序结束,放在最后
CODE SEGMENT PUBLIC 'CODE' START: MOV AX,DATA MOV DS,AX CODE ENDS DATA SEGMENT ORG 3000H STR DB 21H DATA ENDS END START
-
程序块定义——PROC….ENDP
- def:类似高级语言中的定义方法或函数
- 中间必须出现RET/RET n
;定义子程序块功能,通常配合CALL调用 ADD1 PROC FAR MOV DX,1 ADD AX,DX RET ADD1 ENDP ..... CALL FAR ADD1;此处要与定义时的属性FAR对应
-
程序块通信——PUBLIC/EXTRN
EXTRN ADD2:FAR,ADD3:FAR;声明本模块中要引用外部ADD2,ADD3模块 ADD1 PROC FAR PUBLIC ADD1;声明可以被其他模块访问 .... ADD1 ENDP
4.4 汇编表达式与运算符
-
算术——+,-,*,/,MOD,SHL( *=2),SHR( /=2)
-
逻辑——AND/OR/XOR/NOT
-
关系——EQ,NE/LT(less than)、GT(large than)/LE(less and equal)、GE
- 操作数性质需相同,返回0000H或0FFFFH
-
SEG ——求段基址,SEG STR = DS
-
OFFSET——求偏移量
;运算符完成是在汇编之前,即在MASM.exe转为.obj文件前 MOV BX,OFFSET STR1 <=> MOV BX,2;汇编结果 ;相当于 LEA BX,VAR2
-
TYPE——求类型
- TYPE STR(DB)= 1
- TYPE STR(DW)=2
-
LENGTH——求变量数
N1 DW 10 DUP(0) MOV AL,LENGTH N1;AL=10
-
SIZE—— SIZE = LENGTH * TYPE
-
PTR——生成一个新的存储器地址操作数,指向给出的地址
VAR1 DW 2030H VAR2 EQU PTR VAR1 ;此时VAR2与VAR2均指向2030H,但 TYPE VAR2=1 ;给出类型可为BYTE/WORD/DWORD/NEAR/FAR
-
SHORT——修饰JMP指令中转移地址的属性,JMP SHORT TAG
-
THIS——类似PTR,区别是不实际分配新的存储单元,定义空指针NULL
VAR3 EQU THIS BYTE
4.5 数据属性伪指令
-
数据定义:
- VAR DB/DW/DD
- STR DB 10 DUP(?)
- VAR EQU 2030H
- COUNT=20+1
- VAR1 LABEL BYTE;定义变量,但无初值
-
定义结构体
-
宏指令MACRO……ENDM
-
def:重复出现的一组语句可定义成“宏指令”
-
适合语句少的片段,多的要用子程序调用PROC
;定义宏指令 ADD1 MACRO X,Y,Z;形参 MOV CL,X S&Z Y,CL;此处&为分隔符,该宏指令Z若为AL,此处快捷写法等价于SAL ENDM ;调用宏指令 ADD1 4,AL,AL;AL算术左移4次 ADD1 6,BX,HR;BX逻辑右移6次
-
4.6 程序设计方法
-
基本结构:顺序、简单分支、多分支、DO-WHILE、DO-UNTILE
Unit 5 存储器
5.1 半导体存储器分类与常用芯片
-
RAM随机存储器
-
典型SRAM芯片
- 常用型号
数据线相同,均处理8位数据,只是地址线即存储容量不同
- 引脚作用
- ~CE = 0是使能端
- ~OE = 0是读,接~RD
- ~WE = 0是写,接~WR
-
-
只读存储器ROM
- 分类:
- PROM可编程
- EPROM紫外光可擦除
- EEPROM电可擦除
- Flash ROM闪速
- 分类:
-
存储器真实模式 —— 高字库(奇地址),低字库(偶地址)
5.2 存储器系统结构
-
位数扩展
-
def:CPU单元位数 > 存储器芯片的位数,例如8086的16位>6264的8位
-
解决方法——芯片并联法
-
~IO/M = 1对存储器操作,加反相器使得~CE满足,芯片工作
-
-
小结:
- 芯片的地址线全部并联且与地址总线连接
- 片选信号线并联
- 读写控制信号并联接控制总线中的读写控制线
- 数据线分高低部分分别与数据总线相应位连接
-
-
字数扩展(存储容量)
-
线选法 —— 剩下的高位不需要译码器直接连~CE n
-
-
存在问题及特点
- 地址不连续
- 相当数量地址不能使用
- 高位没连接的话,会造成地址重叠
- 优点:译码器简单
-
-
全地址译码法 —— 高位接译码器后再接~CE
-
-
译码结果:
A15A14用于芯片片选
-
特点:
- 每块芯片地址范围唯一
- 各个芯片地址连续,无浪费
- 需要专门译码电路
-
-
部分译码法——介于线选法与全译码法之间
-
-
奇偶分体电路——高奇低偶
-
A0=0对应偶地址,A1=0对应奇地址
-
5.3 例题——8088/8086存储器系统设计
-
存储器与8088CPU连接
-
-
STEP1——画表
-
STEP2——设计译码电路
仍存在地址重叠,修正如下:
CBA(A是低位)改接A19A17A15
同时增加A17A16异或,保证CBA=111时A19~A15全1
-
STEP3——连接
-
-
8086系统存储器——奇偶分体
-
A0=0偶地址选低位库,A0(#BHE)=1奇地址选高位库
-
同时高地址线用于片选
-
-
-
Unit 6 中断系统(小题)
6.1基本概念
-
三要素:中断源:(内部、外部)、断点、中断服务程序
-
中断处理过程: 中断申请 -> 中断响应 -> 中断服务程序 -> 中断返回
- IF决定CPU是否响应中断
- 响应条件:IF = 1 & 当前操作执行完成
- 中断服务程序通常包含保护现场的操作
- IRET —— 中断返回
-
中断向量表
-
中断优先级
Unit 7 基础IO口以及可编程芯片8255&8253
6.1 IN/OUT指令
6.2 并行IO接口可编程芯片8255
-
3个独立并行输入/输处端口
- PORT A —— 8位
- PORT B —— 8位
- PORT C —— 分为2个4位的端口
- PORT ctrol —— 控制寄存器
各个端口均具有数据的控制和锁存能力
-
与系统连接的引线
- D0~D7
- #CS
- #RD
- #WR
- A0,A1
- REAST
对于A1A0 = 00A端口,01B端口,10C端口,11控制寄存器
-
与外部设备连接的引线
- A口:PA0~PA7
- B口:PB0~PB7
- C口:PC0~PC7
-
工作方式
- 基本输入/输出(方式0)
- 选通工作方式(方式1)
- 双向传送方式(方式2)
方式0——三个独立8位简单接口
可设置位输入或输出口,但不能同时实现输入及输出
C口可拆分
用于无条件或查询方式
方式0习惯应用:
A/B用于数据输入或输出
C某些位用于状态输入,内部4位之间不能同时实现输入及输出
-
控制字
-
方式控制字
- def:确定3个端口的工作方式及数据传输方向
-
位控制字
- 仅用于C端口
- 可设置C口某位初始状态——设置初始电平用于输出时
-
-
82C55应用
- 系统连接→8255初始化→具体编程
-
电路连接图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKDV5aWf-1677120618204)

-
PB7=1表示启动监控
PA0~PA7表示监控状态
PC0设置输出报警:高电平——延迟——低电平
-
具体编程
;初始化程序
;CTRL EQU 1023H
;1020H--A,1021H--B,1022H--C,1023H--CTRL
MOV DX,1023H;控制字地址
MOV AL,10010000B;设置方式,A方式0输入,B方式0输出,C0输出
OUT DX,AL
MOV AL,0;设置PC0=0
OUT DX,AL
;启动监控
MOV DX,1021H;选B
MOV AL,80H;PB7输出高电平,启动
OUT DX,AL;输出到B口
;循环获取A端口状态
A:
MOV DX,1020H;选A口
IN AL,DX;读取A口状态
CMP AL,0;建议是否有1,即出现异常
JZ A;有异常1则退出循环
;启动警报
MOV CX,10
MOV DX,1022H
MOV AL,1
B:
OUT DX,AL
CALL DEALY
NOT AL
CALL DEALY
LOOP B
7.3 可编程计数器8253
8253可编程计数定时芯片
-
工作特点
- 减法计数,计数值为0输出相应的控制信号(信号由软件决定)
-
主要引脚
- 与CPU——D0~D7、#CS、#RD、#WR、A1A0
- 与外设——CLK时钟输入,GATE门控输入,OUT
-
内部结构
- 内部有三个完全相同的计数器A/B/C
- 每个计数器内部都有16位初值寄存器,16位计数寄存器
- 还有一个控制端口(11)
- 内部有三个完全相同的计数器A/B/C
-
计数启动方式:
- 软件启动——GATE=1
- 硬件启动——上升沿
-
共6种工作方式
-
方式0——软件启动,不重复计数
-
开始时输出低电平,结束高电平
-
先给端口地址,接着再给计数初值
-
-
方式1——硬件启动,不重复计数
- 波形与方式0相同
- 若OUT端结束输出后,不需重新初始化,只需要GATE给上升沿即可
-
方式2——软硬件启动,自动重复计数,
- 计数到最后一个脉冲输出一个CLK的低电平
计数器初始状态不定,故第一个周期一般多了一个脉冲
N=2或3可用作二分频器
-
方式3——软硬件启动,自动重复计数
-
N为偶数输出对称方波,故又称方波发生器
等价于分频器,N为计数时正脉冲多一个即(N+1)/2
-
-
方式4——软件启动,不自动重复计数
- 计数结束后输出一个CLK宽度低电平
-
方式5——硬件启动,不自动重复计数
- 波形与方式4相同
-
- 工作小结
- 都需要2个写脉冲,分别写控制字,再写计数初值
- 不同工作方式有不同计数启动方法
- 根据要求选择输出波形
-
控制字详解
最大16位BCD计数值9999,最大16位二进制最大计数值FFFF
两种最大值对应存在内部16位寄存器的形式都是10000
-
8253应用
-
硬件连接
-
初始化——控制字,初值
- 多个计数器都使用时:
- 初始化方法1:CNT0初始化控制字、初值,再CNT1,CNT2
- 初始化方法2:初始化控制字,CNT0初值/CNT1初值/CNT2初值
- 多个计数器都使用时:
-
-
8253简单应用举例:
分析:
CNT0要求重复输出一个CLK的负脉冲,对应方式2
CNT1要求输出方波,对应方式3
CNT2要求定时后输出高电平,对应方式0或1
-
step1——确定初值与工作方式
''' T = 1/f = 0.5us CNT0: 10ms/0.5us = 20000 CNT1: 2MHz/10Khz = 200 CNT2: 5ms/0.5us = 10000 '''
-
step2——确定控制字
''' CNT0:方式2,初值>255故16位计数————00110100 CNT1:方式3,初值<255故8位计数————01010110 CNT2:方式0,初值>255故16位计数————10110000 '''
-
step3——硬件连接(由于无要求故选择软启动)
-
step4——编写初始化程序
;先写初值写入,再写计数初值 CNT0: MOV DX,0123H;控制字端口 MOV AL,34H OUT DX,AL;送控制字 MOV DX,0120H;CNT0端口 MOV AX,20000 OUT DX,AL;先送低八位,再送高八位 MOV AL,AH;此处需注意,OUT只能使用AL OUT DX,AL CNT1:..... CNT2:....
-
对于方式2和3.当GATE=0时停止计数,上升沿时清零重新计数
-
初始化方法2:初始化控制字,CNT0初值/CNT1初值/CNT2初值
-
8253简单应用举例:
分析:
CNT0要求重复输出一个CLK的负脉冲,对应方式2
CNT1要求输出方波,对应方式3
CNT2要求定时后输出高电平,对应方式0或1
-
step1——确定初值与工作方式
''' T = 1/f = 0.5us CNT0: 10ms/0.5us = 20000 CNT1: 2MHz/10Khz = 200 CNT2: 5ms/0.5us = 10000 '''
-
step2——确定控制字
''' CNT0:方式2,初值>255故16位计数————00110100 CNT1:方式3,初值<255故8位计数————01010110 CNT2:方式0,初值>255故16位计数————10110000 '''
-
step3——硬件连接(由于无要求故选择软启动)
-
step4——编写初始化程序
;先写初值写入,再写计数初值 CNT0: MOV DX,0123H;控制字端口 MOV AL,34H OUT DX,AL;送控制字 MOV DX,0120H;CNT0端口 MOV AX,20000 OUT DX,AL;先送低八位,再送高八位 MOV AL,AH;此处需注意,OUT只能使用AL OUT DX,AL CNT1:..... CNT2:....
-
对于方式2和3.当GATE=0时停止计数,上升沿时清零重新计数