单片机c语言定时器中断,单片机c语言定时器中断怎么解决

本文目录一览:

c语言怎么编写单片机的中断

给你上个较完整的程序,可以直接在KEIL中运行并观察输出

/******************************************************************************

功能:

本程序在12M晶振模式下,通过定时器中断精确实现数字时钟计时操作,并在KEIL

中实现输出。时、分、秒的变化在定时中断里处理。

说明:

因采用工作方式2,自动装入初值,所以此程序计时很精确,只是在KEIL中模拟输

出显示的变化速度很快,这点可不理会

******************************************************************************/

#include

#include

#define

TEST

//此行用于KEIL输出显示,如果不需要显示可将其删除

typedef

unsigned

char

uchar;

typedef

unsigned

int

uint;

#define

TH0TL0_INIT

(256-250)

//定时器8位自动装入模式下寄存器初值,0.25ms中断一次

char

cHour;

//时

char

cMin;

//分

char

cSec;

//秒

uint

iCount;

//秒计数,计数达到4000时1s,4000*0.25ms

=1000ms

=

1s

bit

bSecChanged;

//秒发生变化标志,每秒送一次输出显示,送显完成后清0,提高主程序效率

//==============================================================================

//T0定时器中断服务程序,12M晶振下每0.25ms产生中断,本程序执行一次

//==============================================================================

void

Timer0()

interrupt

1

{

iCount++;

//秒计数值+1

if(iCount==4000)

{//时间计数达到1S

iCount

=

0;

//重新开始下一秒计数

cSec++;

//时钟:秒+1

bSecChanged

=

1;

//置秒发生变化标志

if(cSec==60)

{//计够60s

cSec

=

0;

//重新开始下一分计数

cMin++;

//时钟:分+1

}

if(cMin==60)

{//计够60分钟

cMin

=

0;

//重新开始下一小时计数

cHour++;

//时钟:小时+1

}

if(cHour==24)

{//计够24小时

cHour

=

0;

//重新开始第二天计数

}

}

}

//==============================================================================

//主程序

//==============================================================================

void

main()

{

uchar

outstr[10];

//输出字符串,我的编译器可能有问题,直接输出有错

TMOD

=

0X02;//工作方式2,8位自动重装计时模式

TH0

=

TH0TL0_INIT;

//0.25ms中断一次

TL0

=

TH0TL0_INIT;

//0.25ms中断一次

#ifdef

TEST

SCON

=

0x50;

/*

SCON:

mode

1,

8-bit

UART,

enable

rcvr

*/

TMOD

|=

0x20;

/*

TMOD:

timer

1,

mode

2,

8-bit

reload

*/

TH1

=

221;

/*

TH1:

reload

value

for

1200

baud

@

16MHz

*/

TR1

=

1;

/*

TR1:

timer

1

run

*/

TI

=

1;

/*

TI:

set

TI

to

send

first

char

of

UART

*/

#endif

cHour

=

0;

//时

cMin

=

0;

//分

cSec

=

0;

//秒

iCount

=

0;

//秒计数

bSecChanged

=

0;

outstr[2]

=

‘:’;

//时分分隔符

outstr[5]

=

‘:’;

//分秒分隔符

outstr[8]

=

0;

//字符串结束符

EA=1;

//开总中断

ET0=1;

//允许T0中断

TR0=1;

//启动T0

while(1)

{

if(bSecChanged==1)

{//秒发生变化,将时间值转换为可显示字符串准备送显示

bSecChanged

=

0;//清除标志,节省CPU资源

outstr[0]

=

cHour/10

+

0x30;

//将秒转换为ASCII码

outstr[1]

=

cHour%10

+

0x30;

outstr[3]

=

cMin/10

+

0x30;

//将分转换为ASCII码

outstr[4]

=

cMin%10

+

0x30;

outstr[6]

=

cSec/10

+

0x30;

//将小时转换为ASCII码

outstr[7]

=

cSec%10

+

0x30;

#ifdef

TEST

printf(“

%s\r”,outstr);

//在KEIL中显示时钟

#endif

}

}

}

单片机C语言编程中延时函数和定时器中断有何关系

延时函数(延时子程序)是主程序正常运行时执行的,

—主程序运行的时间即是延时函数的延时时间。

定时器中断是在主程序中插入的事件,是在主程序的某个时间点,跳出主程序去执行定时器中断要做的事情。

所以如果一个延时子程序不停地被中断(包括定时器中断或者其他中断)打断,

就没有时间完成自身运行一次所需的那些语句。

等到它自身运行完一次,可能原定延时时间的很多倍已经过去了。

C语言写单片机的时候,怎么写定时中断?

给你上个较完整的程序,可以直接在KEIL中运行并观察输出

/******************************************************************************

功能: 本程序在12M晶振模式下,通过定时器中断精确实现数字时钟计时操作,并在KEIL

中实现输出。时、分、秒的变化在定时中断里处理。

说明: 因采用工作方式2,自动装入初值,所以此程序计时很精确,只是在KEIL中模拟输

出显示的变化速度很快,这点可不理会

******************************************************************************/

#include reg52.h

#include stdio.h

#define TEST //此行用于KEIL输出显示,如果不需要显示可将其删除

typedef unsigned char uchar;

typedef unsigned int uint;

#define TH0TL0_INIT (256-250) //定时器8位自动装入模式下寄存器初值,0.25ms中断一次

char cHour; //时

char cMin; //分

char cSec; //秒

uint iCount; //秒计数,计数达到4000时1s,4000*0.25ms =1000ms = 1s

