MCU C8051F时序10us怎么用?

发布于 科技 2024-06-13
17个回答
  1. 匿名用户2024-01-29

    总结一下:1:晶振的问题和初始值设定,这楼已经说得很清楚了,单片机的51个机周期=12个晶振频率(s),比如晶振频率是12MHz,那么机器周期是1us,从你设置的寄存器的初始值来看,晶振频率应该是6MHz, 首先检查它是否正确。

    2:程序问题,本应是主要问题,楼上的人没有提到。 10us是很短的时间,而你用的6MHz晶振,一个机器周期占2us,在你的中断中程序执行所需的时间已经超过了10us,应该是15us。

    也就是说,你还没有完成中断程序,下一个中断已经到了,你就要回到中断功能的开始。 这绝对不是你想要的结果。

    3:还是程序问题,为什么你没有看到你在中断函数中清除中断溢出标志? 应添加 tf1=0。

    解决方案:1:在硬件方面,提高晶体振荡器的频率。

    2:在软件方面,简化程序中的中断功能。

  2. 匿名用户2024-01-28

    12m MCU每台机器有10us的周期,10个机器周期有10us,可以粗略推测。 当然,打断时间也不是不可避免的。

  3. 匿名用户2024-01-27

    简单的 12MHz 晶体振荡器时序为 1 个机器周期为 2us。 这里选择了12MHz。

    xu:mov r0,#05h;1 个机器周期。

    djnz r0,xu;2 个机器循环;

    RET总计2*5=10us(这是一个典型的延迟程序)在中断时一般由th1 th0、th1 th0决定。 就像那家伙下楼时提出的清单一样。

  4. 匿名用户2024-01-26

    定时器实际上是单片机内部时钟的计数器,计数器每个周期加1,所以在使用定时器功能时,必须向定时器支付初始值,即先写th0tl0的值(如下图),写完初始值后,定时器功能的计数器上满是数字, 也就是说,它达到65536后溢出,所以一个定时的过程是65536-初始值。

    介于两者之间的数字。 表示的时钟周期,计数已满且溢出,为了产生中断,需要编写一个中断服务子程序,该子程序如下:void

    timer0()

    interrrupt

    xInterrupt 服务子例程还给出计时器计数器的初始 thtl 值。

    我执行下一个计数并理解它。 楼上的那个没有写中断来选择计时器的工作方式。 哎呀,妈妈。

    我已经筋疲力尽了。 void

    main()

    th0=(65536-50000)/256;

    tl0=(65536-50000)%256;定时器为0初始值,定时为50ms

    时序高达 1000 毫秒

    ea=1;打开总中断数。

    et0=1;允许定时器 0 中断。

    tr0=1;打开定时器 0

    while(1)

    voidtimer0()

    interrrupt

    th0=(65536-50000)/256;

    tl0=(65536-50000)%256;

  5. 匿名用户2024-01-25

    th2=(65535-U时序时间x(12MHz微控制器频率)) 256;

    tl2=(65535-你的定时时间x(12MHz微控制器频率))%256;

    如果减去的数字为负数,则无法完成计时,需要多次计时以累积时间。

  6. 匿名用户2024-01-24

    很简单,当你需要更改时序值时,只需编写一个子函数并重新分配计时器的初始值即可。 时间的算法:例如,12m晶体振荡器在1个机器周期的那一边是1 12,所以1us=12个机器周期固体5us=5*12

  7. 匿名用户2024-01-23

    当 e812 转换为十进制时,它是 59410,(65536-59410)*4 = 1ms,因此中断中的计数累计 1000 次。

    初始值计算方法(65536-x)*系统时钟分频系统时钟=定时时间(单位us)。

  8. 匿名用户2024-01-22

    该程序应使用定时器来驱动LED闪光灯,sysclk定时器预分频器1000的第一行这是计算1ms需要多少时钟周期,其中定义定时器预分频器48是在ckcon寄存器中设置分频,1000为1ms。

    第二行 AUX1 是触发 LED 所需的时钟周期数,即 1ms 所需的时钟周期数乘以该时钟周期数。

    led_toggle_rate。

    第三行是为了方便将值直接分配给给定计时器。

  9. 匿名用户2024-01-21

    这在门控方面很好。

    org 0000h

    ljmp main

    org 0030h

    main:mov r0,#50h

    mov tmod .#09h

    mov th0,#00h

    mov tl0,#00h

    setb tr0

    kk:jnb ,$

    jb , mov a,tl0

    da amov @r0,a

    inc r0

    mov a,th0

    da amov @r0,a

    inc r0

    sjmp kk

    END主要采用门控检测... 程序很简单... 如果您有任何问题,请与我联系。

  10. 匿名用户2024-01-20

    请注明编程语言,具体要求,好吗?

  11. 匿名用户2024-01-19

    系统时钟是。

    那么每定时器为1,那么5ms就是n=5000(1次,定时器的初始值(如果是16位)是65536-n

    外部晶体振荡器模型非常准确,程序编写完成后,用示波器观察,然后进行微调。

  12. 匿名用户2024-01-18

    单片机定时时间的计算公式=计数值(定时值)*机器周期=计数值(定时值)*12晶振频率。

    以上两个等号是等价的,因为,单片机的机器周期=12秒晶体振荡器频率,所以这两个公式是通用的。

    完成基本操作所需的时间称为机器周期。 通常,机器周期由多个 S 周期(状态周期)组成。 80C51系列MCU,一个机器周期由6个S周期组成。

    由 2 个时钟周期组成的 S 周期(状态周期)。

    指令周期由多个机器周期组成。 根据指令的不同,所需的机器循环次数会有所不同。

  13. 匿名用户2024-01-17

    首先,lz这个所谓的计数值的含义并不明确,不知道是初始值,还是溢出需要的值,如果理解为后者,那么普通的51微控制器,可以认为上面2个等号是正确的。

    但是,大约有 51 个 MCU 可以使用 1t 机械周期,即 1 个机械周期 = 1 个时钟周期(晶体振荡器周期),因此并非所有机械周期都等于 12 个晶体频率。

  14. 匿名用户2024-01-16

    学习单片机还是离不开教科书的,这些问题,教科书里的盗贼一目了然。

  15. 匿名用户2024-01-15

    基本上,只要将接收信号的高电平和低电平分开定时,两者之和就是周期,然后就可以计算出占空比。

    一般来说,计时中使用的点数需要非常密集,才能获得更准确的结果。 换句话说,时间越精确,结果就越精确。

    例如,如果将 1us 和 10us 用于相同的脉冲持续时间,则误差之间的差异非常大。

  16. 匿名用户2024-01-14

    你需要知道占空比,你可以把参数传递给它,通过一个普通的IO,模拟IIC或SPI就可以把参数传递过来,8051很难直接识别占空比,也可以用差分电路,把它转换成直流信号,然后AD采样,间接判断占空比。

  17. 匿名用户2024-01-13

    我遇到过这个问题,可以这样解决,用电容捕获单元,不占用单片机定时器,在中断程序中对高低电平进行定时,计算占空比,非常简单。

相关回答
12个回答2024-06-13

1.将C语言编译成程序员支持的语言格式,如常用的bin,或十六进制等格型。 >>>More

12个回答2024-06-13

LCD1602,两者都显示两条线。

您无需执行任何特殊操作即可显示两行。 >>>More

5个回答2024-06-13

这是一个只点亮 P1 端口的程序。

#include >>>More

5个回答2024-06-13

单片机应用广泛,如智能电表、实时工业控制、通信设备、导航系统、家用电器等。 >>>More

20个回答2024-06-13

宋禅你好,房东,腾讯地图非常好用**离线地图包后,还可以打开零交通地图模型实现离线位置搜索、公交行车路线规划、步行导航、行车语音导航等功能,非常完美,非常方正的场尘非常精准,你也会喜欢的。