stc89c52rc内部固定时钟是多少,89c52最高时钟频率时多少
来源:整理 编辑:亚灵电子网 2024-05-10 08:58:24
本文目录一览
1,89c52最高时钟频率时多少

2,单片机STC89C52 有内部时钟吗
没有,STC15系列的才有内部振荡器(就是晶振)。
3,stc89c52有多少个定时器计数器

4,请问89c52单片机的内部定时器工作时T脚及p3口还能同时用于作为
可以,内部定时器工作与端口无关。除非你把定时器用着外部计数器。定时器0方式:setb ea ; setb tr0;方式一:mov tmod,#01 定时器1方式:setb ea ; setb tr1;方式二:mov tmod,#10 后面两个问会了吧可以通过TMOD寄存器设置,当C/T位为0时TIMER做定时器用,与IO口无关,当C/T=1时,TIMER做计数器使用,与相对应的IO口有关.
5,用12M晶振驱动的STC89C52单片机做一个时钟用计时器0工作方
楼上的说的很明确了!1302是个不错的选择~“可我还是不清楚,就算是用DS1302也要用到显示调用的指令,同样会产生一定偏差,而且我觉得执行指令产生的时间误差,每次都有,这样每次显示的间隔应该就是相对固定的计时器中断产生的时间”你完全不用担心走时不准!因为走时是1302的工作!单片机只是把当前时间读出然后用1602显示!你就是写再多的程序也不会影响走时!顶多就是刷新速度慢!由于方式1装入时要两个机器周期,所。。。----从定时器产生溢出、到发生中断、再到重新写入初始值,远远不止两个机器周期。 按照10个周期,基本上差不多。最好是用自动装入初始值的方式。单片机每个指令消耗的时间一到两个机器周期的时间,用1602显示的程序要调用大量指令(汇编),所以显示的时间肯定不会分秒不差的。你想做很精确的时钟的话,最好用专门的时钟芯片比如:DS1302什么的。希望能帮到你哈再看看别人怎么说的。
6,我用STC89C52单片机给ADC0809编写一个的时钟信号脉冲程序请
和你的晶振频率有关的啊,如果是12M的话,定时器诶加倍,那就是200us翻转一次,周期400us,不然就不一定了。0809的转换的时钟频率典型值好像是600K吧,560k-600k之间。具体不记得了。“每隔(65536-200)us,CLK翻转1次” 不是吧!应该是每隔200us翻转一次,楼上的不要搞反了。就如楼上的算法:CLK周期=2*200=400us同样的问题,想问楼主是否有解决方案?在线急等。。感谢。。你用的是定时器1,模式1(16位定时/计数),如果单片机用的是12MHz或11.0592MHz的晶振,则机器周期为1us,那么每隔200us,CLK翻转1次,CLK周期为400us你好!和你的晶振频率有关的啊,如果是12M的话,定时器诶加倍,那就是200us翻转一次,周期400us,不然就不一定了。0809的转换的时钟频率典型值好像是600K吧,560k-600k之间。具体不记得了。希望对你有所帮助,望采纳。
7,STC89C52RC 单片机时钟带定时闹钟
stc89c52rc有3个定时器,t0、t1、t2#include typedef unsigned int uint; typedef unsigned char uchar; sbit DS1302_SDA=P1^0; sbit DS1302_SCK=P1^1; sbit DS1302_RST=P1^2; sbit KEY1=P3^0; sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit BEEP=P3^7; uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar Display_Buffer[]={0x00,0x00,0xbf,0x00,0x00,0xbf,0x00,0x00}; uchar Display_Buffer1[]={0x00,0x00,0xbf,0x00,0x00,0xbf,0x00,0x00}; uchar Bit_CODE[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar Current_Time[7]; uchar alarm_clock[7]; char Flag=0; char T_OR_A=0; uchar w=0,u=0,v; void delay_ms(uint x) { uchar i; while(x--)for(i=0;i<120;i++); } void WriteAByteToDS1302(uchar x) { uchar i; for(i=0;i<8;i++) { DS1302_SDA=x&0x01; DS1302_SCK=1; DS1302_SCK=0; x>>=1; } } uchar GetAByteFromDS1302(void) { uchar i,b=0X00,t; for(i=0;i<8;i++) { b>>=1; t=DS1302_SDA; b|=t<<7; DS1302_SCK=1; DS1302_SCK=0; } return (b/16*10+b%16); } void ResetDS1302(void) { DS1302_RST=0; DS1302_SCK=0; DS1302_RST=1; } uchar ReadData(uchar addr) { uchar dat; ResetDS1302(); WriteAByteToDS1302(addr); dat=GetAByteFromDS1302(); DS1302_SCK=0; DS1302_RST=0; return dat; } void WriteDS1302(uchar addr,uchar dat) { ResetDS1302(); WriteAByteToDS1302(addr); WriteAByteToDS1302(dat); DS1302_SCK=0; DS1302_RST=0; } void SetDS1302(void) { uchar i; WriteDS1302(0x8e,0x00); for(i=0;i<7;i++) { WriteDS1302(0x80+i*2,(Current_Time[i]/10<<4)|(Current_Time[i]%10)); } WriteDS1302(0x8e,0x80); } void GetTime(void) { uchar i,addr=0x81; for(i=0;i<7;i++) { Current_Time[i]=ReadData(addr); addr+=2; } } void time0Init(void) { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void ScanKey(void) { if(KEY1==0) { delay_ms(10); if(KEY1==0); { while(!KEY1); w=w++; if(w==5)w=1; switch(w) { case 1:Flag=1;break; case 2:Flag=1; break; case 3:Flag=1; break; case 4:SetDS1302(); Flag=0; break; } } } if(w!=0) { if(KEY2==0) { delay_ms(10); if(KEY2==0) { while(!KEY2); switch(w) { case 1:Current_Time[0]++;break; case 2:Current_Time[1]++;break; case 3:Current_Time[2]++;break; } } } if(KEY3==0) { delay_ms(10); if(KEY3==0) { while(!KEY3); switch(w) { case 1:Current_Time[0]--;break; case 2:Current_Time[1]--;break; case 3:Current_Time[2]--;break; } } } } if(KEY4==0) { delay_ms(10); if(KEY4==0) { while(!KEY4); u++; if(u==5)u=1; switch(u) { case 1:T_OR_A=1; break; case 2:break; case 3:break; case 4:T_OR_A=0;break; } } } if(u!=0) { if(KEY2==0) { delay_ms(10); if(KEY2==0) { while(!KEY2); switch(u) { case 1:alarm_clock[0]++;break; case 2:alarm_clock[1]++;break; case 3:alarm_clock[2]++;break; } } } if(KEY3==0) { delay_ms(10); if(KEY3==0) { while(!KEY3); switch(u) { case 1:alarm_clock[0]--;break; case 2:alarm_clock[1]--;break; case 3:alarm_clock[2]--;break; } } } } } void Play(uchar t) { uchar i; for(i=0;i<100;i++) { BEEP = ~BEEP; delay_ms(t); } BEEP = 0; } void main(void) { //uchar i; SetDS1302(); time0Init(); //GetTime(); while(1) { if(Flag==0) GetTime(); Display_Buffer[0]=DSY_CODE[Current_Time[2]/10]; Display_Buffer[1]=DSY_CODE[Current_Time[2]%10]; Display_Buffer[3]=DSY_CODE[Current_Time[1]/10]; Display_Buffer[4]=DSY_CODE[Current_Time[1]%10]; Display_Buffer[6]=DSY_CODE[Current_Time[0]/10]; Display_Buffer[7]=DSY_CODE[Current_Time[0]%10]; //Display_Buffer[0]=DSY_CODE[Current_Time[2]/10]; ScanKey(); /*for(i=0;i<8;i++) { P2=Bit_CODE[i]; P0=Display_Buffer[i]; delay_ms(2); }*/ Display_Buffer1[0]=DSY_CODE[alarm_clock[2]/10]; Display_Buffer1[1]=DSY_CODE[alarm_clock[2]%10]; Display_Buffer1[3]=DSY_CODE[alarm_clock[1]/10]; Display_Buffer1[4]=DSY_CODE[alarm_clock[1]%10]; Display_Buffer1[6]=DSY_CODE[alarm_clock[0]/10]; Display_Buffer1[7]=DSY_CODE[alarm_clock[0]%10]; if((Current_Time[2]==alarm_clock[2])&&(Current_Time[1]==alarm_clock[1])&&(Current_Time[0]==alarm_clock[0])) Play(1); } } void tiemr0() interrupt 1 { //if(flag1) j++; uchar i,j; TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(T_OR_A==0) { for(i=0;i<8;i++) { P2=Bit_CODE[i]; P0=Display_Buffer[i]; delay_ms(2); } } else { for(j=0;j<8;j++) { P2=Bit_CODE[j]; P0=Display_Buffer1[j]; delay_ms(2); } } } 你可参考一下!
文章TAG:
内部stc89c52rc内部固定时钟是多少 89c52最高时钟频率时多少
相关文章推荐
- 大口钳形表指针式钳口直径最大多少,液压钳口径最大的是多少
- 8088芯片线宽,芯片8086
- 低压无极调光电路,无级调光电路图
- io高电压的好处,高压处理器怎么样?
- 300k是多少钱,无线网卡300KS的价格要多少有没有限制时间
- 小米5换电源芯片多少钱,急5200换个手机电源ic要多少钱
- 控电压电路,控制电路电压
- 并联电路中的分压,电阻是并联分压的吗?
- 脱毛仪器芯片用多少的,美容院用什么脱毛仪?
- 滚筒洗衣机电机电压,洗衣机滚筒不转是什么原因?
- 太阳板一平方发多少电,1平方米太阳能面板可以产生多少电量
- 1200电源电路图,dk125电源电路图
- 50个经典电路,20条经典电路
- 电路中带宽怎么求,带宽怎么找?
- dz2的m是多少,当I2时m的5个取值dxydxzdyzdx2y2dz2 分别对应的m为多