实验二 可编程定时器计数器报告

实验二  可编程定时器/计数器

一、    实验目的

掌握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定时器/计数器的基本工作原理、工作方式和编程原理,熟悉汇编代码的编写。实验中,连接电路,利用代码控制实验电路,深对课本理论的理解。

 

第二篇:实验5定时器计数器实验报告

单片机实验五定时器/计数器设计实验报告

一、实验内容

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);

              }

       }

}

六、实验结果

七、实验小结

通过实验,我了解了定时器的各种工作方式和定时器/计数器的使用和编程方法,为进一步学习打下基础。

相关推荐