利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。

下面两个程序有区别吗?

#include<reg52.h>
#define uchar unsigned char
uchar t;sbit m=P1^0;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
if(t==20)
{
t=0;
m=~m;
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}

#include<reg52.h>
#define uchar unsigned char
uchar t;sbit m=P1^0;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
t=0;
m=~m;
}
}

有很大的区别:
第一段程序:在main末尾没有while死循环,那么if这个语句只执行一次,然后从头开始执行程序么这样LED 定时器永远都在初始化,而且只执行很短暂的时间,根本不会体现出来。
第二段程序,在main中有whil死循环,那么程序就等待定时器中断,等待t的增加,这样LED就能闪烁了。
所以一段程序是没有意义的,第二段程序能正常运行。
希望我的回答能帮助到你 。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-01-16
#include<reg52.h>
#define uchar unsigned char //宏定义,unsigned char 取值范围是0-255梁智钧//
uchar t;
sbit D=P1^0; //位定义//
void main()
{
t=0; //给t赋初值//
TMOD=0x01; //定时器T0方式1//
TH0=(65536-50000)/256; //高8位装初值//
TL0=(65536-50000)%256; //低8位装初值//
EA=1; //开总中断//
ET0=1; //定时器/计数器0中断允许位//
TR0=1; //启动定时器0//
while(1)
{
if(t==10) //中断10次为500mS//
{
t=0; //当t=10次后,复位//
D=~D; //取反//
}
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}

利用定时\/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设...
我算的是中断十次就够了,但是实验的时候要20次才能够达到1HZ闪烁。如下: #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit d1=P2^0; uint a; void main() { TR0=1; ET0=1; EA=1; TMOD=0x01; TL0=(65535-50000)\/2... 展开 lebron93 | 浏览1706 次 |举报 我...

利用定时\/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设...
让发光二极管以1HZ闪烁,就是500ms亮,500ms灭。所以,本题目要求的延时时间是500ms。可以定时50ms中断一次,中断10次即可。

求单片机中围绕五个中断的程序题目 ?急求!
1、利用定时\/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。。2、利用定时\/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次\/秒(8个灯依次亮一遍为一个周期),循环。3、同时用两个定时器控制蜂鸣器发声,定时器0控制...

利用定时计数器T0从P1.0输出周期为1s,脉宽为20ms的正脉冲信号,晶振频率...
周期1s为1000ms 所以低电平为980ms 所以采用20ms的定时中断,然后计数49次实现980ms,再计算初值

利用定时\/计数器T0从P1.0输出周期为1s,脉宽为20ms有正脉冲信号,晶振频 ...
include <reg51.h>sbit P10=P1^0;void Timer0Init(void)\/\/20毫秒@12.000MHz{TMOD &= 0xF0;\/\/设置定时器模式TL0 = (65536-20000)%256;\/\/设置定时初值TH0 = (65536-20000)\/256;\/\/设置定时初值TF0 = 0;\/\/清除TF0标志TR0 = 1;\/\/定时器0开始计时}void main(){ Timer0Init(); ...

试利用定时器\/计数器T0从P1.0输出周期为1ms,脉宽为20ms的正脉冲信号...
脉宽为20ms的脉冲信号,其周期要大于20ms的。估计你是说反了吧,应该是脉宽为1ms,而周期是20ms,那低电平是19ms,这才合理。可以定时1ms输出高电平,再计时19ms输出低电平。这样,高电平1ms加上低电平19ms是一个周期为20ms。

在MSC8031的P1.0脚输出1KHz的方波,要求用T0的定时中断方式实现,设晶 ...
也就是说要让P1.0脚每隔500us翻转一次。使用定时器T0,定时器是每个机器周期计数器值加一,加到FFFF后,定时器溢出,定时时长计算公式T=(2^N-计数初值)*晶振周期*6,N为计数器位数,使用方式0时为13,方式1时为16,可以使用方式0时,初值为1F06.ORG 0000H LJMP START ORG 000BH LJMP Timer0...

用定时\/计数器T0或T1定时设计一个周期为1秒的方波;从P1.0口输出。
TL0,#LOW(65536-50000) SETB TR0 SETB ET0 SETB EA MOV R2,#10 SJMP $T0ISR: CLR TR0 MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 DJNZ R2,T0E MOV R2,#10 CPL P1.0T0E: RETI END ...

单片机,10000H-7DH怎么计算的求详细计算过程
利用定时 \/ 计数器 T0 从 P1.0 输出周期为 1s 的方波,让发光二极管以 1HZ 闪烁,include<reg52.h> \/\/52 单片机头文件 include <intrins.h> \/\/ 包含有左右循环移位子函数的库 define uint unsigned int \/\/ 宏定义 define uchar unsigned char \/\/ 宏定义 sbit P1_0=P1^0;uchar tt;...

...的方式1定时,由P1.0引脚输出50Hz方波,晶振频率为12MHz,计算初值并...
(1)计算计数初值X 50Hz对应周期为20mS,P1.0需要10mS反相一次。12MHz晶振对应机器周期 = 1us 10mS需要机器周期数:10mS\/1uS=10000 设需要装入T0的初值为X: X = 65536 − 10000 = 55536。X 化为十六进制数: 55536 = D8F0H 。T0的初值...

相似回答