用at89c51单片机的定时/计数器T0汇编语言设计

作者&投稿:王盲 (若有异议请与网页底部的电邮联系)
简述AT89C51单片机定时/计数器T0的四种工作方式~

这个简单,有图为证

工作方式的选择只需对M0和M1进行设置即可



#include
sbit P3_5 =P3^5;
void delay()
{
unsigned char i,j;
for(j=20;j>0;j--)
for( i= 250;i>0;i--);
}
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;

void main(void)
{
unsigned char i,j;

TMOD=0x02;
ET0=1;
EA=1;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
TR0=1;
while(1)
{
if( second ==60)
{
TR0=0;
P1=0x5F;
delay();
P1=0xFF;
delay();
}
}
}

void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
P0=dispcode[second/10];

P2=dispcode[second%10];
}
}

6位数显频率计数器

1.      实验任务

利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±1HZ。

2.      电路原理图

 

图4.31.1

 

3.      系统板上硬件连线

(1).            把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。

(2).            把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。

(3).            把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。

4.      程序设计内容

(1).            定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:T0的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个数,即为频率值。所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。

(2).            T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。

5.      C语言源程序

#include <AT89X52.H>

unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

                               0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};

unsigned char temp[8];

unsigned char dispcount;

unsigned char T0count;

unsigned char timecount;

bit flag;

unsigned long x;

void main(void)

{

  unsigned char i;

  TMOD=0x15;

  TH0=0;

  TL0=0;

  TH1=(65536-4000)/256;

  TL1=(65536-4000)%256;

  TR1=1;

  TR0=1;

  ET0=1;

  ET1=1;

  EA=1;

  while(1)

   {

     if(flag==1)

       {

         flag=0;

         x=T0count*65536+TH0*256+TL0;

         for(i=0;i<8;i++)

           {

             temp[i]=0;

           }

         i=0;

         while(x/10)

           {

             temp[i]=x%10;

             x=x/10;

             i++;

           }

         temp[i]=x;

         for(i=0;i<6;i++)

           {

             dispbuf[i]=temp[i];

           }

         timecount=0;

         T0count=0;

         TH0=0;

         TL0=0;

         TR0=1;

       }

   }

}

void t0(void) interrupt 1 using 0

{

  T0count++;

}

void t1(void) interrupt 3 using 0

{

  TH1=(65536-4000)/256;

  TL1=(65536-4000)%256;

  timecount++;

  if(timecount==250)

    {

      TR0=0;

      timecount=0;

      flag=1;

    }

  P0=dispcode[dispbuf[dispcount]];

  P2=dispbit[dispcount];

  dispcount++;

  if(dispcount==8)

    {

      dispcount=0;

    }

}



SEC EQU 09H ;秒存放位置

ORG 000H
LJMP START
ORG 0BH
LJMP timer0 ;T0中断

ORG 030H
START:
MOV TMOD,#01H ;T0方式1
MOV TH0,#0BH ;
MOV TL0,#0DCH
SETB TR0
SETB ET0
SETB EA
LJMP $

timer0:
MOV TH0,#0BH
MOV TL0,#0DCH
INC SEC
MOV A,SEC
CJNE A,#10H,EXIT ;秒到60
MOV SEC,#00H ;秒清零
EXIT: RETI

END

你是只要计数器设置,
还是要用七段数码管显示出来的啊(整个过程)
我QQ:994179653
或许我可以帮你


用单片机控制的LED流水灯设计(电路、程序全部给出)
入门指南:AT89C51单片机驱动LED流水灯实战设计 在智能控制的时代,单片机以其灵活性和效率日益取代传统系统。本文将以一款简易的LED流水灯为例,通过深入浅出的讲解,让初学者快速掌握基于AT89C51的硬件连接与软件编程技巧。硬件配置: 构建基础硬件平台 我们的核心是AT89C51单片机最小系统,其中包括8个LED灯...

单片机AT89C51各个引脚的作用
我是多年的单片机工程师,下面的讲解你参考一下 .单片机的40个引脚大致可分为4类:1 电源 2 时钟 3 控制 4 I\/O引脚。.下面详细讲解 .⒈ 电源:⑴ VCC - 芯片电源,接+5V ⑵ VSS - 接地端 .⒉ 时钟:XTAL1、XTAL2 -这个时钟相当于公共汽车,带动数据在单片机内的各个寄存器,进行传送。.⒊...

