Log 11==引用

關鍵代碼設計說明

公共變量定義及說明

        sbit Sel0=P2^0;//                   

        sbit Sel1=P2^1;//

        sbit Sel2=P2^2;//位選的三個引腳控制位

        uchar show_w1;

        uchar show_w2;

        uchar show_w3;

        uchar show_w4;

        uchar show_w5;

        uchar show_w6;

        uchar show_w7;

        uchar show_w8;//show_wi(i=1,2,3,4,……,8)分別是對應左到右的各個數碼管上的顯示的數字

        uchar flag;//分頻作用,同時用作位選下標

        uchar count;//分頻作用的變量

        uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,

                                        0x39,0x5e,0x79,0x71,0x40,0x00}; //段選,顯示0-f

        uchar weixuan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //位選,選擇是0-7中的一個數碼管            **3.2 Init****():完成初始化配置;**

(1)P0和P2口需要設置成推挽模式輸出,以驅動LED數碼管正常顯示。

P2M1=0x00; P2M0=0xff; P0M1=0x00; P0M0=0xff;

(2)TMOD=0x01; //定時器0采用模式1

(3)打開中斷并允許定時器0中斷

                        EA=1;//打開總中斷

                        ET0=1;//允許定時器0中斷    

                        TR0=1;//啟動定時器0

(4)設置定時器初始值

           TH0=(65535-1000)/256;  TL0=(65535-1000)%256;

    (5)設置位選位flag初始值為0;

(6)為每個數碼管要顯示的內容賦初值

show_w1=0;
show_w2=1;
show_w3=2;
show_w4=3;
show_w5=4;
show_w6=5;
show_w7=6;
show_w8=7;

void timer0() interrupt 1

當定時器0初始值不斷加一最終溢出時激發的處理方法。

        (1)       重設TH0、TL0;

        (2)       flag加一;如果flag等于8,則賦值flag為0

        (3)       P0要顯示的值為0

        (4)       P2為位選結果,下標為flag。

        (5)       如果位選為0,則顯示段選下標為show_w1%10對應的數值;如果位選為1,則顯示段選下標為show_w2%10對應的數值,以此類推。由于定時時間為1ms用于處理顯示內容,而下一個1ms很快就會到,因此,雖然實際上并不是同時選通相應的數碼管位,但是由于人眼有時延,因此感覺是同時顯示。

void main()

主體功能,主要用于控制數碼管循環顯示

(1) 調用Init()完成程序初始化;

(2) 單純一個死循環即可

寄存器知識補充說明

MCS51系列的單片機通常有2個16位可編程定時/計數器,即定時器0和1。MCS52系列還有一個定時/計數器2。可編程的意思是指其功能(如工作模式、定時時間、啟動方式等)可由指令來確定和改變。通常都是賦值指令給相關的寄存器。與定時/計數器相關的有兩個特殊功能寄存器(模式控制寄存器TMOD和控制寄存器TCON)。且定時器往往在中斷中使用,以便當時間到了完成相應處理。MCS51單片機定時/計數器工作原理示意圖如圖6所示。

image

MCS51單片機定時/計數器工作原理示意圖

每個16位定時/寄存器又分別由兩個8位專用寄存器組成。其中TH0、TL0(對應定時器0)、TH1、TL1(對應定時器1),其訪問地址依次為8AH-8DH。它們可單獨訪問,主要用于裝載定時或計數的初始值。

定時/計數器0和1要正常工作,需要先設置好8位模式控制寄存器TMOD(89H)和8位控制寄存器TCON(88H)。TMOD主要用于設定定時/計數器的工作模式;TCON主要用于控制定時/計數器的啟動/停止,保存T0、T1的溢出和中斷標志。當定時器工作在計數方式時,外部事件可通過引腳P34(對應T0)或P35(對應T1)進行輸入。本程序使用的是內部計時及相應處理,不是外部事件激活。

定時計數器工作原理:

