算时间(可借位)

本文档介绍了两种时间处理方法:一种是将时间差全部转换为分钟,另一种是在分钟不足时进行小时借位。通过C++代码实例演示了如何实现从输入的小时、分钟差值计算新的小时和分钟,并讨论了借位逻辑。

 

方法1:全部转换为分钟

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int a,b,c,d,e,f;
    int delta;
    cin >> a >> b >> c >> d;
    delta = ((c - a)*60 + d - b);
    e = delta / 60;
    f = delta % 60;
    cout << e << ' ' << f << endl;
	return 0; 
}

方法2:分钟不够向小时借位

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int a,b,c,d,e,f;
    cin >> a >> b >> c >> d;
    e = c - a;
    f = d - b;
    if(f < 0)   //这时候e > 0 是肯定的啦~ 
    {
    	e --;   //向小时借60min,小时数减少1; 
    	f += 60;
	}
	cout << e << ' ' << f << endl;
	return 0; 
}

请重新确认如下子程序的逻辑,正确的FC 测试指令: T0SN FC ,;FC=0时,跳过下一行指令,====== ; 计时间差 = 当前时间 - 上次同步时间 ; 使用 16 减法(应广无 SBC,用 SUBC + SET1 FC 替代) MOV A, CURRENT_L ; 加载当前时间低字节 SUB A, LAST_SYNC_TIME_L ; 减去上次同步时间低字节 MOV TMP_L, A ; 存储低字节结果 T0SN FC ; 判断是否发生借位 (FC=1 表示借位) GOTO NoBorrow_High_1 ; 如果没有借位,跳过高字节减法中的借位处理 ; 如果有借位,则手动设置进标志为 1 SET1 FC ; 设置 FC=1,表示高字节需要借位 NoBorrow_High_1: MOV A, CURRENT_H ; 加载当前时间高字节 SUBC A, LAST_SYNC_TIME_H ; 带进减法(等效于 SBC) MOV TMP_H, A ; 存储高字节结果 ; 如果高字节不为 0,则时间差大于 255 MOV A, TMP_H T0SN FZ GOTO Reset_All//TimeDiffTooLarge ; 跳转到错误处理 ; 否则只用检查低字节 MOV A, TMP_L ; 加载时间差 SUB A, MIN_INTERVAL ; 检查最小间隔 T0SN FC GOTO Invalid_Sync ; 如果 < 最小间隔 MOV A, MAX_INTERVAL SUB A, TMP_L ; 检查最大间隔 T0SN FC GOTO Invalid_Sync ; 如果 > 最大间隔 ; [6] 总时间窗口检查 (范围:192-208ms => 96-104个中断周期) ; 获取当前时间戳 MOV A, GLOBAL_TIMER_L MOV CURRENT_L, A MOV A, GLOBAL_TIMER_H MOV CURRENT_H, A ; 计时间差 = 当前时间 - 首次同步时间 ; 使用 16 减法(应广无 SBC,用 SUBC + SET1 FC 替代) MOV A, CURRENT_L ; 加载当前时间低字节 SUB A, FIRST_SYNC_TIME_L ; 减去首次同步时间低字节 MOV TMP_L, A ; 存储低字节结果 T0SN FC ; 判断是否发生借位 (FC=1 表示借位) GOTO NoBorrow_High_2 ; 如果没有借位,跳过高字节减法中的借位处理 ; 如果有借位,则手动设置进标志为 1 SET1 FC ; 设置 FC=1,表示高字节需要借位 NoBorrow_High_2: MOV A, CURRENT_H ; 加载当前时间高字节 SUBC A, FIRST_SYNC_TIME_H ; 带进减法(等效于 SBC) MOV TMP_H, A ; 存储高字节结果 ; 如果高字节不为 0,则时间差大于 255 MOV A, TMP_H T0SN FZ GOTO Reset_All;TotalTimeTooLarge ; 跳转到错误处理 ; 否则只用检查低字节 MOV A, TMP_L ; 加载时间差 SUB A, TOTAL_MIN ; 检查最小总时间 T0SN FC GOTO Invalid_Sync ; 如果 < 最小总时间 MOV A, TOTAL_MAX SUB A, TMP_L ; 检查最大总时间 T0SN FC GOTO Reset_Counter ; 如果 > 最大总时间,超时重置 ; [关键修正点] 添加跳转指令到有效处理 GOTO Valid_Sync ; 所有检查通过=>有效同步
10-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

21RGHLY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值