谁能给我介绍下89c51单片机 要尽量的详细
同时,Atmel不再接受89CXX的定单,大家在市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。如果市场需要,Atmel当然也可以再恢复生产AT89C51。89S51相对于89C51增加的新功能包括:-- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!-- ISP在线编程功能,这个功能的优势在于改写...

AT89C51单片机指令及其工作周期
AT89C51单片机指令系统完全和mcs-51一样,共111条,有 单周期指令,比如:MOV A,#01H 双周期指令,比如:SJMP 四周期指令,比如:DIV AB

单片机AT89c51的特点
一个全双工串行通信口,片内振荡器及时钟电路。AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时\/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

AT89C51单片机IO的最大允许输入电压
AT89C51电源电压VCC和封装有很大关系,大封装VCC=5V,小封装VCC=3.3V.输入低电压(VIL)Input low voltage指IO口通过软件设置低电平时,输入电压范围。由芯片手册得知:VIL=–0.5 V到0.2 VCC–0.1V,当VCC=5V 输入电压-0.5V到0.9V,如图所示,此时场管V2导通,输入电压过低会导致V2寄生二极管...

单片机AT89c51和AT89S51有什么不一样?
AT89S51与AT89C51相比,外型管脚完全相同,AT89C51的HEX程序无须任何转换可直接在AT89S51运行,结果一样。AT89S比AT89C51新增了一些功能,支持在线编程和看门狗是其中主要特点。它们之间主要区别在于以下几点:1.引脚功能:管脚几乎相同,在AT89S51中P1.5,P1.6,P1.7具有第二功能,即这3个引脚的第二功能组成了...

proteus中单片机怎么显示接地和电源管脚
1、点击下图中箭头所指的图标。2、点击“P”字按钮。3、输入“AT89C51”就会出现各种51单片专机。4、用鼠标双击。5、然后快捷小窗就会出现选好的单片机,选中放置到编辑区即可。单片机就显示接地和电源管脚。注意事项:运算器有两个功能:(1) 执行各种算术运算。(2) 执行各种逻辑运算,并进行逻辑测试,...

51单片机基本的电路里29,30,31三个引脚需不需要接啊
不一定需要接。以AT89C51单片机为例,第29脚是PSEN(外部存储器读选通信号),如果没有外接存储器的话,就不需要接。第30脚是ALE\/PROG(地址锁存允许信号):如果没有使用地址锁存器的话,也不需要接。第31脚是EA\/VPP(程序存储器的内外部选通),接低电平从外部程序存储器读指令,如果接高电平则从...

利用单片机AT89C51与ADC0808设计一个数字电压表,能够测量0~5V的直流电...
?片内振荡器和时钟电路 管脚接法说明: VCC:供电电压我们接+5V。 GND:接地。 P0口:在这个设计中我们将AT89C51做为BCD码的输出口与LED显示器相连。由于P0口输出驱动电路中没有上拉电阻,所以我们在外接电路上接上拉电阻。 P1口:把AT89C51中的P1口与ADC0808的输出端相连,做为数字信号的接收端。 P2口:我们把P2...

济宁市18851769602: 用AT89C51单片机定时/计数器0的定时功能构成一简单的方波发生器 -
相鹏盐酸: 这是我的一个程序: #include<reg52.h> #define uchar unsigned char #define uint unsigned int /******************************************************************** * 名称 : Time0_Init() * 功能 : 定时器的初始化,11.0592MZ晶振,50ms * 输入 : 无 * ...

济宁市18851769602: 简单描述AT89C51单片机的定时计数器的设置 -
相鹏盐酸: 在单片机中有两个特殊功能寄存器与定时/计数器有关,这就是TMOD和TCON. 1、通过TMOD来设置定时/计数器的工作方式, 2、通过TCON来控制启停、溢出标志等等. 3、根据定时时间来确认定时初值(TH0、TL0或TH1、TL1). 具体算法是:初值X=最大计数值-计数值,方式1的最大计数值为:2^16=65536,方式0为:2^13=8192,方式2和方式3为:2^8=256

