单片机编程中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;这是怎么回事?
展开
 我来答
帐号已注销
2021-01-05 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:160万
展开全部

TMOD

|=0X01不会影响到TMOD的其他位,将D0位置1.所以结果可能有多种。

TMOD=0x01则不能TMOD以前是何值,最后都只能是0x01。

LED的变化在定时器0中断服务器里,每进一次中断翻转一次,产生方波

扩展资料:

单片机编程就是硬件是单片机,基于单片机进行的程序开发,在有周围外设支持的情况下,用软件来控制的部分通过单片机编程来实现。单片机能识别的语言是硬件语言即汇编,因此编程就是围绕汇编来实现,有直接用汇编程序来编写的,但是较难调试的编写,特别是一上规模就更不易实现,因此常用高级语言来写然后通过编译器转化成汇编。

参考资料来源:百度百科-单片机C语言编程

Cindere鞡
推荐于2017-09-04 · TA获得超过7251个赞
知道大有可为答主
回答量:1148
采纳率:84%
帮助的人:500万
展开全部

你好:

  1. TMOD|=0x01的意思是最低位或1,就是把TMOD的值按位或00000001,不管最低位为什么数都置1,与TMOD=0x01是有区别的,赋值为1是把TMOD无条件赋值为0x01,而不管TMOD之前是什么值;而TMOD|=0x01,仅仅是吧最低位置1,而不会改变其他位的状态。

  2. 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)语句中添加你的应用程序,而不是替换它。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天云小店
推荐于2017-09-10 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:762万
展开全部
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位计数器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
felixliu2008
2013-07-23 · TA获得超过295个赞
知道小有建树答主
回答量:337
采纳率:100%
帮助的人:191万
展开全部
1、TMOD |=0X01;//这句话和TMOD=0x01有区别吗?
相当于 TMOD=TMOD | 0X01; 与 TMOD=0x01 有区别。后者是令最低位为 1,其它位都为 0。而前者仅令最低位为 1,而其它位保持原值。这是 C 语言的常用手段,叫做“位或”。通常用于对指定位进行置1 的操作。
2、LED=~LED; 表示对 LED 进行按位取反操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2013-07-23 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38379
国家科技进步奖

向TA提问 私信TA
展开全部
TMOD |=0X01不会影响到TMOD的其他位,将D0位置1.所以结果可能有多种。
TMOD=0x01则不能TMOD以前是何值,最后都只能是0x01。

LED的变化在定时器0中断服务器里,每进一次中断翻转一次,产生方波。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式