单片机编程:假设晶振频率为11.0592Mhz,试编写一程序,在P1.7引脚输出周期为2s的方波

单片机编程:假设晶振频率为11.0592Mhz,试编写一程序,在P1.7引脚输出周期为2s的方波求大神指点,给出程序(80x81)... 单片机编程:假设晶振频率为11.0592Mhz,试编写一程序,在P1.7引脚输出周期为2s的方波 求大神指点,给出程序 (80x81) 展开
 我来答
siduestc
推荐于2018-03-22 · TA获得超过527个赞
知道小有建树答主
回答量:655
采纳率:100%
帮助的人:143万
展开全部

精确定时,只要你的晶振够准确零误差

(256-56)×144×32=921600=11059200÷12


汇编:

CNT0    EQU    20H
CNT1    EQU    21H
     
    ORG    0000H
    AJMP    MAIN
    ORG    000BH 
    DJNZ    CNT0,ENDT0
    MOV    CNT0,#144
    DJNZ    CNT1,ENDT0
    MOV    CNT1,#32
    CPL    P1.7
ENDT0: RETI    
     
MAIN:
    MOV    TMOD,#02H
    MOV    TH0,#56
    MOV    TL0,#56
    SETB    ET0
    SETB    EA
    SETB    TR0
SLEEP:
    MOV    PCON,#01
    NOP
    SJMP    SLEEP
END

用C语言

//f=11.0592MHz
sbit  pout=P1^7;
unsigned char cnt0=144,cnt1=32;
void main()
{
   Init();
    while(1)
    {
         PCON=0x01; //休眠
    }
}
void Init()
{
    TMOD=0x2;  //方式2:8位自装入
    TH0=0x56;  //基础定时
    TL0=0x56;
    TR0=1;
    ET0=1;
    EA=1;
     
}
    
void Timeon() interrupt 1  //定时器
{  
    if(--cnt0==0) 
    {
        cnt0=144; 
        if(--cnt1==0) 
         {
              cnt1=32;
              pout=~pout;
         }  
    }
}
he_123456
2013-10-20 · TA获得超过2892个赞
知道大有可为答主
回答量:3162
采纳率:58%
帮助的人:1330万
展开全部
#include<reg52.h>
sbit squ_out=P1^7 ;
void main()
{
     bit squ_mirror;
     unsigned int a,b;
     EA =0;
     while(1){
          for(a=106;a;a--)for(b=1085;b;b--); 
          squ_out = squ_mirror = ~ squ_mirror;
     }
}

周期小了一点点,大约少了57微秒左右。

如果要很准,你的晶振也真的很准,就用下面这个:

#include<reg52.h>
sbit squ_out=P1^7 ;
void main()
{
 bit squ_mirror;
 unsigned int a,b;
 unsigned char c;
 EA =0;
 while(1){
  for(a=106;a;a--)for(b=1085;b;b--); 
  for(c=12;c;c--);
  c++;
  squ_out = squ_mirror = ~ squ_mirror;
 }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2013-10-20 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38384
国家科技进步奖

向TA提问 私信TA
展开全部
#include<reg51.h>

sbit sqr=P1^7;
main()
{
unsigned char time=0;
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
TR0=1;
while(1)
{
if(TF1==1)
{
TF1=0;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
time++;
if(time==20)
{
sqr=~sqr;

time=0;
}
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2013-10-21 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
没有指定编程语言。

(80x81),这是什么意思?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式