IncMinute:将一个TDateTime变量加减某个数量的分钟数



声明:function IncMinute ( const StartDateTime : TDateTime {; NumberOfMinutes : Integer = 1} ) : TDateTime;

描述:IncMinute函数将传递进来的StartDateTime参数加上NumberOfMinutes数量的分钟数。

年份、月份、日期和小时数,会相应的增减。

增减的数量是可选的,默认为1。

备注:没有DeMinute函数,而是在IncMinute函数使用一个负数增加量。
var
myDate : TDateTime;
begin
// 初始化TDateTime变量
myDate := EncodeDateTime(2000, 12, 31, 23, 0, 0, 0);
ShowMessage('myDate = '+DateTimeToStr(myDate));

// 这个日期上加上100分钟
myDate := IncMinute(myDate, 100);
ShowMessage('myDate + 100 minutes = '+DateTimeToStr(myDate));

// 再减掉40分钟
myDate := IncMinute(myDate, -40);
ShowMessage('myDate - 40 minutes = '+DateTimeToStr(myDate));
end;

程序运行结果:

myDate = 2000-12-31 23:00:00

myDate + 100 minutes = 2001-1-1 00:40:00

myDate - 40 minutes = 2001-01-01

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您回答问题!根据您的描述,这是一个关于8253计时器的问题。下面是针对问题的回答: 针对问题的答案如下: 1. 初始化程序: ``` PIT_init: PUSH AX ; 保存AX寄存器 MOV AL,10110010B; CW=10110010B:选择通道0,工作方式3,读写/低字节优先/方波 OUT 43H,AL ; 将CW输出到PORT 43h MOV AX,0 ; 计数器初值设为0 OUT 40H,AL ; 将计数器初值的低字节输出到PORT 40h OUT 40H,AL ; 将计数器初值的高字节输出到PORT 40h POP AX ; 恢复AX寄存器 RET ; 返回 ``` 2. 修改时间的中断程序: ``` INTERRUPT Clock: PUSH AX ; 保存AX寄存器 PUSH BX ; 保存BX寄存器 PUSH CX ; 保存CX寄存器 PUSH DX ; 保存DX寄存器 IN AL,70H ; 从CMOS RAM中读取秒信息 MOV CL,AL ; 将AL中的秒信息存入CL寄存器中 AND AL,0FH ; 将AL中的秒信息从BCD转化为二进制 CBW ; 将AL中的数符号扩展到AH中 ADD AX,1 ; 将秒数1 MOV BL,AL ; 将AX中的秒信息存入BL寄存器中 CMP AL,60 ; 如果秒数等于60 JZ IncMinute ; 则跳转到修改分钟的代码 JMP WriteSecond ; 否则跳转到将修改后的秒数写回CMOS RAM的代码 IncMinute: IN AL,71H ; 从CMOS RAM中读取分钟信息 MOV CL,AL ; 将AL中的分钟信息存入CL寄存器中 AND AL,0FH ; 将AL中的分钟信息从BCD转化为二进制 CBW ; 将AL中的数符号扩展到AH中 ADD AX,1 ; 将分钟数1 MOV BL,AL ; 将AX中的分钟信息存入BL寄存器中 CMP AL,60 ; 如果分钟数等于60 JZ IncHour ; 则跳转到修改小时的代码 JMP WriteMinute ; 否则跳转到将修改后的分钟数写回CMOS RAM的代码 IncHour: IN AL,72H ; 从CMOS RAM中读取小时信息 MOV CL,AL ; 将AL中的小时信息存入CL寄存器中 AND AL,0FH ; 将AL中的小时信息从BCD转化为二进制 CBW ; 将AL中的数符号扩展到AH中 ADD AX,1 ; 将小时数1 MOV BL,AL ; 将AX中的小时信息存入BL寄存器中 JMP WriteHour ; 跳转到将修改后的小时数写回CMOS RAM的代码 WriteSecond: MOV DL,CL ; 将CL中的秒数存入DL寄存器中 OUT 70H,AL ; 将修改后的秒数写回CMOS RAM MOV AL,BH ; 将BH中的秒数信息存入AL中 OUT 0AEH,AL ; 将秒数信息输出到8253 OUT 0A0H,AL ; 将秒数信息输出到8253 JMP Done ; 结束中断 WriteMinute: MOV DL,CL ; 将CL中的分钟数存入DL寄存器中 OUT 71H,AL ; 将修改后的分钟数写回CMOS RAM MOV AL,BH ; 将BH中的分钟数信息存入AL中 OUT 0AEH,AL ; 将分钟数信息输出到8253 OUT 0A0H,AL ; 将分钟数信息输出到8253 JMP Done ; 结束中断 WriteHour: MOV DL,CL ; 将CL中的小时数存入DL寄存器中 OUT 72H,AL ; 将修改后的小时数写回CMOS RAM MOV AL,BL ; 将BL中的小时数信息存入AL中 OUT 0AEH,AL ; 将小时数信息输出到8253 OUT 0A0H,AL ; 将小时数信息输出到8253 Done: POP DX ; 恢复DX寄存器 POP CX ; 恢复CX寄存器 POP BX ; 恢复BX寄存器 POP AX ; 恢复AX寄存器 IRET ; 结束中断 ``` 希望这个答案对您有所帮助,如果您还有其他问题,请随时向我提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值