微机原理知识点汇总-程序员宅基地

技术标签: 汇编  

微机原理知识点汇总

Unit 1 微机基础

  1. 三总线:AB(address bus)地址总线、DB数据总线、CB控制总线
    在这里插入图片描述

  2. 非压缩BCD——高位全0

  3. ASCII码——先列后行

  4. 变补——即求[ – Y],所有位(包括符号位)按位取反,再加1

  5. 溢出——双高位判别法:

    • Cs : 最高位,即符号位
    • Cp : 数字最高位,即次高位
    • 在这里插入图片描述

Unit 2 8086微处理器CPU

  1. 寄存器

    • 通用寄存器

      • 数据寄存器: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执行一条指令则中断,调试程序时用

  2. 引脚

    • 引脚功能: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
  3. 存储器

    • 分段管理:将内存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 寻址
  1. 寻址方式def:即逻辑地址EA生成PA物理地址的关系,操作数可位于寄存器、存储器或I/O端口中。

  2. 源操作数(src)和目的操作数(dst)应分别说明寻址方式

  3. 寻址方式

    在这里插入图片描述

  4. 寻址方式小结:

    • 立即数可以出现在方括号内,表示直接地址,如[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位)

  5. 在这里插入图片描述

    (3)寄存器寻址,相对基址变址寻址

    (5)隐含寻址,固定寻址

CS不可作为目的操作数

两个段寄存器间不能直接传输数据

  1. PUSHF

  2. 寄存器间接寻址不能用AX——[AX] 是×

    • MOV AX,2000H——取2000H存的数据给AX
    • MOV AX,[2000H]——取2000H给AX
  3. 注意操作数位数对应MOV AX, WORD PTR[SI]

  4. IO端口只能用DX


3.2 数据传输指令
  1. 在这里插入图片描述

  2. 注意事项:

    • R寄存器,SR段寄存器,M存储器,Im立即数

    • 操作数的类型匹配(8/16位), 取决于R或者立即数 的位数

    • 不允许在段R之间直接传送信息

    • CS和IP不能用作目的操作数,内容不能随便修改

  3. 通用传送指令——MOV

  4. PUSH&POP

    • 通用寄存器:PUSH AX

    • 段寄存器:PUSH CS

    • 存储器:PUSH [SI]

    • 标志位:PUSHF/POPF

    • 考点——堆栈实现轮转

      在这里插入图片描述

  5. 累加器AX专用传送指令

    • IN/OUT
      • 对于IN指令,目的操作数只能为AL或AX,源操作数为PORT(直接)或DX(间接)
      • OUT指令,目的操作数只能为PORT或DX,源操作数只能为AL或AX
    • 换码指令XLAT
      • BX为表首址,AL为要转换的数
      • 在这里插入图片描述
  6. 地址目标传送——load EA/DS/ES

    • LEA BX,[SI]——把SI的逻辑地址给BX
    • LDS ——传送32位地址,低位给通用R,高位给DS
    • LES ——传送32位地址,高位送ES,dst不能为段寄存器,src为M数
  7. 标志传送

    • 读:LAHF——读F低8位(SF,ZF,AF,PF,CF)传给AH
    • 写:SAHF——AH内容写入F低8位

3.3 算术运算指令
  1. 加法:

    • 不带进位:ADD
    • 带进位:CLC+ADC —— ADC dst,src => dst=src+dst+CF
    • 自加1:INC src——不影响CF,其余的标志位影响
    • DAA:自动调整压缩BCD码,14H变为14D,紧跟在AL赋值之后
    • AAA:非压缩BCD码调整
  2. 减法:

    • 不带错位:SUB——dst = dst -src

    • 带错位:SBB

    • 自减1:DEC

    • 求变补:NEG——求相反数,用于求Im-M类型NEG AL&ADD AL,IM

    • 比较指令:CMP,与SUB区别是只返回标志位

      在这里插入图片描述

  3. 乘法:——隐含目的操作数为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
  4. 除法类:隐含目的操作数为AX

    • 在这里插入图片描述

    • 无符号数:DIV src

      在这里插入图片描述

    • 有符号:IDIV src

    • 结果超出AL/AX容量,产生0中断

    • 除法运算后,AF、ZF、OF、SF、PF和CF都不确定(无意义)

  5. 带符号数扩展

    • AL/8变AX/16:CBW(change byte word)
    • AX扩展到DX+AX中:CWD(change word double)
