一个51单片机,晶振为12MHz,让前三个LED灯分别以1ms,1s,5s的频率闪烁,怎么用c语言写,谢谢各位了~~

作者&投稿:胥映 (若有异议请与网页底部的电邮联系)
51单片机设单片机晶振频率12mhz,使用定时器1以工作方式1让LED灯闪烁~

加上三条语句不是简单的乘2, 200次中断到了后应该对R0重新赋值200,即需插入一条指令,当然亦可以将R0的赋值语句提前,见图片。

main ()
{
TMOD = 0x01;//使能T0定时器工作于16位定时/计数方式
TH0 = 0x3C;//T0定时器50mS定时初值,此值按照12MHz频率计算出来的(假定是51单片机)
TL0 = 0xC0;
ET0 = 1;//允许定时器T0中断
EA = 1;//开中断
TR0 = 1;//定时器T0开始计数
while(1);//在这里死循环,等待T0中断发生
}

Timer0_int() interrupt 1 //定时器T0中断函数,每中断1次50mS
{
static unsigned char i = 10;//定义1个用于中断次数计数的静态变量
if(i)i--;//如果变量为真,减量计数
else{ //中断次数达到10次,10 * 50mS = 0.5S
LED = ~LED;//LED的状态取反(由亮变灭或由灭变亮)//LED用那根I/O自己定义
i = 10;//为下1个0.5S的中断次数计数重新赋值
}
TH0 = 0x3C;//恢复定时器T0初值
TL0 = 0xC0;
}

LED1 1ms闪烁人眼分辨不出来 定时器设定为16位定时50ms 另设一变量作定时器中断计数,到10(0.5S)的倍数时LED2取反,到50(2.5S)的倍数时LED3取反
#include<reg52.h>
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
unsigned int count;

