单片机编程中TM0D|=0x01;是什么意思
#include<reg52.h>sbitLED=P1^0;voidInit_Timer0(void){TMOD|=0X01;//这句话和TMOD=0x01有区别吗?TH...
#include<reg52.h>
sbit LED=P1^0;
void Init_Timer0(void)
{
TMOD |=0X01;//这句话和TMOD=0x01有区别吗?
TH0=0X00;
TL0=0X00;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
Init_Timer0();
while(1);
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0X00;
TL0=0X00;
LED=~LED;
}
另外,sbit LED=P1^0;整个函数中并没有对LED赋值1或0;这是怎么回事? 展开
sbit LED=P1^0;
void Init_Timer0(void)
{
TMOD |=0X01;//这句话和TMOD=0x01有区别吗?
TH0=0X00;
TL0=0X00;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
Init_Timer0();
while(1);
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0X00;
TL0=0X00;
LED=~LED;
}
另外,sbit LED=P1^0;整个函数中并没有对LED赋值1或0;这是怎么回事? 展开
6个回答
展开全部
TMOD
|=0X01不会影响到TMOD的其他位,将D0位置1.所以结果可能有多种。
TMOD=0x01则不能TMOD以前是何值,最后都只能是0x01。
LED的变化在定时器0中断服务器里,每进一次中断翻转一次,产生方波。
扩展资料:
单片机编程就是硬件是单片机,基于单片机进行的程序开发,在有周围外设支持的情况下,用软件来控制的部分通过单片机编程来实现。单片机能识别的语言是硬件语言即汇编,因此编程就是围绕汇编来实现,有直接用汇编程序来编写的,但是较难调试的编写,特别是一上规模就更不易实现,因此常用高级语言来写然后通过编译器转化成汇编。
参考资料来源:百度百科-单片机C语言编程
展开全部
你好:
TMOD|=0x01的意思是最低位或1,就是把TMOD的值按位或00000001,不管最低位为什么数都置1,与TMOD=0x01是有区别的,赋值为1是把TMOD无条件赋值为0x01,而不管TMOD之前是什么值;而TMOD|=0x01,仅仅是吧最低位置1,而不会改变其他位的状态。
LED被定义为P1.0口,上点默认为低电平,所以不需要去赋值,而LED在中断函数里被取反,每中断一次LED电平翻转一次。
有不懂的可以回复我。
希望我的回答能帮助到你。
更多追问追答
追问
谢谢!我将while(1)换成delay()延时函数
void delay()
{
int i,j;
for( i=100;i>0;i--)
for(j=100;j>0;j--);
}
想让它闪烁一定时间停下来,为什么它一直在闪?如果错了,怎么改?
追答
就从你这段程序中看,千万别这样。
写单片机C程序为什么在main()最后加一个while(1)死循环,就是想让程序停止在这里,一直执行while(1)中的代码,如果你去掉while(1),程序发现它执行完毕,又会重新开始从0执行程序,可以说是在不停的复位。
你可以在while(1)语句中添加你的应用程序,而不是替换它。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
TMOD |= 0x01;等价于TMOD = TMOD | 0x01; // 将TMOD的最低位置1,也即表示将定时/计数器的其工作方式调整为方式1(16位定时器/计数器)。
TMOD是51单片机定时器/计数器模式控制寄存器,TMOD是一个逐位定义的8位寄存器。
TMOD的8位分别为:
GATE(D7) C/T(D6) M1(D5) M0(D4) GATE(D3) C/T(D2) M1(D1) M0(D0)
其中低四位(即D0 ~ D3)定义定时器/计数器T0,高四位(即D4 ~ D7)定义定时器/计数器T1
GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。
GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。
C/T=0时为定时功能,
C/T=1时为计数功能。
M0、M1 方式选择功能
由于有2位,因此有4种工作方式
0 0 方式0 13位计数器
0 1 方式1 16位计数器
1 0 方式2 自动重装8位计数器
1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器
TMOD是51单片机定时器/计数器模式控制寄存器,TMOD是一个逐位定义的8位寄存器。
TMOD的8位分别为:
GATE(D7) C/T(D6) M1(D5) M0(D4) GATE(D3) C/T(D2) M1(D1) M0(D0)
其中低四位(即D0 ~ D3)定义定时器/计数器T0,高四位(即D4 ~ D7)定义定时器/计数器T1
GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。
GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。
C/T=0时为定时功能,
C/T=1时为计数功能。
M0、M1 方式选择功能
由于有2位,因此有4种工作方式
0 0 方式0 13位计数器
0 1 方式1 16位计数器
1 0 方式2 自动重装8位计数器
1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、TMOD |=0X01;//这句话和TMOD=0x01有区别吗?
相当于 TMOD=TMOD | 0X01; 与 TMOD=0x01 有区别。后者是令最低位为 1,其它位都为 0。而前者仅令最低位为 1,而其它位保持原值。这是 C 语言的常用手段,叫做“位或”。通常用于对指定位进行置1 的操作。
2、LED=~LED; 表示对 LED 进行按位取反操作。
相当于 TMOD=TMOD | 0X01; 与 TMOD=0x01 有区别。后者是令最低位为 1,其它位都为 0。而前者仅令最低位为 1,而其它位保持原值。这是 C 语言的常用手段,叫做“位或”。通常用于对指定位进行置1 的操作。
2、LED=~LED; 表示对 LED 进行按位取反操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
TMOD |=0X01不会影响到TMOD的其他位,将D0位置1.所以结果可能有多种。
TMOD=0x01则不能TMOD以前是何值,最后都只能是0x01。
LED的变化在定时器0中断服务器里,每进一次中断翻转一次,产生方波。
TMOD=0x01则不能TMOD以前是何值,最后都只能是0x01。
LED的变化在定时器0中断服务器里,每进一次中断翻转一次,产生方波。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询