DOS下的 C语言定时器编程

Footprints明轩 2011-10-01 02:05:01
请问各位大侠,DOS下的 C语言定时器 如何实现?最近在安装了DOS操作系统的PC104工控机上编程,想写个定时器结果在网上搜了半天都找不到答案。。。
...全文
278 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
  • 打赏
  • 举报
回复
这个得用什么中断了吧,太远了,忘了。
帮顶。

69,382

社区成员

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

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