16位的定時器/計數器實質上就是一個加1計數器。當定時器/計數器為定時工作方式時,計數器的加1信號由振蕩器的12分頻信號產生;每過一個機器周期,計數器加1,直至計滿溢出為止。因此,定時器的定時時間與系統的振蕩頻率有關。

一個機器周期等于12個振蕩周期,所以計數頻率fcount=1/12osc。如果晶振為12MHz,則計數周期為:T=1/(12×106)Hz×1/12=1μs。這是最短的計數周期。若要延長定時時間,則需要改變定時器的初值,根據初始值需要選擇適當的定時器長度(如8位、13位、16位等)。當定時器/計數器為計數工作方式時,通過引腳T0和T1對外部信號計數,外部脈沖下降沿將觸發計數。若一個機器周期采樣值為1,下一個機器周期采樣值為0,則計數器加1。此后的機器周期S3P1期間,新的計數值裝入計數器。所以檢測一個由1至0的跳變需要兩個機器周期,故外部事件的最高計數頻率為振蕩頻率的1/24。例:如果選用12MHz晶振,則最高計數頻率為0.5MHz。雖然對外部輸入信號的占空比無特殊要求,但為了確保某給定電平在變化前至少被采樣一次,外部計數脈沖的高電平與低電平保持時間均需在一個機器周期以上。

當CPU用軟件給定時器設置了某種工作方式之后,定時器就會按設定的工作方式獨立運行,不再占用CPU的操作時間,除非定時器計滿溢出,才可能中斷CPU當前操作。CPU也可以重新設置定時器工作方式,以改變定時器的操作。

在定時器/計數器開始工作之前,CPU必須將一些命令(稱為控制字)寫入定時/計數器。將工作模式控制字寫入模式控制寄存器,工作狀態字(或相關位)寫入控制寄存器,并給定時/計數器賦初值。

定時器賦初始值計算:

如果需要需要定時為50MS,則計算方式如下:如果晶振是12MHZ,則機器周期為12MHz除以12,就是1MHz,每秒1000000次機器周期,那么50ms就是50000次機器周期。65536-50000=15536(3cb0),TH0=0x3c,TL0=0xb0。1ms就是1000次機器周期。(65536-1000)/256是高位,(65536-1000)%256是低位。

TMOD寄存器的設置依據如圖7所示。

image

TMOD寄存器設置依據

TCON寄存器的設置依據如圖8所示。

image

TCON寄存器設置依據

定時/計數器初始化基本流程如圖9所示。

image

定時/計數器初始化流程

中斷工作原理

中斷的概念: CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理(中斷發生);CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務);待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續處理事件A(中斷返回),這一過程稱為中斷。MCS51中斷信息如表2所示。

MCS51單片機中斷信息表

image

與中斷相關的寄存器包括:

①  中斷允許控制寄存器IE:

中斷允許控制寄存器IE

image
說明:

在用到中斷時,必須要開總中斷EA,即EA=1。

EX0(EX1):外部中斷允許控制位。EX0=1開外部0號中斷,EX0=0關閉外部0號中斷。

ET0(ET1):定時中斷允許控制位。ET0=1,開內部定時器0號中斷;ET0=0關閉定時器中斷0號開關。

ES: 串口中斷允許控制位。ES=1,開串口中斷;ES=0 關閉串口中斷。

②  中斷優先控制寄存器IP
image
說明:
  • l PS:串行口中斷優先級控制位。PS=1設定串行口為高優先級中斷;PS=0為低優先級中斷。

  • l PT1:T1中斷優先級控制位。PT1=1設定定時器T1為高優先級中斷;PT1=0為低優先級中斷。

  • l 外部中斷1優先級控制位。PX1=1設定定時器外部中斷1為高優先級中斷;PX1=0為低優先級中斷。

  • l PT0:T0中斷優先級控制位。PT0=1設定定時器T0為高優先級中斷;PT0=0為低優先級中斷。

  • l PX0:外部中斷0優先級控制位。PX0=1設定定時器外部中斷0為高優先級中斷;PX0=0為低優先級中斷。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370