我使用AT89S52 24PU上的Timer0在引脚P1.0上以1.5ms的频率导通/关断,用于芯片的Crystal我是11.0592MHZ,带有2个电容22uF,并且在Keil51上进行了编码。我使用Proteus来检查每个切换的脉冲,如下图:https://drive.google.com/open?id=1ub5UgujjsDn47DrAq69ZjpHzVoTnG9Md。然后,我想确保我的代码正确,我使用了Logic Analyzer 24Mhz-8CH模块通过Saleae Logic Software(支持使用该模块)检查脉冲,并将脉冲i作为图片收集:{{ 3}}。
2个结果中的两个都是1.5ms,但是,当我尝试为每个命令计算Cycles Machine(Tosc)时,它是3ms。我不知道为什么,我的代码以及如何计算以下Tosc:
using(HttpClient client = new HttpClient())
{
client.MaxResponseContentBufferSize = 256000;
var restUrl = new Uri("https://jsonplaceholder.typicode.com/todos/1");
using (HttpResponseMessage response = await client.GetAsync(restUrl))
{
if (response.StatusCode != System.Net.HttpStatusCode.OK)
{
string responseBody = await response.Content.ReadAsStringAsync();
throw new Exception(responseBody);
}
using (HttpContent content = response.Content)
{
string result = await content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResult>(result);
}
}
}
因此,有关将Timer0与1.5ms用作代码的代码在互联网上是默认的。 每个命令的周期都不同,我跟随KeilArm总结了此链接中的周期:https://drive.google.com/open?id=1ZLDfu8DbzDMqMkuEbLNCuPUNidRseonR 下面是我计算Tosc的方法。
第二:我使用公式来计算1.5ms:1.5ms / 1.085us = 1382(大约1371还是可以的),然后我取65536-1382 = 0FA9Ah(大约0FAA5h还是可以的)。我用下面的值代替了我上面计算的值(使时间精确到1.5ms:D。)
第三:计数器从0FAA5h(64165)开始,最大16位为0xFFFFh(65536)->程序需要计数65536-64145 = 1371次。
最后:我计算了代码周期:2 + 2 + 2 + 3 + 2 * 1371 + 2 + 3 + 3 + 3 + 2 = 2764cycles。然后我乘以1.085us = 2.99894ms(3ms) 。我测量的是1.5毫秒的两倍。我不知道为什么我需要一个人尽快解释一下,我的项目的截止日期快到了
感谢您的回答 最好的问候!