标题: 单片机呼吸灯程序为什么周期测得的是8ms [打印本页]

作者: aktuan007    时间: 2022-3-12 23:30
标题: 单片机呼吸灯程序为什么周期测得的是8ms
单片机程序如下
定时器设为4ms,每4ms 变量“dd”的值加1,加到11后(44ms),max和min的值变化一次,为什么最后测量到的周期是8ms?
#include "reg51.h"
#include<intrins.h>
unsigned int cd,dd;
unsigned char min=0,max=0x50;

sbit LED=P2^0;
void led_int() interrupt 1 using 0
{
        TH0=0xf1;           //延时约3.905ms初值
        TL0=0xf1;
        TR0=1;
        dd++;
        if(dd==11)
        {
                if((min==0x50)&&(max==0)){cd=0;}
                if((min==0)&&(max==0x50)){cd=1;}
                if(cd){min++;max--;}
                else {min--;max++;}
                dd=0;
        }
}
void delay(unsigned int i)
{

        unsigned int j;
        while(i--)
        {
                for(j=0;j<0x20;j++);
        }

}

void main()
{

        TMOD=0x01;          //模式0
        TH0=0xf1;          //3.905ms高位
        TL0=0xf1;          //3.905ms低位
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {
                LED=0;
                delay(max);
                LED=1;
                delay(min);
        }
}

51hei图片20220314233815.png (9.64 KB, 下载次数: 53)

51hei图片20220314233815.png

作者: taotie    时间: 2022-3-13 10:23
没看到8ms    只看到32.25ms
作者: wolfinn    时间: 2022-3-13 10:30
TMOD=0x01;          //模式0    它是模式0么?
作者: aktuan007    时间: 2022-3-13 18:28
taotie 发表于 2022-3-13 10:23
没看到8ms    只看到32.25ms

哪个地方?用仿真看了吗

作者: Y_G_G    时间: 2022-3-13 19:28
1,那是模式1,不是模式0
2,3.905+3.905=7.81,这难道不是大约8mS的周期吗?没有错呀
3,你要4mS的周期,不是应该要2mS的中断吗?
作者: taotie    时间: 2022-3-13 20:20
aktuan007 发表于 2022-3-13 18:28
哪个地方?用仿真看了吗



作者: aktuan007    时间: 2022-3-13 22:47
taotie 发表于 2022-3-13 20:20

哪个地方可以看到是32.5ms啊啊
求赐教
作者: taotie    时间: 2022-3-14 09:16
只有P2^0咋眼睛当然测他了。
方波的上升沿到下一个上升沿为1个周期,
作者: lkc8210    时间: 2022-3-14 10:48
1. taotie兄用的是12MHz, 楼主用的是11.0592MHz
2. TMOD=0x01;定时器0是模式1,定时器1是模式0
3. TR0=1;楼主用的是定时器0
4. 楼主说的周期是什么周期?
定时器0的溢出周期是3.905ms
LED的PWM周期是delay(max);+delay(min);
35.25ms(Protues 11.059zMhz)
作者: aktuan007    时间: 2022-3-14 23:39
taotie 发表于 2022-3-13 20:20

大哥我还是不明白啊,为什么我测的是8.2ms

作者: aktuan007    时间: 2022-3-14 23:44
taotie 发表于 2022-3-13 20:20

我不会在回复里传图片,又加到原文后面了
作者: aktuan007    时间: 2022-3-15 00:13
delay函数又是延时多少?不是440us?
作者: aktuan007    时间: 2022-3-15 09:42
明白了,原来是我的proteus晶振设置的不对,应该和单片机保持一致都设为11.0592
作者: taotie    时间: 2022-3-15 11:01
aktuan007 发表于 2022-3-15 09:42
明白了,原来是我的proteus晶振设置的不对,应该和单片机保持一致都设为11.0592

12M 32.50    11.0592   32.25




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1