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

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

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

(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    P17

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=110592MHz

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;

         }  

    }

}

猜想你问的是1ms

下面为你写出1ms的程序:

用的是110592M的,你如果真的需要是12M的,那自己直接修改成12M就可以了。调用的时候直接把uinsigned int ms改成1就是1ms

void ConfigTimer0(unsigned int ms)

{

unsigned long tmp;

tmp = 11059200/12;

tmp = (tmp ms)/1000;

tmp = 65536 - tmp;

tmp = tmp + 18;

T0RH = (unsigned char)(tmp >> 8);

T0RL = (unsigned char)tmp;

TMOD &= 0xF0;

TMOD |= 0x01;

TH0 = T0RH;

TL0 = T0RL;

ET0 =1;

TR0 = 1;

}

void delay(uint n)

{

uint i,j;

for(i=n;i>0;i--)

{

for(j=110;j>0;j--);

}

}

当n=1是延时大约是1ms,就是说n等于都少就延时多少ms,当然n的值不超过uint的最大值。

头文件下请定义宏

#define uchar unsigned char

#define uint unsigned int

单片机晶振频率6MHz的时钟周期是0166uS,89C51的指令周期是12个时钟周期,约等于2uS。

以下是例程:

汇编

DELAY: MOV Rn,#200 循环200次 10uS = 2mS

LOOP: NOP 一个指令周期

NOP

NOP

DJNZ Rn,LOOP 二个指令周期,一次循环总共5个指令周期耗时10uS

RET

C语言 #define NOP _nop_(),_nop_(),_nop_()

for(int i = 200;i!=0;i-- )NOP;

以上就是关于单片机编程:假设晶振频率为11.0592Mhz,试编写一程序,在P1.7引脚输出周期为2s的方波全部的内容,包括:单片机编程:假设晶振频率为11.0592Mhz,试编写一程序,在P1.7引脚输出周期为2s的方波、设51单片机晶振频率为12MHZ,延时1m的子程序、我的单片机用的11.0592M的晶振,想写一个大概延时1MS的子程序,应该怎样写(用C语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9334245.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存