3.4 逻辑运算
  1. 对寄存器影响

    在这里插入图片描述

    u表示无意义,x表示影响

    进位清零,溢出清零

  2. AND dst,src —— dst ← dst∧src

    • AND AX,AX——仅影响标志位
      • =CLC
      • 通过ZF判断AX是否为0
  3. OR dst,src

    • 同AND AX,AX
  4. XOR dst,src

    • 0异或A ——保持
    • 1异或A ——取反
    • XOR AX,AX —— AX,CF清零
  5. NOT src —— src = ~src

    • 不影响标志位
    • 需说明属性——WORD PTR / BYTE PTR
  6. TEST dst,src ——只影响标志位,用于测试指定位是0还是1

    • TEST AL,80H —— 检验符号位,ZF = 1表示符号位为0
  7. 移位类

    • SAL src,count 算术左移

    • SAR src,count算术右移

    • SHL src,count逻辑左移

    • SHR src,count逻辑右移

      count = n 时,先MOV CL,n再移位,n<255

      算术移位用于带符号数,逻辑移位用于无符号数

    • 左移即 x 2两种无区别,低位补零

    • SAR符号位不变,SHR符号位补零,低位均是移到CF

  8. 循环移位(不补零类似循环队列)

    • 在这里插入图片描述
3.5 串操作
  1. 唯一一类src与dst均在存储单元的指令

  2. 隐含:DS:SI指向源串首地址,ES:DI指向目的串首地址,若同段操作则——MOV ES,DS。移动后自动加减

  3. CLD让DF=0则由低到高递增进行 ↓,STD让DF=1 ↑则由高到低串尾到串首

  4. 重复次数与CX有关

  5. 处理长度为64K,即CX=0FFFFH

  6. 三种重复前缀

    在这里插入图片描述

    REPE/REPZ与CMPS连用,判断字符串是否一致

    REPNE/REPNZ与SCAS连用,判断字符串是否有AX/AL中的值

  7. 移动串MOVSB与MOVSW

    • MOVSB传输后自动SI/DI±1,MOVSW ±2
    • SI<DI,即SI在上面,必须从高到低处理,先把尾部处理,先STD
  8. 取信息LODSB/LODSW——DS: SI取到AL/AX

  9. 存信息STOSB/STOSW——AL/AX信息存到ES: DI

  10. 比较串CMPSB/CMPSW——SI-DI只影响标志位

  11. 扫描串SCASB/SCASW ——AL/AX - ES:DI

  12. 范例

    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 转移指令
  1. 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段
  2. CALL调用——产生断点去执行

    • CALL NEAR PTR B1

    • CALL FAR PTR B2

    • 步骤

      • 断点保护:段内调用IP入栈,段间调用CS入IP再入

      • CALL

      • RET 2/RET 4

  3. 条件转移

    • 直接标志转移——标志位满足条件就转移

      在这里插入图片描述

    • 间接标志转移——标志位运算满足条件则转移

      在这里插入图片描述

    • 转移超限——针对条件转移

      • 条件转移指令转移的范围只有-128~+127
      • 接力法——条件转移+JMP
         JZ ADDR1
      	;
      ADDR1: JMP B1
      	;
      B1: ;
      
      • **反指令法——**反指令跳转原本不满足运行的下一条,再跟着JMP TARGET
      	JG AGAIN;超范围
      NEXT:;
      
      	JLE NEXT
      	JMP AGAIN
      
  4. 循环指令

    • LOOP B1——次数取决于CX值

    • LOOPE/LOOPZ B1—— ZF=1&CX!=0跳转B1执行,ZF=0退出

      • 在这里插入图片描述
    • LOOPNE/LOOPNZ B1——ZF=1退出

      • 在这里插入图片描述
3.7 控制指令
  1. 标志位控制指令

    • 在这里插入图片描述

    蓝色部分,需要背住

    • 暂停指令——HLT

    • 空操作——NOP

      NOP空耗3个时钟周期

  2. 中断指令

    • 保护断点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功能调用——汇编自带库函数
  1. 调用方法——MOV AH xx + INT 21H

  2. 重要考点

    • 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 编译流程
  1. 考点——选择题
