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++编写模拟中断处理程序(能实现高级中断打断低级中断)该怎么写啊!
答:如果是单片机的话 应该是在设置TCON和SCON的时候状态位写对就可以了。比较简单详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>