173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

51单片机定时器设置程序

htxw 2023-03-15 资讯中心 20 ℃

怎么用51单片机定时1个小时 好像是循环,具体汇编程序是怎样的??

简单啊。

大致说来就是

你先开启个定时器,根据你选用的晶振,计算出你要用定时器定时的基准时间,

就假设是10毫秒吧。

然后给定时器的THx,TLx写入初值,开启中断,进行定时。

然后就等待中断。

在你响应中断的程序中,再次给单片机送入初值,

由于是10毫秒中断一次,因此我们设置几个“软件计数器”

比如每此中断,软甲计数器+1,

例如“软件计数器1”在中断程序中计数100次,则是10ms*100=1s

而“软件计数器2”在1的基础上继续计数100次,则是1S*100=100S

而“软件计数器3”在2的基础上继续计数36次,则是100S*36=3600S=1小时。

51单片机定时器的汇编语言程序编程,

这么简单的要求,不用大动干戈。

看看下面的程序,是不是最简单:

ORG 0000H

SETB TR0 ;启动T0

MOV R2, #250 ;定时计数初值

LOOP:

MOV TH0, #(8192 - 8000) / 32 ;定时8ms

MOV TL0, #(8192 - 8000) MOD 32

JNB TF0, $ ;等待8ms

CLR TF0

DJNZ R2, LOOP ;每隔8ms,R2减一次一

CPL P1.0 ;R2为0则LED亮灭转换

LJMP 0000H

END

本程序,已经实验成功。

怎样利用51单片机实现时钟功能程序?

#define uchar unsigned char //  (先定义一下方便使用)

#define uint unsigned int

#define ulong unsigned long

#include reg52.h //包括一个52标准内核的头文件

uchar code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar code ziwei[]={0x10,0x20,0x40,0x80};

uchar *h,*m;

uchar hour=12,min=0,sec=0,h_ding,m_ding,count=0,ms_50,ms_10,miaobiao_sec;

sbit dp=P0^7;

sbit k1=P3^2;

sbit k2=P3^3;

sbit k3=P3^4;

sbit sound=P2^3;

sfr ZIXING=0x80; //p0口输出字形

sfr ZIWEI=0xa0; //P2口输出字位

typedef enum //枚举类型:4种状态//

{

CLOCK,

SET_RING1,

SET_RING2,

MIAOBIAO_RUN,

}STATE;

STATE status;

typedef struct //定时时间的数据结构//

{

uchar hour;

uchar min;

}DINGSHI_TIME;

DINGSHI_TIME dingshi_time[2];

#define NO_KEY -1 //定义一下方便使用

#define KEY_1 1

#define KEY_2 2

#define KEY_3 3

bit show_on_flag;

//#######定时器T0中断服务程序########//

Timer0() interrupt 1

{

TH0=0x3c;TL0=0xb4; //50ms

ms_50++;

if(ms_50==20) {sec++;ms_50=0;}

if(sec==60) {sec=0;min++;}

if(min==60) {min=0;hour++;}

if(hour==24) {hour=0;}

}

//#######定时器T1中断服务程序########//

Timer1() interrupt 3

{

TH1=0xd8;TL1=0xf4; //10ms

ms_10++;

if(ms_10==100)

{

miaobiao_sec++;

ms_10=0;

}

if(miaobiao_sec==60)

miaobiao_sec=0;

}

//##############数码管显示#####################//

show(uchar time_high,uchar time_low)

{

uchar m;

uint n,k;

k=time_high*1000/10+time_low;

for(m=0;m4;m++)

{

ZIXING=zixing[k%10];

if(ms_5010)

dp=0;

ZIWEI=~ziwei[m];

for(n=0;n500;n++);

ZIXING=0xff;

for(n=0;n100;n++);

k=k/10;

}

}

//显示 on 定时编号//

show_on(uchar id) //id:定时编号//

{

uchar m;

uint n;

for(m=0;m2;m++)

{

ZIXING=zixing[id%10];

dp=0;

ZIWEI=~ziwei[m];

for(n=0;n500;n++);

ZIXING=0xff;

for(n=0;n80;n++);

id=id/10;

}

ZIXING=0xc8; //字母n//

ZIWEI=~ziwei[2];

for(n=0;n500;n++);

ZIXING=0xff;

for(n=0;n200;n++);

ZIXING=0xc0; //字母0//

ZIWEI=~ziwei[3];

for(n=0;n500;n++);

ZIXING=0xff;

for(n=0;n200;n++);

}

/*************启动秒表***************/

void run_miaobiao()

{

ms_10=0;

miaobiao_sec=0;

TH1=0xd8; //标准是0xd8e4

TL1=0xf4;

// TR1=1; //启动定时器1

}

显示秒表:

void show_miaobiao()

{

show(miaobiao_sec,ms_10);

}

51单片机定时器设置程序的介绍到此就结束了,感谢您耐心阅读,谢谢。

本文标签:51单片机定时器设置程序

<