4.2 几个概念
  1. 指令性语句—— AA: ……
  2. 伪指令——ORG/PROC
  3. 宏指令——MACRO
  4. 操作数——常数,变量,标号(AA),保留字(系统预定义)
4.3 汇编段落属性伪指令
  1. 分段——SEGMENT……ENDS

    DATA SEGMENT PUBLIC 'DATA';注意此处类别名为单引号
    ;PUBLIC 指组合类型,表明本段与其他段关系
    STR DB "Hello world",0DH,0AH,'$'
    DATA ENDS
    

    说明:字符串一般使用“……”

    若使用‘……’,则无法显示‘’THIS is ‘a’.”这种含单引号的语句

  2. 段指示——ASSUME

    ASSUME CS:CODE,DS:DATA,SS:STACK
    
    
  3. 定位伪指令ORG和 当前位置计数器$

    • ORG 2000H——设置段起始位置2000H

    • $ ——始终指向下一 个存储单元的偏移地址

    • 常用格式——获取数组长度

      STR1 DB .....
      COUNT EQU $-STR1
      
      
  4. 程序结束指令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
    
    
  5. 程序块定义——PROC….ENDP

    • def:类似高级语言中的定义方法或函数
    • 中间必须出现RET/RET n
    ;定义子程序块功能,通常配合CALL调用
    ADD1 PROC FAR
    	MOV DX,1
    	ADD AX,DX
    	RET
    ADD1 ENDP
    .....
    CALL FAR ADD1;此处要与定义时的属性FAR对应
    
  6. 程序块通信——PUBLIC/EXTRN

    EXTRN ADD2:FAR,ADD3:FAR;声明本模块中要引用外部ADD2,ADD3模块
    ADD1 PROC FAR
    	PUBLIC  ADD1;声明可以被其他模块访问
    	
    	....
    ADD1 ENDP
    
    
4.4 汇编表达式与运算符
  1. 算术——+,-,*,/,MOD,SHL( *=2),SHR( /=2)

  2. 逻辑——AND/OR/XOR/NOT

  3. 关系——EQ,NE/LT(less than)、GT(large than)/LE(less and equal)、GE

    • 操作数性质需相同,返回0000H或0FFFFH
  4. SEG ——求段基址,SEG STR = DS

  5. OFFSET——求偏移量

    ;运算符完成是在汇编之前,即在MASM.exe转为.obj文件前
    MOV BX,OFFSET STR1 <=> MOV BX,2;汇编结果
    ;相当于
    LEA BX,VAR2
    
    
  6. TYPE——求类型

    • TYPE STR(DB)= 1
    • TYPE STR(DW)=2
  7. LENGTH——求变量数

    N1 DW 10 DUP(0)
    MOV AL,LENGTH N1;AL=10
    
    
  8. SIZE—— SIZE = LENGTH * TYPE

  9. PTR——生成一个新的存储器地址操作数,指向给出的地址

    VAR1 DW 2030H
    VAR2 EQU PTR VAR1
    ;此时VAR2与VAR2均指向2030H,但 TYPE VAR2=1
    ;给出类型可为BYTE/WORD/DWORD/NEAR/FAR
    
  10. SHORT——修饰JMP指令中转移地址的属性,JMP SHORT TAG

  11. THIS——类似PTR,区别是不实际分配新的存储单元,定义空指针NULL

    VAR3 EQU THIS BYTE
    
    
4.5 数据属性伪指令
  1. 数据定义:

    • VAR DB/DW/DD
    • STR DB 10 DUP(?)
    • VAR EQU 2030H
    • COUNT=20+1
    • VAR1 LABEL BYTE;定义变量,但无初值
  2. 定义结构体

    • 在这里插入图片描述
  3. 宏指令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 程序设计方法
  1. 基本结构:顺序、简单分支、多分支、DO-WHILE、DO-UNTILE

    在这里插入图片描述


Unit 5 存储器

5.1 半导体存储器分类与常用芯片
  1. RAM随机存储器

    • 典型SRAM芯片

      • 常用型号

      在这里插入图片描述

      数据线相同,均处理8位数据,只是地址线即存储容量不同

      • 引脚作用
        • ~CE = 0是使能端
        • ~OE = 0是读,接~RD
        • ~WE = 0是写,接~WR
  2. 只读存储器ROM

    • 分类:
      • PROM可编程
      • EPROM紫外光可擦除
      • EEPROM电可擦除
      • Flash ROM闪速
  3. 存储器真实模式 —— 高字库(奇地址),低字库(偶地址)

