这儿有专门的一个
界说特别功用寄存器的位变量。
bit和sbit都是C51扩展的变量类型。
典型应用是:sbit P0_0=P0^0;//即界说P0_0为P0口的第1位,以便进行位操作。
运用异或操作取位,进行,,,,,,
在设置守时器的时分发现下列的代码
THO = (65536 – 5000)/256;//赋值高8位
TLO = (65536 – 5000)%256;//赋值低8位
你说这与直接将65536 – 5000 赋予寄存器 有什么区别,这样有什么优点?怎样有种脱了裤子放屁的感觉,—-后来了解到原来是两个8位寄存器组成的,怪不得要别离赋值。
//产生 3:1的脉冲 灯亮1s 平息3s 替换相间 #include// 包括51单片机寄存器界说的头文件unsigned int beforeFlag = 0,afterFlag = 0;sbit Signal = P1^1;void beforeHalf(void) interrupt 1 using 1{beforeFlag++;TR1 = 1;//open oppsiteTR0 = 0;// close myselfTL0 = 0x06;//250 us}void afterHalf(void) interrupt 3 using 2 //这儿的中止号不能乱写哦,0-4..。后边都是空的没用{afterFlag++;TR0 = 1;//open oppsiteTR1 = 0;// close myselfTH0 = 0x06;//250 us}void main(void){Signal = 1;TMOD = 0x03;//咱们在这儿运用两个守时器形如TMOD = 0x11并不可行。这样的话,中止从未被激活。调试器里的statue 一向添加,(簿本上)》》》?????EA = 1;ET0 = 1;ET1 = 1;TH0 = 0x6;TL0 = 0x6;TR0 = 1;TR1 = 1;//这两句赋值后 TL和TH会产生改动 (由于是片内守时,所以一翻开便开端计时)while(1){if(beforeFlag == 12000)//3s{Signal = ~Signal;//在这儿咱们发现运用Signal = 0;然后下面的运用 Signal = 1并不可行,调试发现一个beforeFlag++的守时器 一向都未关过(尽管上面有关的查办TR1 = 0;),这是为什么呢?(簿本上测试通过,用的是3版别的)beforeFlag = 0;}if(afterFlag == 4000)//1s{Signal = ~Signal;afterFlag = 0;}}return ;}