单片机实现500KHZ时钟信号

89s51 如何生成500KHZ时钟信号~要选多少的晶振 若用计时器响应中断的方式来产生信号可行否 如何编程 若不行为什么~ 要详解 要有其他方法忘提供程序并带注释 调试成功立即送分 外追分100~
1楼朋友 就是想知道用程序怎么弄~
2楼朋友 好像3MHZ才能输出500K 要是这么简单就不问了
谢各位朋友 看来89输出500是不太行

要是用3MHZ晶振在ALE上输出500KHZ用不用在特殊功能寄存器上设置什么 直接用可以么 在下级芯片上用接电阻么
?

500kz的时钟周期是2us

在12M晶振的情况下,机器周期1us,不能用中断,因为进中断就要3个机器周期即3us就已经超出了时钟周期(另外退中断和高低电平切换也要花掉若干个机器周期)用程序的话
LOOP:
CPL P1.0 ---- 1US
AJMP LOOP ---- 2US
周期是6us,超出了!

LOOP:
SETB P1.0 ---1US
CLR P1.0 ---1US
AJMP LOOP ---- 2US
周期是4us,还是超出了!

所以12M下不能通过编程产生500khz的时钟

那么只有提高单片机的晶振了,24M,机器周期0.5US
LOOP:
SETB P1.0 ---- 0.5US
CLR P1.0 ----0.5US
AJMP LOOP ----1US
周期是2us,高电平0.5,低电平1.5

中断的方法还是不行!

S51单片机的晶振最高好像是24M吧!!!!(嗨!单片机的速度就是慢,要是像电脑达到几个G就好办多了,呵呵!)

通常500KHZ由分频器产生! (二楼就是这个意思,呵呵)
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-19
哦……抱歉,在计算的时候把这个忽略了,使用3MHz的晶振才可以。

500KHz对应是2μS,所以在使用24MHz的晶振的时候,估计这样:
loop:
CPL P1.0
CPL P1.0
LJMP loop

前两条指令为1周期,跳转为2周期,一次循环共4周期(2μS),端口翻转一次。

补充:如果使用AT89S51+3MHz的晶振,在ALE引脚上可以直接输出500KHz的方波,不需要设置寄存器。但是要说明一下,AT89S51的一个寄存器AUXR的第一个位的状态可以决定ALE是否输出波形,在单片机复位完成之后这个位为0,表示允许ALE输出波形,如果把这个位设置为1,则禁止ALE输出波形。

如果认为ALE输出的信号驱动能力不强,可以加非门来增强驱动力。

如果使用AVR单片机,比如ATMEGA8,那么问题就好办多了。
第2个回答  2008-11-19
不行!89s51资料上说它能带最大33M的晶振,但是89s51的EMC性能很让人头疼的,所以搞这么大的风险会很高(不考虑理论上的)。假设是使用24M的晶振,那么500K的信号,也就是2us。即使你的单片机其他的工作什么都不做,只做中断来产生的话,也是不行的。
在中断来了后,系统要做压栈,保护等操作(有些是硬件执行的),PUSH和POP这些指令是自动的,虽然不用写,但是还是要消耗时间的,然后你还要重新给timer赋值,这样消耗的更多,想在2us内4个指令周期完成,你看看行不行呢,显然只够初始化timer(MOV的立即数操作是2个指令周期,高低位各需要用一次)。
不要想了,单用此款单片机绝对不行,除非加PWM模块,还要能找到呢。
/******************************************************************/
在理论上支持ATF144X的回答,如果系统只做这个工作的话,可以修改成:
loop:
CPL P1.0
NOP
LJMP loop
但是考虑到单片机端口高低电平的确立时间,估计还是不行,谁有现成的系统试试看啊,用示波器看看就知道了,等结果。成功的话给ATF144X加分吧,呵呵。
第3个回答  2008-11-18
串口通信时钟是由单片机的晶振输入后,内部产生的,每个单片机都有自己的串口控制寄存器,在编程的时候只要对其进行正确的控制就可以设置串口通信的各种工作模式,每个模式会有自己的波特率,即你说的时钟频率.波特率一般用9600,串口通信有自己的协议,在单片机教学的课程里都会有,寄存器的编程也可以在单片机的教程里找到,不会太难的
RXD,TXD引脚一般固定,因为其他引脚没有产生你说的时钟的内部机制
两机通信的时候a的RXD接b的TXD,a的TXD接b的RXD
第4个回答  2008-11-18
不要用定时器吧,你的信号周期是2us,太短啦