5.2 存储器系统结构
  1. 位数扩展

    • def:CPU单元位数 > 存储器芯片的位数,例如8086的16位>6264的8位

    • 解决方法——芯片并联法

      • 在这里插入图片描述

        ~IO/M = 1对存储器操作,加反相器使得~CE满足,芯片工作

        在这里插入图片描述

    • 小结:

      • 芯片的地址线全部并联且与地址总线连接
      • 片选信号线并联
      • 读写控制信号并联接控制总线中的读写控制线
      • 数据线分高低部分分别与数据总线相应位连接
  2. 字数扩展(存储容量)

    • 线选法 —— 剩下的高位不需要译码器直接连~CE n

      • 在这里插入图片描述

      • 存在问题及特点

        • 地址不连续
        • 相当数量地址不能使用
        • 高位没连接的话,会造成地址重叠
        • 优点:译码器简单
    • 全地址译码法 —— 高位接译码器后再接~CE

      • 在这里插入图片描述

      • 译码结果:

        在这里插入图片描述

        A15A14用于芯片片选

      • 特点:

        • 每块芯片地址范围唯一
        • 各个芯片地址连续,无浪费
        • 需要专门译码电路
    • 部分译码法——介于线选法与全译码法之间

  3. 奇偶分体电路——高奇低偶

    • 在这里插入图片描述

      A0=0对应偶地址,A1=0对应奇地址

5.3 例题——8088/8086存储器系统设计
  1. 存储器与8088CPU连接

    • 在这里插入图片描述

    • STEP1——画表

      在这里插入图片描述

    • STEP2——设计译码电路

      在这里插入图片描述

      仍存在地址重叠,修正如下:

      CBA(A是低位)改接A19A17A15

      同时增加A17A16异或,保证CBA=111时A19~A15全1

    • STEP3——连接

      在这里插入图片描述

  2. 8086系统存储器——奇偶分体

    • A0=0偶地址选低位库,A0(#BHE)=1奇地址选高位库

    • 同时高地址线用于片选

    • 在这里插入图片描述

    • 在这里插入图片描述


Unit 6 中断系统(小题)

6.1基本概念
  1. 三要素:中断源:(内部、外部)、断点、中断服务程序

  2. 中断处理过程: 中断申请 -> 中断响应 -> 中断服务程序 -> 中断返回

    • IF决定CPU是否响应中断
    • 响应条件:IF = 1 & 当前操作执行完成
    • 中断服务程序通常包含保护现场的操作
    • IRET —— 中断返回
  3. 中断向量表

  4. 中断优先级


Unit 7 基础IO口以及可编程芯片8255&8253

6.1 IN/OUT指令
6.2 并行IO接口可编程芯片8255
  1. 3个独立并行输入/输处端口

    • PORT A —— 8位
    • PORT B —— 8位
    • PORT C —— 分为2个4位的端口
    • PORT ctrol —— 控制寄存器

    各个端口均具有数据的控制和锁存能力

  2. 与系统连接的引线

    • D0~D7
    • #CS
    • #RD
    • #WR
    • A0,A1
    • REAST

    对于A1A0 = 00A端口,01B端口,10C端口,11控制寄存器

  3. 与外部设备连接的引线

    • A口:PA0~PA7
    • B口:PB0~PB7
    • C口:PC0~PC7
  4. 工作方式

    • 基本输入/输出(方式0)
    • 选通工作方式(方式1)
    • 双向传送方式(方式2)

    方式0——三个独立8位简单接口

    可设置位输入或输出口,但不能同时实现输入及输出

    C口可拆分

    用于无条件或查询方式

    方式0习惯应用:

    A/B用于数据输入或输出

    C某些位用于状态输入,内部4位之间不能同时实现输入及输出

  5. 控制字

    • 方式控制字

      • def:确定3个端口的工作方式及数据传输方向
      • 在这里插入图片描述
    • 位控制字

      • 仅用于C端口
      • 可设置C口某位初始状态——设置初始电平用于输出时
      • 在这里插入图片描述
  6. 82C55应用

    • 系统连接→8255初始化→具体编程

在这里插入图片描述

  • 电路连接图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKDV5aWf-1677120618204)

