8086 Proteus 8253制作跑表

1.构建系统

2.驱动代码

cpp 复制代码
.MODEL	SMALL
.8086
.stack
.code
.startup
NMI_init: push es        ;NMI中断向量初始化
      xor ax, ax
      mov es, ax
      mov al, 02h
      xor ah, ah
      shl ax, 1
      shl ax, 1
      mov si, ax
      mov ax, offset NMI_service
      mov es:[si], ax
      inc si
      inc si
      mov bx, cs
      mov es:[si], bx
      pop es 
 mov al,10110101b       ;T2 16位 mode2 bcd
mov dx,0406h
 out dx,al
 mov dx,0404h
 mov ax,1000h ;clk=100KHz 1000分频 out=100Hz=0.01秒  
 out dx,al 
 mov al,ah                 ;高字节
 out dx,al
 lop: call key 
      call disp
      jmp lop 
      
 disp proc                 ;显示子程序
      mov bl,m_sec
      and bx,000fh         ;毫秒个位
      mov si,bx      
      mov al,situation[si] ;毫秒个位段码 
      mov bl,m_sec
      and bx,00f0h         ;毫秒十位
      mov cl,4         
      shr bx,cl            
      mov si,bx      
      mov ah,situation[si] ;毫秒十位段码         
      mov dx,0000h         ;毫秒输出地址 
      out dx,ax 
    
      mov bl,sec
      and bx,000fh
      mov si,bx      
      mov al,situation[si] 
      mov bl,sec
      and bx,00f0h
      mov cl,4         
      shr bx,cl
      mov si,bx      
      mov ah,situation[si]          
      mov dx,0200h         ;秒输出地址 
      out dx,ax 
      ret     
disp  endp 

key     proc near
        mov dx,0600h
        in  al,dx
        test al,01h   
        jnz  exitkey     
        call delay          ;消抖      
        mov dx,0600h
        in  al,dx
        test al,01h
        jnz  exitkey
        inc  state
 waitkey:in  al,dx    
        test al,01h   
        jz   waitkey       ;等待按键释放 
        cmp  state,03h
        jb   exitkey
        mov  state,0        
exitkey:ret
key     endp

;fosc=5MHz,T=0.2us,Td ≈20ms
delay    proc  near         ;延时子程序
         push bx
         push cx
         mov bx,1           ;4
del1:    mov cx,5882        ;4
del2:    loop del2          ;17/5
         dec bx             ;2
         jnz del1           ;16/4
         pop cx
         pop bx
         ret
delay    endp 
       
NMI_service:
      push ax 
      cmp state,0h         ;state=0,时钟清0
      je  clear
      cmp state,01h        ;state=1,时钟走时      
      je  start
      cmp state,02h        ;state=2,时钟停止 
      je  stop
      jmp  exit
clear:mov m_sec,0
      mov sec,0
      jmp exit      
start:mov al,m_sec    
      add al,1             ;毫秒+1
      daa     
      mov m_sec,al  
      cmp m_sec,00h
      jne exit      
      mov m_sec,0  
      mov al,sec
      add al,1             ;秒+1
      daa     
      mov sec,al  
      cmp sec,60h
      jb  exit      
      mov sec,0
      jmp exit
stop: 
exit: pop ax
      iret 
.data 
state         db 0;0_clear,1_start,2_stop
m_sec         db 00h 
sec           db 00h
situation   db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴    
sit_end=$ 	
END

3.运行测试

相关推荐
无敌贵点大王39 分钟前
从寄存器层面重学STM32(7)——定时器
stm32·单片机·嵌入式硬件
碧海银沙音频科技研究院1 小时前
粉色笔记本电脑每次要等把电池电耗尽才能开机问题解决方法
嵌入式硬件
wuyk55515 小时前
Keil工具链-第05讲-启动文件与__main到底做了什么
c语言·stm32·单片机·嵌入式硬件·物联网
shijuejianceliu21 小时前
传统规则视觉与嵌入式AI智能相机的技术差异
人工智能·嵌入式硬件·视觉检测·相机
不脱发的程序猿1 天前
GD32串口数据收进内存之后DMA如何处理?
单片机·嵌入式硬件·dma·嵌入式·串口通信·gd32
FPGA小迷弟1 天前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga
国科安芯2 天前
83 倍:ASC0108S 在推挽和开漏之间,差的不是速度,是回程
单片机·嵌入式硬件·架构·电平转换·抗辐射
国科安芯2 天前
从遥控到自治:ASP4644S2B支撑星载电源健康管理与容错配电
网络·单片机·嵌入式硬件·安全·dcdc·低轨卫星·商业航天
rhythm-ring2 天前
《汽车热管理系统:电子水泵单线PWM双向诊断机制》
单片机·嵌入式硬件·汽车
Dev_XH2 天前
【成品设计】基于物联网的车间安全生产监控系统设计
stm32·单片机·嵌入式硬件·物联网