8086可調時鐘仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
捕獲.PNG (167.71 KB, 下載次數: 86)
下載附件
8086可調時鐘
2020-4-26 12:52 上傳
單片機源程序如下:
- .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,00110111b ;T0 16位 mode3 bcd
- mov dx,0406h ;控制口地址
- out dx,al
- mov dx,0400h ;T0地址
- mov ax,0100h ;100KHz 100分頻 1KHz
- out dx,al
- mov al,ah ;高字節
- out dx,al
- mov al,10110101b ;T2 16位 mode2 bcd
- mov dx,0406h
- out dx,al
- mov dx,0404h
- mov ax,1000h ;1KHz 1000分頻 1Hz
- out dx,al
- mov al,ah ;高字節
- out dx,al
- loop0: ;主任務
- call key
- call disp
- jmp loop0
-
- NMI_service: ;中斷服務程序
- push ax
- mov al,sec
- add al,1
- daa
- mov sec,al
- cmp sec,60h
- jb exit
- mov sec,0
- mov al,min
- add al,1
- daa
- mov min,al
- cmp min,60h
- jb exit
- mov min,0
- mov al,hou
- add al,1
- daa
- mov hou,al
- cmp hou,12h
- jb exit
- mov hou,0
- exit: pop ax
- iret
- disp proc near
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov bl,sec
- and bx,000fh
- mov si,bx
- mov al,situation[si] ;段碼
- mov dx,0200h
- out dx,al
- mov al,0feh ;秒個位
- mov dx,0201h
- out dx,al
- call delay
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov bl,sec
- and bx,00f0h
- mov cl,4
- shr bx,cl
- mov si,bx
- mov al,situation[si] ;段碼
- mov dx,0200h
- out dx,al
- mov al,0fdh ;秒十位
- mov dx,0201h
- out dx,al
- call delay
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov al,40h ;段碼
- mov dx,0200h
- out dx,al
- mov al,0fbh ;秒個位
- mov dx,0201h
- out dx,al
- call delay
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov bl,min
- and bx,000fh
- mov si,bx
- mov al,situation[si] ;段碼
- mov dx,0200h
- out dx,al
- mov al,0f7h ;分個位
- mov dx,0201h
- out dx,al
- call delay
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov bl,min
- and bx,00f0h
- mov cl,4
- shr bx,cl
- mov si,bx
- mov al,situation[si] ;段碼
- mov dx,0200h
- out dx,al
- mov al,0efh ;分十位
- mov dx,0201h
- out dx,al
- call delay
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov al,40h ;段碼
- mov dx,0200h
- out dx,al
- mov al,0dfh ;秒個位
- mov dx,0201h
- out dx,al
- call delay
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov bl,hou
- and bx,000fh
- mov si,bx
- mov al,situation[si] ;段碼
- mov dx,0200h
- out dx,al
- mov al,0bfh ;時個位
- mov dx,0201h
- out dx,al
- call delay
- mov al,0ffh ;不顯示
- mov dx,0201h
- out dx,al
- mov bl,hou
- and bx,00f0h
- mov cl,4
- shr bx,cl
- mov si,bx
- mov al,situation[si] ;段碼
- mov dx,0200h
- out dx,al
- mov al,07fh ;時十位
- mov dx,0201h
- out dx,al
- call delay
- ret
- disp endp
- key proc near
- mov dx,0600h
- in al,dx
- test al,01h
- jnz nexthou
- call disp ;消抖
- call disp
- call disp
- mov dx,0600h
- in al,dx
- test al,01h
- jnz nexthou
- mov al,min
- add al,1 ;分調整
- daa
- mov min,al
- cmp min,60H
- jb nexthou
- mov min,0
- nexthou: mov dx,0600h
- in al,dx
- test al,02h
- jnz exitkey
- call disp ;消抖
- call disp
- call disp
- mov dx,0600h
- in al,dx
- test al,02h
- jnz exitkey
- mov al,hou
- add al,1
- daa ;時調整
- mov hou,al
- cmp hou,12H
- jb nexthou
- mov hou,0
- exitkey:ret
- key endp
-
- delay proc near
- push bx
- push cx
- mov bx,1
- lp1: mov cx,469
- lp2: loop lp2
- dec bx
- jnz lp1
- pop cx
- pop bx
- ret
- delay endp
- .data
- sec db 00h
- min db 00h
- hou db 11h
- situation db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40h ;共陰
- sit_end=$
- END
復制代碼
51hei.png (8.64 KB, 下載次數: 85)
下載附件
2020-4-26 15:57 上傳
所有資料51hei提供下載:
_8253A_可調時鐘.rar
(60.62 KB, 下載次數: 82)
2020-4-26 12:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|