bit bSecChanged; //秒发生变化标志,每秒送一次输出显示,送显完成后清0,提高主程序效率

//==============================================================================

//T0定时器中断服务程序,12M晶振下每0.25ms产生中断,本程序执行一次

//==============================================================================

void Timer0() interrupt 1

{

iCount++; //秒计数值+1

if(iCount==4000)

{//时间计数达到1S

iCount = 0; //重新开始下一秒计数

cSec++; //时钟:秒+1

bSecChanged = 1; //置秒发生变化标志

if(cSec==60)

{//计够60s

cSec = 0; //重新开始下一分计数

cMin++; //时钟:分+1

}

if(cMin==60)

{//计够60分钟

cMin = 0; //重新开始下一小时计数

cHour++; //时钟:小时+1

}

if(cHour==24)

{//计够24小时

cHour = 0; //重新开始第二天计数

}

}

}

//==============================================================================

//主程序

//==============================================================================

void main()

{

uchar outstr[10]; //输出字符串,我的编译器可能有问题,直接输出有错

TMOD = 0X02;//工作方式2,8位自动重装计时模式

TH0 = TH0TL0_INIT; //0.25ms中断一次

TL0 = TH0TL0_INIT; //0.25ms中断一次

#ifdef TEST

SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */

TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */

TH1 = 221; /* TH1: reload value for 1200 baud @ 16MHz */

TR1 = 1; /* TR1: timer 1 run */

TI = 1; /* TI: set TI to send first char of UART */

#endif

cHour = 0; //时

cMin = 0; //分

cSec = 0; //秒

iCount = 0; //秒计数

bSecChanged = 0;

outstr[2] = ‘:’; //时分分隔符

outstr[5] = ‘:’; //分秒分隔符

outstr[8] = 0; //字符串结束符

EA=1; //开总中断

ET0=1; //允许T0中断

TR0=1; //启动T0

while(1)

{

if(bSecChanged==1)

{//秒发生变化,将时间值转换为可显示字符串准备送显示

bSecChanged = 0;//清除标志,节省CPU资源

outstr[0] = cHour/10 + 0x30; //将秒转换为ASCII码

outstr[1] = cHour%10 + 0x30;

outstr[3] = cMin/10 + 0x30; //将分转换为ASCII码

outstr[4] = cMin%10 + 0x30;

outstr[6] = cSec/10 + 0x30; //将小时转换为ASCII码

outstr[7] = cSec%10 + 0x30;

#ifdef TEST

printf(” %s\r”,outstr); //在KEIL中显示时钟

#endif

}

}

}

51单片机定时中断C语言的写法步骤,可追加分数

程序说明:51单片机定时器0工作于方式一,定时50ms中断一次

晶振为12M

#include

void

main

{

TOMD

=

0X01;

//配置定时器0工作于方式一

TH1

=

(65536-50000)/256;

//高八位装入初值

TL1

=

(65536-50000)%256;

//低八位装入初值

ET0

=

1;

//开定时器0中断

EA

=

1;

//开总中断

TR0

=

1;

//启动定时器0

while(1)

{

}

}

void

Timer0_int()

interrupt

1

{

//重新装初值

TH1

=

(65536-50000)/256;

//高八位装入初值

TL1

=

(65536-50000)%256;

//低八位装入初值

}

/***************************************************************************************************************/

上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样

#include

void

main

{

TOMD

=

0X01;

//配置定时器0工作于方式一

TH1

=

0x3c;

//高八位装入初值

TL1

=

0xb0;

//低八位装入初值

IE

=

0x82;//开总中断并开定时器0中断

TR0

=

1;

//启动定时器0

while(1)

{

}

}

void

Timer0_int()

interrupt

1

{

//重新装初值

TH1

=

0x3c;

//高八位装入初值

TL1

=

0xb0;

//低八位装入初值}

单片机定时器中断问题(c语言)

我把你现在给出的这个程序的分析和调试了一下,并且我在里面加入了一些代码使能能够通过串口输出来观察数据,,一开始是进入到xian1()中的,,就是你的显示为0的这个函数中的,然后当nDataToDisplay200这个条件不满足的时候,程序就开始进入xian()中,也就是你的显示为9999的函数中,,,,然后又循环到一开始的状态。

就函数已经在你指定的地方调用了,,,,如果有问题,,就要检查你的显示函数和相应硬件连接了。

用c语言写51单片机定时器中断判断按键是否按下该怎么写? 我想实现的功

这个可以这样实现:

#includereg51.h

#define uchar unsigned char

uchar time=0;

sbit key=P1^0;

void t0isr() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

time++;

}

main()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

{

while(key) // 如果按键未按下则执行循环

{

if(time100)break; //如果时间大于5秒,退出循环。

}

…………

}

}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/193250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-01 15:00
下一篇 2024-12-01 15:00

相关推荐

  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28
  • Python语言实现人名最多数统计

    本文将从几个方面详细介绍Python语言实现人名最多数统计的方法和应用。 一、Python实现人名最多数统计的基础 1、首先,我们需要了解Python语言的一些基础知识,如列表、字…

    编程 2025-04-28
  • Python作为中心语言,在编程中取代C语言的优势和挑战

    Python一直以其简单易懂的语法和高效的编码环境而著名。然而,它最近的发展趋势表明Python的使用范围已经从脚本语言扩展到了从Web应用到机器学习等广泛的开发领域。与此同时,C…

    编程 2025-04-28

发表回复

登录后才能评论