AT89S52 24PU时钟周期

时间:2018-12-03 10:38:49

标签: timer keil 8051

我使用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的方法。

  • 首先:要使用8051系列计算F,我必须将晶体除以12:F = 11.0592 / 12 = 0.9216MHz。 Tosc为1 / F = 1 / 0.9216 = 1.085us(完成命令的时间(周期))。
  • 第二:我使用公式来计算1.5ms:1.5ms / 1.085us = 1382(大约137​​1还是可以的),然后我取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毫秒的两倍。我不知道为什么我需要一个人尽快解释一下,我的项目的截止日期快到了

感谢您的回答 最好的问候!

0 个答案:

没有答案