void main()
{
TMOD=0x01; //定时器0,工作方式1
TH0=(65536-500)/256; /////////0.5ms
TL0=(65536-500)%256;
EA=1;
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
void time0() interrupt 1
{
led1=~led1;
count++;
if (!(count%1000)) {led2=~led2;}
if (count==5000) {led3=~led3;count=0;}
}

led1是看不出闪烁的 太快了

用定时器0或1设置你要的初值,譬如你可以设置定时器装的初值为1ms进入一次中断函数,把led1点亮,然后熄灭,设置一个变量,因为1ms进入一次中断函数,当此变量累加到1000次时,条件成立就点亮led2,然后又把此变量清0,第三个如此类推。

其实很简单啊,你可以再定时器里设置,如果达到您的条件就亮下就OK了哦。

提供一个电子技术导航网站给你吧:电子世家导航网站,它里面分类收录了很多优秀的电子技术网站,在其所收录的那些网站论坛里面就有很多大侠分享资料的。这个电子技术导航网站挺不错的,希望对你有帮助啦!


51单片机为什么加外部晶振?
标准的51单片机(比如AT89C51)是没有内置振荡器的,只是一些增强型51单片机会内置RC振荡器,比如STC12C2052AD。并且,内置RC振荡器的精度比不上晶振的,在对时钟稳定性要求不是很高的时候比较适合。这个外部晶振为单片机提供时钟信号,在时序逻辑电路中,时钟信号的重要性和电源是一样的。没有时钟信号,...

51单片机到底使用哪种晶振好
标准的51单片机晶振是1.2M-12M,一般由于一个机器周期是12个时钟周期,所以先12M时,一个机器周期是1US,好计算,而且速度相对是最高的(当然现在也有更高频率的单片机)。11.0592M是因为在进行通信时,12M频率进行串行通信不容易实现标准的波特率,比如9600,4800,而11.0592M计算时正好可以得到,因此...

51系列的单片机的晶振最大可以多大
ATMEGA的系列我接过26M的晶振,估计40M以下都可以正常运行,因为是12T的所以稳定性比较高。但是高频晶振的副作用是电流消耗增加,性能不稳定,并且通常会影响到定时器的定时参数,而且不便于调试仿真。1T的STC单片机据说在这个频率下不能稳定工作。

为什么51单片机使用晶振频率为11.0529的晶振能便于计时控制(连接PC...
连接PC涉及到串口通信。11.0592和波特率有关。答1: 因为它能够准确地划分成时钟频率,与UART(通用异步接收器\/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。    答2: 当定时器1被用作波特率发生器时,...

一般的51系列的单片机晶振频率有6、12Mhz,为什么我们老师说其运行速度...
我举个例子吧,假如是12Mhz的晶振,那么执行速度是12分之1的晶振频率,也就是1Mhz的执行速度。而mcs 51单片机(一般指课本上那些过时的货色,像宏晶就不同,好像震荡周期最高33Mhz)最高的晶振频率就是24Mhz,这个是有数据可查的,你可以查看at89s51的数据手册,高于这个频率可能工作就不稳定或者不能...

51单片机可不可以外接32.768k的晶振?
可以,因现在的单 片机号称主频可以是0到几十兆,但 用KHZ级别晶振运行速度慢得吓死人,特别是一些浮点运算,三角函数运算原来是ms级,一下子就变成了几秒 另外和外部设备传数据或通信,原来是单片机等待外设,现在反过来外设要等待单片机

51单片机晶振为什么要碰下才能起振
绝对是复位的问题。将开发板彻底断电一段时间后,上电是否可以正常工作呢?我想应该可以正常工作的。你所说的不正常应该是在开发板关掉后立即开启然后单片机就不正常了。对不对?其实原因很简单。一般的复位电路就是一个电阻串接一个电容器。当初次上电时,这个复位电路是有效的。因为此时电容器上的电荷...

3个51单片机 18和19能脚能共用一个晶振吗
完全可以共用一个 晶振,以一个单片机为主,其余单片机 只接输入端就可以了(XTAL1).或者之间可以串一个 几十欧姆的电阻。

51单片机能接晶振的最大值是多少 我用AT89S52 可以接24M晶振吗?
可以,。接过40MHz都没有问题,但是在产品中实际使用的时候,最好还是不要超过33MHz,这个在官方的数据手册都会有说的

51单片机最小系统晶振可以直接换吗
还有串行通信的波特率也要变化,所以,时间常数也要调整。频率升高到24M后确实可以提高运行速度,这可不是靠程序结构好了就能办得到的,还是要靠提高时钟频率来实现。其实,STC单片机的运行速度已经比AT89C51快8倍多了,如果不是特别要求运行速度的设计中,不必要用频率过高的晶振。

临沭县15754754311: 当80C51单片机晶振频率为12MHz时,时钟周期.机器周期各是多少? -
郦桂曲克:[答案] 1.时钟周期即晶振的单位时间发出的脉冲数,12MHZ=12*10的6次方,即每秒发出12000000个脉冲信号,那么发出一个脉冲的时间就是时钟周期,即1/12微秒. 2.一个机器周期等于12个时钟周期,所以是1微秒.

临沭县15754754311: 51单片机晶振频率为12MHz,利用中断在P1.1口输出50HZ的方波,C语言,哪位大侠帮帮忙,帮忙写个程序 -
郦桂曲克: #include <reg51.h>sbit port=P1^1;void Timer0Init(void) //10毫秒@12.000MHz {TMOD &= 0xF0; //设置定时器模式TMOD |= 0x01; //设置定时器模式TL0 = 0xF0; //设置定时初值TH0 = 0xD8; //设置定时初值TF0 = 0; //清除TF0标志TR0...

临沭县15754754311: 一个51单片机,晶振为12MHz,让前三个LED灯分别以1ms,1s,5s的频率闪烁,怎么用c语言写,谢谢各位了~~ -
郦桂曲克: LED1 1ms闪烁人眼分辨不出来 定时器设定为16位定时50ms 另设一变量作定时器中断计数,到10(0.5S)的倍数时LED2取反,到50(2.5S)的倍数时LED3取反 #include sbit led1=P0^0; sbit led2=P0^1; sbit led3=P0^2; unsigned int count; ...

临沭县15754754311: MCS - 51单片机的编程题:已知系统晶振频率为12MHZ,采用定时器T0的方式1,请编程实现1s的延时. -
郦桂曲克: void timer0() interrupt 1 { uchar count; TH0 = (65536-50000)/256; TL0 = (65536-50000)%256; count++; if(count == 20) { count = 0; sec++; if(sec == 100) { sec = 0; } } }

临沭县15754754311: 某MCS - 51单片机晶振频率为12MHz,使用定时/计数器T0以方式2,编写程序. -
郦桂曲克: #include sbit Pwm=P1^0; void InitTimer0(void) { TMOD = 0x02; TH0 = 0x00; TL0 = 0x9C; EA = 1; ET0 = 1; TR0 = 1; } void main(void) { InitTimer0(); } void Timer0Interrupt(void) interrupt 1 { TH0 = 0x00; TL0 = 0x9C; Pwm=!Pwm; }

临沭县15754754311: 51单片机晶振频率为12MHz,定时器1工作方式1中断方式在P2.3输出频率为10Hz的方波 -
郦桂曲克: MOD应该是/除号,因为是12M晶振,所以定时器一个计数值为1US,所以按这个赋值,定时器1将会50ms中断一次,要想产生10Hz的方波,周期得100ms,也就是说可以在中断服务程序中加条语句:cpl p2.3,就可以了,这样两次中断就是一个周期得方波信号,正好50X2=100ms.

临沭县15754754311: 设MCS - 51单片机的晶振频率为12MHZ,使用定时器1工作方式1中断方式在P1输出周期为100ms的方波 -
郦桂曲克: ;ORG 0000HSJMP STARTORG 0001BHMOV TH1, #(65536 - 50000) / 256MOV TL1, #LOW(65536 - 50000)CPL P1.0RETI START:MOV TMOD, #10HMOV TH1, #(65536 - 50000) / 256MOV TL1, #LOW(65536 - 50000)SETB TR1MOV IE, #88HSJMP $END

临沭县15754754311: 51单片机定时计数器晶振为12MHz,p1.0输出方波周期为200ms汇编编程如何写 -
郦桂曲克: p1.0输出高电平 延时200ms(200*1000个指令周期) p1.0输出低电平 延时200ms ……循环到开始……

临沭县15754754311: 晶振频率为12MHz的MCS - 51单片机,使用定时器1以定时方法在P2.0输出周期为800us、占空比为20%的矩形脉冲编程 -
郦桂曲克: 定时160us. 输出一次高电平,四次低电平. 即可. 程序如下:ORG 0000HMOV TMOD, #20HMOV TH1, #(256 - 160)MOV TL1, TH1SETB TR1 LP1:SETB P2.0MOV R2, #5 LP2:JNB TF1, $CLR P2.0CLR TF1DJNZ R2, LP2SJMP LP1 END

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网