实验二 可编程定时器/计数器
一、 实验目的
掌握8253的基本工作原理和编程方法。
二、 实验内容
1. 图2-1是本实验程序的接线图,将计数器0设置为方式0,计数器初值为N(N≤0FH,本程序为0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用L0或逻辑笔观察OUT0电平变化,初始时OUT0为高电平,当输入N个脉冲时,OUT0变为低电平,当输入N+1个脉冲后OUT0变高电平)。
2. 按图2-2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用电平指示灯L0或逻辑笔观察OUT1输出电平的变化,要求输出频率1Hz的分频信号。
3. 由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不用,编程时需要了解当前的微机使用那段IO地址并进行处理。
图2-1
图2-2
三、 编程提示
1. 8253控制寄存器地址 283H
计数器0地址 280H
计数器1地址 281H
四、 参考流程图
实验内容1的框图如图2-3所示,实验内容2的框图如图2-4所示。
五、 参考程序
1. 实验内容1的源程序清单如下:
ioport equ 0C400h-0280h
io8253k equ ioport+283h
io8253a equ ioport+280h
code segment
assume cs:code
start:
mov al,14h ;设置8253通道0为工作方式2,二进制计数
mov dx,io8253k
out dx,al
mov dx,io8253a ;送计数初值为08H
mov al,08h
out dx,al
lll: in al,dx ;读计数初值
call disp ;调显示子程序
push dx
mov ah,06h
mov dl,0ffh
int 21h
pop dx
jz lll
mov ah,4ch ;退出
int 21h
disp proc near ;显示子程序
push dx
and al,0fh ;首先取低四位
mov dl,al
cmp dl,9 ;判断是否<=9
jle num ;若是则为'0'-'9',ASCII码加30H
add dl,7 ;否则为'A'-'F',ASCII码加37H
num: add dl,30h
mov ah,02h ;显示
int 21h
mov dl,0dh ;加回车符
int 21h
mov dl,0ah ;加换行符
int 21h
pop dx
ret ;子程序返回
disp endp
code ends
end start
2. 实验内容2的源程序。
ioport equ 0C400h-0280h
io8253k equ ioport+283h
io8253a equ ioport+280h
code segment
assume cs:code
start:
mov dx,283h
mov al,36h
out dx,al
mov ax,1000
mov dx,280h
out dx,al
mov al,ah
mov dx,283h
mov al,76h
out dx,al
mov ax,1000
mov dx,281h
out dx,al
mov al,ah
out dx,al
mov ah,4ch
int 21h
code ends
end start
实验总结:
通过实验,学会8253芯片和微机接口原理和方法,掌握8253定时器/计数器的基本工作原理、工作方式和编程原理,熟悉汇编代码的编写。实验中,连接电路,利用代码控制实验电路,深对课本理论的理解。
一、实验内容
1、采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数。按下开关10次,计算按键的平均时间,并通过数码管显示出来。
二、实验目的
1、了解定时器的各种工作方式。
2、掌握定时器/计数器的使用和编程方法。
三、实验设备
win7系统下的proteus7.8和ceil4联调
四、实验电路图
五、程序代码
#include<reg51.h>
sbit P1_0=P1^0;
unsigned char numcode[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88};
unsigned char seqcode[4]={0x01,0x02,0x04,0x08};
unsigned int num=0;
void int1() interrupt 1
{
num++;
TL0=0xb0;
TH0=0x3c;
}
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms--) for(i=0;i<120;i++);
}
void main()
{
unsigned char i=0;
unsigned char dspcode[4];
unsigned long t;
P3=numcode[i];
ET0=1;
EA=1;
TH0=0x3c;
TL0=0xb0;
TMOD=0x01;
while(1)
{
if(P1_0==0)
{
TR0=1;
i++;
P3=numcode[i];
while(P1_0==0);
TR0=0;
if(i==10)
{
t=((TH0<<8)+TL0)/1000;
t=(t+50*num)/10;
dspcode[0]=numcode[(t/1000)%10]^0x80;
dspcode[1]=numcode[(t/100)%10];
dspcode[2]=numcode[(t/10)%10];
dspcode[3]=numcode[t%10];
break;
}
}
}
while(1)
{
for(i=0;i<4;i++)
{
P2=seqcode[i];
P0=dspcode[i];
DelayMS(5);
}
}
}
六、实验结果
七、实验小结
通过实验,我了解了定时器的各种工作方式和定时器/计数器的使用和编程方法,为进一步学习打下基础。
实验4计数器及其应用一实验目的1学习用集成触发器构成计数器的方法2掌握中规模集成计数器的使用及功能测试方法二实验原理计数器是一个用…
实验四计数器的设计实验室实验台号日期专业班级姓名学号一实验目的1通过实验了解二进制加法计数器的工作原理2掌握任意进制计数器的设计方…
试验七计数器李*电子信息科学与技术一、试验目的1.掌握中规模集成计数器74LS160,161的逻辑功能及使用方法。2.掌握74LS…
四川大学电气信息学院电气工程及其自动化网络专升本实验报告实验课程:电工电子综合实践实验名称:计数器班级:05秋电气工程及其自动化姓…
计数器实验报告一实验内容1静态测试芯片74LS90的逻辑功能2动态测试芯片73LS90的芯片功能画出clk与其中一个输出的波形图3…
上海电力学院数字电路与数字逻辑实验指导书实验题目计数器的功能验证专业年级20xx252学生姓名学号同组姓名指导教师姓名刘洪利实验五…
实验报告20xx20xx学年第2学期课程名称嵌入式操作系统实验题目简易计算器的设计与实现专业计算机科学与技术信息处理是什么专业写什…
实验4计数器及其应用一实验目的1学习用集成触发器构成计数器的方法2掌握中规模集成计数器的使用及功能测试方法二实验原理计数器是一个用…
南京信息工程大学数字电路实验报告学号20xx1305062班级11电信2班姓名杨天星第一章一引言计数器电路是一种随时钟输入CP的变…
实验报告课程名称:电工电子学实验指导老师:实验名称:集成定时器及其应用一、实验目的1.了解集成定时器的功能和外引线排列。2.掌握用…