济宁市18851769602: AT89C51单片机利用定时器|计数器T0产生1秒钟的定时,每当一秒定时到来时,更换指示灯点亮,依次循环点亮 -
相鹏盐酸: 初始化T0定时50MS,设个计数变量,每定时到了进中断一次+1,加到20次时就是1S,然后更换指示灯点亮,下1S 依次循环点亮. void main(void) {TMOD=0x01; //16位定时模式TH0=(65536-50000) >> 8;TL0=(65536-50000) & 255;TR0=1;...

济宁市18851769602: 用AT89C51单片机的定时器/记数器T0产生1秒的定时时间,当一秒产生时,秒计数加1,秒计数到20时,自动从0开始.单片机晶振频频为12MHZ.要写出原代码! -
相鹏盐酸:ORG 0000H MAIN: MOV R0,#00H ;定时次数,初值00H,MOV A,#00H ;A值初值00H, LP0: MOV TMOD,#01H ;工作方式1 MOV TH0,#3CH ;定时初值50MS MOV TL0,#0B0H SETB TR0 LP1: JBC TF0,LP2 AJMP LP1 LP2: INC R0CJNE R0,#14H,LP0 ; 满20次(时间1秒)A值加一送P1口 INC A MOV P1,A MOV R0,#00H CJNE A,#14H,LP0 ; 满20后A清零重新计时 AJMP MAIN END

济宁市18851769602: 用AT89C51单片机定时/计数器0的定时功能可构成一简单的方波发生器,实现周期为2s的方波, -
相鹏盐酸: ;启动入口 ORG 0000H ;复位启动 LJMP START ; ORG 000BH ;T0中断 LJMP T0INT ; ORG 0100H ; LJMP START ; YSJS EQU 30H ; ;主控程序 START: MOV SP,#80H ;初始堆栈值 MOV TMOD,#01H ;定时器0工作于方式1 MOV TH0,#0...

济宁市18851769602: AT89C51单片机计时程序 -
相鹏盐酸: 先读地址线,检测到第1个中断时开始定义一个计数器 并以高电平触发做使能信号,即 if(clk'event and clk='1') then if((高电平地址)='1') then count

济宁市18851769602: 单片机计时器
相鹏盐酸: //1:用AT89C51单片机的定时/计数器T0产生一秒的 //定时时间,作为秒计数时间,当一秒产生时,秒 //计数加1,秒计数到60时,自动从0开始.单片机 //晶振频率为12MHZ //由于是刚刚注册,积分没有多少,请大家帮个忙,谢谢! #include&lt;...

济宁市18851769602: MCS - 51单片机AT89C51有几个几位的定时计数器,可以被设定的工作方式有几种? -
相鹏盐酸: 51单片机有两个定时器,每个定时器可以设置4中工作方式.方式0:13位定时器 方式1:16位定时器 方式2:8位重装载模式 方式3:两个独立8位定时器模式

济宁市18851769602: 使用AT89c51定时器T0产生一秒的定时时间使p1.0接的发光二级管实现眨眼睛的效果,单片机要用汇编语言来写 -
相鹏盐酸: 告诉你理论 首先p1.0上拉 且为输出 使用1S定时中断 做个寄存器位的异或运算 打开中断前清除 CLR myset0.0 此时myset0的数据为 XXXX XXX0 X=以前是什么还是什么 ( 例子 mov a,1xor a,myset0 mov myset0,a 此时myset结果=XXXX XXX1 中断返回 程序里判断 myset0.0=1就执行 眨眼效果子程序 眨眼效果子程序 set led 打开 call delay100MS call delay100MS clr led 关闭 call delay50MS 循环以上程序 需要跳出 的程序根据你需要设置

济宁市18851769602: 在单片机AT89C51芯片中,设计一个一秒的延时程序,有多少种方法,具体如何? -
相鹏盐酸: 比较常用的有两种一种比较简单的就是粗略的软件延时;如:void delay_1s(void) { unsigned char i,j; for(i=0;i<128;i++) for(j=0;j<254;j++); }这种通过调整i和j的最终值来确定延时时间,没有办法精确计算的.另一种,做比较精确的延时,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网