![在这里插入图片描述](https://img-blog.csdnimg.cn/7266d0fbb1e441729b0b4dc5d1a70d2a.png#pic_center)
  • 在这里插入图片描述

    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可编程计数定时芯片
  1. 工作特点

    • 减法计数计数值为0输出相应的控制信号(信号由软件决定)
  2. 主要引脚

    • 与CPU——D0~D7、#CS、#RD、#WR、A1A0
    • 与外设——CLK时钟输入,GATE门控输入,OUT
  3. 内部结构

    • 内部有三个完全相同的计数器A/B/C
      • 每个计数器内部都有16位初值寄存器,16位计数寄存器
    • 还有一个控制端口(11)
  4. 计数启动方式:

    • 软件启动——GATE=1
    • 硬件启动——上升沿
  5. 共6种工作方式

    • 方式0——软件启动,不重复计数

      • 开始时输出低电平,结束高电平

      • 先给端口地址,接着再给计数初值

        在这里插入图片描述

    • 方式1——硬件启动,不重复计数

      • 波形与方式0相同
      • 若OUT端结束输出后,不需重新初始化,只需要GATE给上升沿即可
    • 方式2——软硬件启动,自动重复计数,

      • 计数到最后一个脉冲输出一个CLK的低电平

    在这里插入图片描述

    计数器初始状态不定,故第一个周期一般多了一个脉冲

    N=2或3可用作二分频器

    • 方式3——软硬件启动,自动重复计数

      • N为偶数输出对称方波,故又称方波发生器

        在这里插入图片描述

      等价于分频器,N为计数时正脉冲多一个即(N+1)/2

    • 方式4——软件启动,不自动重复计数

      • 计数结束后输出一个CLK宽度低电平
    • 方式5——硬件启动,不自动重复计数

      • 波形与方式4相同
  • 工作小结
    1. 都需要2个写脉冲,分别写控制字,再写计数初值
    2. 不同工作方式有不同计数启动方法
    3. 根据要求选择输出波形
  1. 控制字详解

    在这里插入图片描述

    最大16位BCD计数值9999,最大16位二进制最大计数值FFFF

    两种最大值对应存在内部16位寄存器的形式都是10000

  2. 8253应用

    • 硬件连接

      在这里插入图片描述

    • 初始化——控制字,初值

      • 多个计数器都使用时:
        • 初始化方法1:CNT0初始化控制字、初值,再CNT1,CNT2
        • 初始化方法2:初始化控制字,CNT0初值/CNT1初值/CNT2初值
  3. 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初值

  1. 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时停止计数,上升沿时清零重新计数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_62798397/article/details/129177125

智能推荐

Linux环境下jenkins插件Gerrit Trigger配置--"/var/lib/jenkins/.ssh/id_rsa" does not exist._keys/rsa_2048_pub.key' does not exist-程序员宅基地

文章浏览阅读6.7k次,点赞2次,收藏3次。Gerrit可以实现在线代码Review的功能,与GitLab的merge request功能相当。目前想在Gerrit的基础上增加静态代码扫描的功能,以进一步提升代码质量。网上搜到的技术方案是:Gerrit + Jenkins + Gerrit Trigger。一句话概括就是:在Jenkins上创建一个代码检查的工程,通过pom文件方式配置号第三方的静态代码扫描工具;Jenkins通过Gerri..._keys/rsa_2048_pub.key' does not exist

.NetCore WebApi Post请求参数的传递和获取_webapi 获取post请求body中的数据-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏13次。post请求有两种传递参数的方法,一种是通过在url后面使用问号(?)将参数拼接的方式传递。另一种是通过data传递参数。get请求只能通过url传递参数,post请求既可以通过url传递参数,也可以通过data(body体)传递参数。可以参考文章:https://www.zhihu.com/question/64312188以下所有实例都是传递三个参数:title、content、typeid。示例通过两种方式请求后端接口,分别用ajax请求和接口测试工具apipost请求。第一种_webapi 获取post请求body中的数据

小白黑苹果安装N卡的方法和安装驱动后开机黑屏的解决方法_装驱动后黑屏怎么删除驱动-程序员宅基地

文章浏览阅读2.9w次,点赞5次,收藏15次。原贴地址:http://bbs.pcbeta.com/viewthread-1763144-1-1.html1、安装驱动前。先对clover的config.plist进行设置。CsrActiveConfig由0x3改成0x0。如下图所示。[img]blob:http://bbs.pcbeta.com/43219d6d-00b1-4256-8c09-1991dc03794c[/img]2、Sy..._装驱动后黑屏怎么删除驱动

python中函数调用_python 数学函数 调用-程序员宅基地

文章浏览阅读7.3k次,点赞2次,收藏10次。和C++一样,Python中函数的定义必须在调用的前面,但是在函数的内部调用一个函数,不用考虑函数的顺序,只要被调用的函数被定义了即可1.先定义后,后调用为一般方法:def add_test(a,b): return a+breslut = add_test(1,2)print(result)2.可以在函数内部调用后面的函数def add_1(a,b): return add_2(a,b) #函数内部调用add_2def add_2(..._python 数学函数 调用

在线 YAML 转 Properties 网站_yaml转properties在线-程序员宅基地

文章浏览阅读861次。在线 YAML 转 Properties 网站_yaml转properties在线

Eclipse中配置WebMagic(已配置好Maven)_使用eclipse搭建webmagic工程-程序员宅基地

文章浏览阅读364次。1.WebMagicWebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。2.在Eclipse中配置WebMagic1.首先需要下载WebMagic的压缩包官网地址为:WebMagic官网最新版本为:WebMagic-0.7.3,找到对应版本,打开下载界面,注意,下载要选择Source code(zip)版本,随便下载到哪里都可以;2.下载好的压缩包需要解压,此时解压到的位置即为后续新建的Eclipse的project位置,比如我的Ecli_使用eclipse搭建webmagic工程

随便推点

MySQL如何更改数据库名字_mysql update数据库名称-程序员宅基地

文章浏览阅读3.9k次。MySQL如何更改数据库名字_mysql update数据库名称

windows上最好用的文件管理软件 Directory Opus_directory ops-程序员宅基地

文章浏览阅读9w次,点赞24次,收藏65次。windows上最好用的文件管理软件 Directory Opuswindows 自带的文件管理软件就不用提了,垃圾的一比。而市面上比较流行的文件管理软件 xyploer,total commander 之类我都使用过,其中 total commander 的确是神器,但是界面太难看,还有学习路径比较陡峭,最后还是放弃了。后来我使用了 windows 上的资源管理器增强软件 clover 感觉..._directory ops

AWT图形界面设计编程——1.AWT容器_awt容器定义-程序员宅基地

文章浏览阅读212次。1.1AWT容器1.1.1Window和FrameWindow独立存在不依赖于任何其他容器。Window有两个子类:Frame和Dialog。一、窗体Frame:带有标题,而且可以调整大小。1.Frame的构造方法: 1). Frame() 构造的新实例 Frame初始时不可见。 2). Frame(GraphicsConfiguration gc) 构造一个新的,最初看不见的 F..._awt容器定义

