微机与接口实验3定时器计数器
- 格式:doc
- 大小:3.18 MB
- 文档页数:12
微机与接口技术实验3
实验设备:LAB6000通用微控制器实验系统
实验用时8小时
实验内容:定时器计数器实验
1.简单计数器:用实验系统的频率发生器作为输入信号,作为定时器T0输入,实现秒脉冲发生器,秒脉冲信号接8259A INT0。
用发光二极管二进制方式显示秒计数。
2.脉宽调制信号输出:用8253两路定时器,产生脉宽调制信号,要求频率为4K,要求占空比是周期变化的,变化规律为5%,10%,15%....90%,95%,5%,…….,每秒占空比变化一次,则整个pwm 波占空比变化周期是19秒。
3.在原理图上增加8253芯片,地址为C000H起(占16地址)实验报告:程序清单,说明;电路原理图。
程序代码
1.
设计思路较为简单,把计数器的输出接到中断程序的INT0,在中断程序中计数,然后把计数值通过8255输出到指示灯,就能实现程序功能。
CONTROL equ 0c003h
COUNT0 equ 0c000h
COUNT1 equ 0c001h
COUNT2 equ 0c002h
mode equ 82h ; 8255 工作方式
PA8255 equ 8000h ; 8255 PA口输出地址
CTL8255 equ 8003h
ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4
ICW2 equ 00100000b ; 中断号为20H
ICW4 equ 00000001b ; 工作在8086/88 方式
OCW1 equ 11111110b ; 只响应INT0 中断,也响应INT1中断
CS8259A equ 09000h ; 8259地址
CS8259B equ 09001h
data segment
CNT dw 0
CNNT dw 0
data ends
code segment
assume cs:code,ds:data
IEnter proc near
push ax
push dx
mov dx, PA8255
inc CNT
;cmp CNT,50
;jnb add1
;jmp output
add1:
;inc CNNT
;mov CNT,0
mov ax, CNT
out dx, ax ; 输出计数值
output:
mov dx, CS8259A
mov al, 20h ; 中断服务程序结束指令
out dx, al
pop dx
pop ax
iret
IEnter endp
IInit proc
mov dx, CS8259A
mov al, ICW1
out dx, al
mov dx, CS8259B
mov al, ICW2
mov al, ICW4
out dx, al
mov al, OCW1
out dx, al
ret
IInit endp
start proc near
mov al, 36h; 00110110B ; 计数器0,16位,方式3,二进制
mov dx, CONTROL
out dx, al
mov ax, 1000
mov dx, COUNT0
out dx, al ; 计数器低字节
mov al, ah
out dx, al ; 计数器高字节
mov al, 76h; 01110110B ; 计数器1,16位,方式3,二进制
mov dx, CONTROL
out dx, al
mov ax, 1000
mov dx, COUNT1
out dx, al ; 计数器低字节
mov al, ah
out dx, al ; 计数器高字节
mov dx, CTL8255
mov al, mode
out dx, al
cli
mov ax, 0
mov ds, ax
mov bx, 4*ICW2 ; 中断号
mov ax, code
shl ax, 4 ; x 16
add ax, offset IEnter ; 中断入口地址(段地址为0)
mov ax, 0
inc bx
inc bx
mov [bx], ax ; 代码段地址为0
call IInit
mov ax, data
mov ds, ax
mov CNT, 0 ; 计数值初始为0
mov ax, CNT
mov dx, PA8255
out dx, ax
sti
LP: ; 等待中断,并计数。
nop
jmp LP
jmp $
start endp
code ends
end start
2.
设计思路为:计时器0工作在方式2,计数值为1000,产生4kHz的波形OUT0,把OUT0分别作为GA TE1和INT0使用。
计时器1工作在方式1,计数值每一个GA TE1加载一次。
为了保证占空比每1s改变一次,需要利用中断程序,对OUT0进行计数,每4000个OUT0(INT0)占用1s时间,因此每4000次中断改变一次计时器1的计数值。
这样就实现了程序功能。
CONTROL equ 0c003h
COUNT0 equ 0c000h
COUNT1 equ 0c001h
COUNT2 equ 0c002h
mode equ 82h ; 8255 工作方式
PA8255 equ 8000h ; 8255 PA口输出地址
CTL8255 equ 8003h
ICW1 equ 00010011b ; 单片8259, 上升沿中断, 要写ICW4
ICW2 equ 00100000b ; 中断号为20H
ICW4 equ 00000001b ; 工作在8086/88 方式
OCW1 equ 11111110b ; 只响应INT0 中断,也响应INT1中断CS8259A equ 09000h ; 8259地址
CS8259B equ 09001h
data segment
CNT dw 0
CNNT dw 0
data ends
code segment
assume cs:code,ds:data
IEnter proc near
push ax
push dx
INC CNNT
CMP CNNT,4000
JB output
mov CNNT,0
add CNT,50
cmp CNT,950
ja add1
jmp go
add1:
;inc CNNT
mov CNT,50
go:
mov ax, CNT
mov dx, COUNT1
out dx, al ; 计数器低字节
mov al, ah
out dx, al ; 计数器高字节
;mov dx, CTL8255
;mov al, mode
;out dx, al
output:
mov dx, CS8259A
mov al, 20h ; 中断服务程序结束指令
out dx, al
pop dx
pop ax
iret
IEnter endp
IInit proc
mov dx, CS8259A
mov al, ICW1
out dx, al
mov dx, CS8259B
mov al, ICW2
out dx, al
mov al, ICW4
out dx, al
mov al, OCW1
out dx, al
ret
IInit endp
start proc near
mov ax, data
mov ds, ax
mov al, 00110100B ; 计数器0,16位,方式2,二进制
mov dx, CONTROL
out dx, al
mov al, 01110010B; 01110010B ; 计数器1,16位,方式1,二进制
out dx, al
mov ax, 1000
mov dx, COUNT0
out dx, al ; 计数器低字节
mov al, ah
out dx, al ; 计数器高字节
;新加的
mov dx, CTL8255
mov al, mode
out dx, al
cli
mov ax, 0
mov ds, ax
mov bx, 4*ICW2 ; 中断号
mov ax, code
shl ax, 4 ; x 16
add ax, offset IEnter ; 中断入口地址(段地址为0)
mov [bx], ax
mov ax, 0
inc bx
inc bx
mov [bx], ax ; 代码段地址为0
call IInit
mov CNT, 0 ; 计数值初始为0
mov ax, CNT
mov dx, PA8255
out dx, ax
mov ax,data
mov ds,ax
sti
LP: ; 等待中断,并计数。
nop
jmp LP
jmp $
start endp
code ends
end start
波形图:
可以看到变化的占空比。