新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 學習51單片機有感

        學習51單片機有感

        作者: 時間:2016-11-19 來源:網絡 收藏
        這里有專門的一個

        定義特殊功能寄存器位變量

        本文引用地址:http://www.104case.com/article/201611/318120.htm

          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 ;}


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 理塘县| 沾化县| 大庆市| 长沙市| 章丘市| 梅州市| 双辽市| 东平县| 长葛市| 湘乡市| 招远市| 沙田区| 泸水县| 博白县| 巨野县| 福鼎市| 崇礼县| 沧州市| 广西| 泸溪县| 灯塔市| 搜索| 宜都市| 普陀区| 阿克苏市| 通渭县| 东港市| 湘潭县| 三原县| 平湖市| 淮阳县| 福泉市| 阿合奇县| 辉南县| 来凤县| 乐业县| 积石山| 响水县| 咸丰县| 衡阳市| 新泰市|