DOS下的 C语言定时器编程

Footprints明轩 2011-10-01 02:05:01
请问各位大侠,DOS下的 C语言定时器 如何实现?最近在安装了DOS操作系统的PC104工控机上编程,想写个定时器结果在网上搜了半天都找不到答案。。。
...全文
337 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Footprints明轩 2013-03-05
  • 打赏
  • 举报
回复
其实本来是想在DOS环境下实现串口通信才去找定时器,可是后来发现DOS环境下提供了现成的串口通信函数,包括串口初始化函数,及发送、接收函数。下面是通过串口发送文件需要的函数,只要将待发送文件的指针送入sendFile()函数即可将文件发送出去。

#include <conio.h>
#include <dos.h>

#define COM1_ADDR 0x3f8

//Initial Com1
void InitCom1()
{
	//disable the uart interrupt
	outportb(COM1_ADDR + 1, 0x00);
	//set DLAB = 1,allow to access the uart register
	outportb(COM1_ADDR + 3, 0x80);
	//set the bundrate:115200
	outportb(COM1_ADDR + 0, 0x01);
	outportb(COM1_ADDR + 1, 0x00);
	//8 data bit,1 stop bit,no parity bit,DLAB = 0
	outportb(COM1_ADDR + 3, 0x03);
}

char sendCom1(char data)
{
	char status = inportb(COM1_ADDR + 5);//check the status of the Com1
	int count = 10000;//time out counter

	//wait until  the send register is empty  OR  Time out
	while(!(status & 0x20) && (count > 0))
	{
		count--;
		status = inport(COM1_ADDR + 5);//check the status of the Com1
	}
	//send data
	if(count > 0)//the send register is empty
	{
		outportb(COM1_ADDR + 0, data);//send the ONE Byte data
		return 1;
	}
	else //the data don't send out
	{
		return 0;
	}
}

//send file by COM1
void sendFile(FILE *pfile)
{
	char ch;
	while(!feof(pfile))//Send until the end of the file
	{
		ch = fgetc(pfile);//get the char to send
		if(!sendCom1(ch))//send error
		{
			printf("Send Error!!\n");
		}
	}
}

Footprints明轩 2011-11-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bokutake 的回复:]
DOS的内核木有提供定时器功能。你要用定时器的话,需要重写INT 8中断向量,这个中断平均每秒触发18.2次。
可以利用这个中断写一个中断处理程序设置一个内存标志,来起到定时器的到时的作用。

如果它不能满足你的要求,还可以对8253定时器进行编程,设置即时间隔,并通过8259中断控制器编程选择8253到时触发的中断,这些东西在计算机接口技术的书里有。
另外你还需要C语言高级编程技术等书,……
[/Quote]

谢谢大侠了,这个问题最终用别的途径解决了,没有用DOS下的定时器。现在正在学习uc/osII操作系统。
辰岡墨竹 2011-10-01
  • 打赏
  • 举报
回复
DOS的内核木有提供定时器功能。你要用定时器的话,需要重写INT 8中断向量,这个中断平均每秒触发18.2次。
可以利用这个中断写一个中断处理程序设置一个内存标志,来起到定时器的到时的作用。

如果它不能满足你的要求,还可以对8253定时器进行编程,设置即时间隔,并通过8259中断控制器编程选择8253到时触发的中断,这些东西在计算机接口技术的书里有。
另外你还需要C语言高级编程技术等书,因为需要汇编和C语言混合使用。

其实工控机上不一定非要用DOS,用小型的Linux或者eCos、FreeRTOS等等现代实时系统更好,因为它们基本上都提供了多线程、定时等高级功能,开发工具也比较新,开发起来也更便捷。
_了凡_ 2011-10-01
  • 打赏
  • 举报
回复
这个得用什么中断了吧,太远了,忘了。
帮顶。
内容概要:本文围绕基于CNN-BiLSTM-Attention混合神经网络模型的电力负荷预测展开研究,提出一种结合卷积神经网络(CNN)、双向长短期记忆网络(BiLSTM)与注意力机制(Attention)的深度学习框架,并通过Python代码实现高精度的短期与超短期负荷预测。该模型充分利用CNN对局部特征的提取能力,捕捉负荷数据中的周期性与趋势性模式;借助BiLSTM对时间序列前后向依赖关系的建模能力,增强对动态变化的感知;并通过Attention机制自适应地聚焦关键历史时刻,提升预测准确性。文中详细阐述了数据预处理、模型结构设计、训练流程及超参数调优方法,并在真实负荷数据集上进行了实验验证,结果表明该混合模型相比传统单一模型和其他基准模型具有更优的预测性能,尤其在应对非线性、非平稳负荷波动方面表现突出。; 适合人群:具备一定Python编程能力和机器学习基础,从事电力系统分析、能源管理、智能电网或时序预测相关工作的科研人员、工程师及高校研究生。; 使用场景及目标:①应用于电网调度、电力市场出清、需求响应管理等场景下的精细化负荷预测;②为研究人员提供一套完整的、可复现的深度学习负荷预测代码框架,推动AI技术在能源领域的落地应用;③帮助理解CNN、BiLSTM与Attention模块之间的协同机制及其在时序建模中的集成方式。; 阅读建议:建议读者结合所提供的Python代码进行动手实践,重点掌握数据归一化、滑动窗口构造、模型搭建与训练技巧,并尝试在不同地区、不同季节的负荷数据上进行迁移测试,以深入理解模型泛化能力与调参策略。
内容概要:本文围绕“MATLAB具有储能的经济调度及机会约束和鲁棒优化”展开,系统研究了电力系统中融合储能技术的经济调度问题,重点探讨了机会约束规划与鲁棒优化方法在应对新能源出力不确定性、负荷波动及系统运行风险中的应用。内容涵盖风光储协同调度、多微网共享储能、电动汽车参与调度、低碳经济调度等多种典型场景,深入分析了储能的选址定容、功率协调控制、状态估计与优化调度模型。核心技术包括粒子群优化(PSO)、分布鲁棒机会约束(DRCC)、模型预测控制(MPC)、鲁棒优化、二阶锥规划(SOCP)等先进算法,并提供了基于Matlab/Simulink的完整仿真代码实现,旨在提升新型电力系统的运行灵活性、经济性与抗风险能力。; 适合人群:具备电力系统、自动化、电气工程或相关专业背景,熟悉Matlab/Simulink仿真环境与基本优化算法,从事新能源并网、微电网运行、储能系统规划、电力市场调度等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习并构建含储能的电力系统经济调度优化模型;② 掌握机会约束与鲁棒优化在处理新能源不确定性问题中的建模思路与求解方法;③ 利用提供的Matlab代码进行算法复现、仿真验证与性能对比,支撑科研项目攻关;④ 为撰写高水平学术论文、学位论文或工程优化方案提供可靠的模型参考与代码支持。; 阅读建议:建议读者结合文档中具体的案例(如风电-水电联合调度、电动汽车集群调度、多微网共享储能等)和配套的Matlab代码进行动手实践,重点关注优化模型的构建逻辑、约束条件设定与求解器配置过程,同时可关注公众号“荔枝科研社”获取完整资源包、复现教程及持续的技术支持。

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