单片机实现500KHZ时钟信号
500kz的时钟周期是2us 在12M晶振的情况下,机器周期1us,不能用中断,因为进中断就要3个机器周期即3us就已经超出了时钟周期(另外退中断和高低电平切换也要花掉若干个机器周期)用程序的话 LOOP:CPL P1.0 --- 1US AJMP LOOP --- 2US 周期是6us,超出了!LOOP:SETB P1.0 ---1US CLR ...

单片机实现500KHZ时钟信号
500kz的时钟周期是2us 在12M晶振的情况下,机器周期1us,不能用中断,因为进中断就要3个机器周期即3us就已经超出了时钟周期(另外退中断和高低电平切换也要花掉若干个机器周期)用程序的话 LOOP:CPL P1.0 --- 1US AJMP LOOP --- 2US 周期是6us,超出了!LOOP:SETB P1.0 ---1US CLR P...

...用14020可以不可得到500KHz的时钟信号,怎么接线?新手望高人指点...
弄清楚,分频器其实就是计数器,就方便了,例如输入10个脉冲才有输出,那就是10分频器。找下计数器吧,非常便宜,也可以自己随意分频。14020的Q端的分频是不一样的,Q1为2分频,Q4为8分频,Q5为16,以后依次为32、64、128、256、512、1024、2048、4096、8192分频。

PIC单片机实现500KHZ的PWM输出,脉宽为100ns,大家有什么好介绍的...
PWM首先要看你的单片机最大时钟频率多少,然后定时器可以输出的频率范围(一般都能达到最大频率的了),再看是否需要分频。比如最大频率20MHz的单片机可以到50ns。20MHz的单片机已经很多的了,比如瑞萨的R8C系列就可以。然后就是看定时器的输出频率了,R8C的话有的定时器是305Hz到20MHz这就要参考datashee...

单片机最高输入频率是多少?
最高的输入技术频率应为500khz。计算方法:确认一次记数,即一次负跳变,需要2个机器周期,即24个时钟周期或震荡周期,则最高记数频率为12M\/24=500khz。或者按照时间计算,晶振频率12M的2个机器周期即2us,那么频率就是1\/2*10^6=500khz,结果相同。

关于51单片机产生500KHZ方波
因中断太费时了),虽然可以大大节省时间,但也不可能达到500KHZ,只是频率比你现在的程序会高很多的。真要得到500KHZ的方波,有两种方案,1,用1MHZ的晶振组成振荡器,再分频就行。2,用STC单片机,晶振频率选更高的,它内部有时钟分频电路,直接输出分频的方波,不需要执行程序,不需要中断。

利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直 ...
ADC0809的工作频率最高是640KHz,推荐500KHz。在这个电路图中ADC0809使用单片机的ALE信号作为时钟,但是单片机工作频率是12MHz,ALE输出是2MHz,所以需要7474来分频。7474有两个D触发器,每个触发器可以配置为2分频器(使输出信号的频率是输入的一半),两个串联就是4分频,所以ALE的2MHz经过4分频后就是...

89c52单片机的晶振f=24MHz,在P1.3引脚输出500kHz的频率。用C语言怎么...
用定时器啊 是这样算的机器周期的12,也就是(24MHZ\/12)\/1000KHZ=4,所以 TH1=(65536-2)\/256;TL1=(65536-2)%256;include<reg52.h> sbit P1_3=P1^3 void mian(){ TMOD=0x02;TH1=(65536-2)\/256;TL1=(65536-2)%256;EA=1;TR1=1;while(1);} void t1 () interrupt 3 { P1_3=...

已知单片机系统晶振频率为6mhz,若要求定时值为10ms时,定时器T0工作方...
单片机系统晶振频率为6mhz,系统时钟频率 (也是计时脉冲频率)为500KHZ,一个脉冲周期2us ,10ms是5000个脉冲,因此 TMOD=0X01;TH0=(65536-5000)\/256;TL0=(65536-5000)%256;

...主要想要0809的时钟振荡程序 我想要个AD时钟为500KHZ的程_百度...
void Time0(void) interrupt 1 using 0\/\/ADC0809时钟信号 { CLK=~CLK;} void Timer0Init(void)\/\/定时器T0初始化 { TMOD = 0x02;TH0 = 0xce;TL0 = 0xce;ET0 = 1;TR0 = 1;} 定时器采用模式2,8位自动重装初值方式。初值计算方法:时钟频率设计为500kHz,则定时时间t=1\/f=1\/...

相似回答