一文看懂mybatis底层运行原理解析-程序员宅基地

文章浏览阅读656次,点赞24次,收藏12次。包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

Spring Cloud Alibaba 介绍_sprngcloud alba-程序员宅基地

文章浏览阅读175次。Spring Cloud Alibaba 介绍Sping体系Spring 以 Bean(对象) 为中心,提供 IOC、AOP 等功能。Spring Boot 以 Application(应用) 为中心,提供自动配置、监控等功能。Spring Cloud 以 Service(服务) 为中心,提供服务的注册与发现、服务的调用与负载均衡等功能。Sping Cloud介绍官方介绍​ Tools for building common patterns in distributed systems_sprngcloud alba

测试 数据类型的一些测试点和经验_基础字段的测试点-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏21次。我这里是根据之前在测试数据类项目过程中的一些总结经验和掉过个坑,记录一下,可以给其他人做个参考,没什么高深的东西,但是如果不注意这些细节点,后期也许会陷入无尽的扯皮当中。1 需求实现的准确度根据产品需求文档描述发现不明确不详细的或者存在歧义的地方一定要确认,例如数据表中的一些字段,与开发和产品确认一遍,如有第三方相关的,要和第三方确认,数据类项目需要的是细心,哪怕数据库中的一个字段如果没有提前对清楚,后期再重新补充,会投入更大的精力。2 数据的合理性根据业务场景/常识推理,提..._基础字段的测试点

推荐文章

热门文章

相关标签