设80c51单片机的晶振频率为12MHz,试编程输出频率为100Hz,占空比2:10的矩形波

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-09-10
设80c51单片机的晶振频率为12MHz,试编程输出频率为100MHz,占空比2:10的矩形波

你好:
但就用12MHz的单片机时不可能输出100MHz频率的波形的,因为,单片机最快的速度也才是1us,而且加上指令,速度就好几微妙去了,就算用定时器做,抛开误差不说,最大也只能输出1MHz的波。
希望我的回答能帮助到你。

100HZ的矩形波,周期就是10ms,占空比2:1,就是高的部分占10ms的2/3,低的部分占10ms的1/3。理解了吗?

给个例子,也许可以满足你的要求:


#include "reg51.h"
#define FOSC 12000000L
#define T1XXH (65536-FOSC/12* 2/1000) +2   // 2ms timer calculation method in 12T mode
#define T1XXL (65536-FOSC/12* 8/1000)   // 8ms timer calculation method in 12T mode
/* define SFR */
sbit TEST_100Hz = P1^0;               // 100Hz Out

/* Timer1 interrupt routine */
void tm1_isr() interrupt 3 using 1
{
    
    TEST_100Hz = ! TEST_100Hz;
  if(TEST_100Hz) 
   {
    TL1 += T1XXH;                     //reload timer1 low byte
    TH1 = T1XXH >> 8;                //reload timer1 high byte
   }
  else 
   {
    TL1 += T1XXL;                     //reload timer1 low byte
    TH1 = T1XXL >> 8;                //reload timer1 high byte
   }
 
}
//-----------------------------------------------
/* main program */
void main()
{
    TMOD = 0x10;                    //set timer1 as mode1 (16-bit)
    TL1 = T1XXH;                     //initial timer1 low byte
    TH1 = T1XXH >> 8;                //initial timer1 high byte
  TEST_100Hz=1;
    TR1 = 1;                        //timer1 start running
    ET1 = 1;                        //enable timer1 interrupt
    EA = 1;                         //open global interrupt switch
    while (1);                      //loop
}


;如下即可:

ORG 0000H
MOV TMOD, #01H
SETB TR0
LP1:
SETB P1.0
MOV R2, #6
LOOP:
MOV TH0, #(65536 - 16666) / 256
MOV TL0, #(65536 - 16666) MOD 256
JNB TF0, $
CLR TF0
CLR P1.0
DJNZ R2, LOOP
SJMP LP1
END

  • 设80C51单片机晶振频率为12MHZ,定时器作计数器使用时,其最高的输入计数...
    答:或者按照时间计算,晶振频率12M的2个机器周期即2us,那么频率就是1/2*10^6=500khz,结果相同。
  • 设80c51单片机的晶振频率为12MHz,试编程输出频率为100Hz,占空比2:10...
    答:// 100Hz Out/* Timer1 interrupt routine */void tm1_isr() interrupt 3 using 1{ TEST_100Hz = ! TEST_100Hz; if(TEST_100Hz) { TL1 += T1XXH; //reload timer1 low byte TH1 = T1XXH >> 8; //reload timer1 high byte } else { TL1 += T1...
  • 设晶振频率是12MHz,那一个机器周期是多少?
    答:当80C51单片机晶振频率为12MHz时,时钟周期为(1/12)微秒,机械周期为1微秒。在计算机组成原理中又叫T周期或节拍脉冲。是CPU和其他单片机的基本时间单位。它可以表示为时钟晶振频率(1秒钟的时钟脉冲数)的倒数(也就是1s/时钟脉冲数,比如1/12MHz),对CPU来说,在一个时钟周期内,CPU仅完成一个最...
  • 当80C51单片机晶振频率为12MHz时,时钟周期.机器周期各是多少?_百度知 ...
    答:1.时钟周期即晶振的单位时间发出的脉冲数,12MHZ=12×10的6次方,即每秒发出12000000个脉冲信号,那么发出一个脉冲的时间就是时钟周期,即1/12微秒.2.一个机器周期等于12个时钟周期,所以是1微秒.
  • 若80C51 的晶振频率为12MHz,试计算延时子程序的延时时间。(要求计算过 ...
    答:当晶振为12MHz时机器周期为1uS(微秒) 标准51的DJNZ指命用时为二个机器周期,由于大循环R2中的数是50,小循环每次被重置为#100 ,故就应该是 1(MOV R1,#50用)+2*50*100(循环所用)+50(MOV R2,#100用的)+2 (RET用的) 这个50 是第一条 MOV R2,#100 每跳出循环重置R2时就要多用的一个...
  • 若80C51 的晶振频率为12MHz,试计算延时子程序的延时时间。(要求计算过 ...
    答:;1 NOP ;1 DJNZ R4, LOOP1 ;2 DJNZ R5, LOOP2 ;2 RET ;2 12MHz每个时钟周期是 1微秒 (8*200+1+2)*200*1+1*1+2*1=32603微秒 最大延时时间 (8*256+1+2)*256*1+1*1+2*1=525059微秒
  • 设80C51单片机的晶振频率为12MHz,试用内部定时方式产生频率10kHz的方 ...
    答:12M内部12分频后1M,也就是计数频率1us,50us中断一次并对IO口进行取反即可
  • 设80c51单片机的晶振频率为12MHz,试编程输出频率为100MHz,占空比2:10...
    答:你好:但就用12MHz的单片机时不可能输出100MHz频率的波形的,因为,单片机最快的速度也才是1us,而且加上指令,速度就好几微妙去了,就算用定时器做,抛开误差不说,最大也只能输出1MHz的波。希望我的回答能帮助到你。
  • 某80C51单片机系统晶振频率=12MHZ,利用定时器T0定时,在P1.0端输出一方 ...
    答:include<reg51.h> sbit pluse=P1^0;main(){ TMOD=0x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;while(1){ if(TF0==1){ TF0=0;TH0=(65536-500)/256;TL0=(65536-500)%256;pluse=~pluse;} } }
  • 设80C51单片机的时钟频率是12MHZ,利用定时中断T0在P1.0引脚上产生周期...
    答:include <reg51.h> void InitTimer0(void){ TMOD = 0x01;TH0 = 0x0F8;TL0 = 0x30;EA = 1;ET0 = 1;TR0 = 1;} void main(void){ InitTimer0();} void Timer0Interrupt(void) interrupt 1 { TH0 = 0x0F8;TL0 = 0x30;//add your code here!} ...