久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

C8051F320-時鐘和4in1八段管

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年09月06日   【字體:

人都是自己折騰自己。

       C8051F320包含一個內部振蕩器,也可以采用其他方式提供振蕩。手頭沒有任何元器件,所以只考慮使用內部振蕩器。

一、時鐘設定

       系統復位時,默認使用內部振蕩器作為系統時鐘,出廠前已經將基頻定為12MHZ,可以根據需要對其進行分頻操作。 

分頻方法: 寄存器OSCICN 最低兩位 D1D0的值決定了分頻數,00~11分別為8分頻、4分頻、2分頻、不分頻。

                   此外,D7=1表示內部振蕩器使能,反之禁止內部振蕩器

                           D6=1內部振蕩器頻率準備好標志

                           D5=1強行掛起內部振蕩器

       寄存器OSCICL 內部振蕩器校準,D4~D0的數值決定了校準后的頻率偏差,計算方法由如下公式決定:


                                            
 

                     第二項的分母為基準頻率,第三項為D4~D0,浮動范圍0~31,根據這個公式,當基準設置為12M時,能夠設置的偏差很小。

                                          △T=0.0025×0.083us×(0~31)=0 ~ 0.0064325 us

                     以12Mhz為例,12M對應的周期為0.0833us,加上該偏差為0.0897625us,對應頻率為11.14M。

                     也就是說,當基準頻率為 12 Mhz時,最多可以調整為11.14M

                     以此類推。2分頻時,6Mhz,最多可以5.57M

                                       4分頻時,3Mhz,最多可以2.78M

                                       8分頻時,1.5Mhz,最多可以1.39M

 

 

二、八段管的一點小收獲

       偶然發現自己以前寫顯示程序實在是太老土了,display()鐵打不動就是選一個管,送個段碼,延時,選下一個管,段碼,延時,再選下一個管。。。  這樣一來顯示程序必定要消耗大量的時間在顯示程序上。當系統時序要求高時,這種寫法根本就是自殺行為。

      正確方法應該是,設置定時器在一個足夠小的時間上,比如10ms,利用一個變量保存中斷的次數。每次進入中斷,根據(變量%4)的值,來驅動一個管顯示數字,下一次中斷時切換下個管,以此類推。。

 

 

三、F320內部定時/計數器的使用

       芯片內部有4個定時計數器,其中T0T1與51兼容,T2T3只能定時不能計數,但可以實現16位自動重裝計數值。

       寄存器TMOD TH0 TL0 TH1 TL1 以及T0T1相應的啟停位中斷位不變。

新增部分:

       1、CKCON 時鐘控制器 復位值00H

            D7D6控制T3高低位的時鐘源,1為選擇系統時鐘,0為用戶設定。

            D5D4控制T2高低位的時鐘源,1為選擇系統時鐘,0為用戶設定。

            *如果設置為單個16位定時器,則D5D7無效

           D3D2作用類似,分別控制T1T0的時鐘源,1為系統時鐘,0為分頻時鐘,默認為分頻時鐘。其分頻系數由D1D0決定,

            00——12分頻  01——4分頻 10——48分頻 11——8分頻

      2、定時器T2

           和T0做個對照:

            TH0 —— TMR2H        TL0 —— TMR2L  

            TMOD —— TMR2CN (D4D3決定T2工作方式)

            TF0 —— TF2H(16位時,H起作用)/TF2L   ET0 —— IE.5  TR0 —— TR2(雙8位時,只能控制高八位定時器,低八位永遠工作)

            TF2LEN =1  低八位時鐘中斷允許位

            TMR2RLH   TMR2RLL 專用于高低八位的計數值重載

            設為2個八位時鐘時,共用一個中斷,必須在中斷程序中檢查對應的標志位才能確定是哪一個時鐘計數到,且標志位必須手動清零

            另有usb起始幀捕捉模式,暫時不研究

 細節: TMR2H 控制字  D7D6  為TF2H 、TF2L ,中斷標志

                                      D5       為 TF2LEN,定時器2低字節中斷允許位

                                      D4       為T2SOF 沒研究那部分,應該給0,表示禁用

                                      D3       為T2SPLIT  1表示雙8位,0表示單16位,均可自動重載計數值

                                      D2       為TR2,高八位時鐘啟動(16位時鐘不知道怎么啟動。。。。)

                         D1無用 D0        為T2外部時鐘選擇,需要與上面的CKCON對應,沒研究。

 

         小結:T2可以工作在3種方式下,單個16位時鐘,2個8位時鐘,USB起始幀捕捉。使用前,必須設置TM2RCN控制字的D4D3決定工作方式。還必須設置時鐘源,在CKCON和TMR2H都有涉及。

                   對于16位時鐘,計數值存放在TMR2H和TMR2L,有專門的重載寄存器TMR2RLH和TMR2RLL。啟動時可能是用TR2,開中斷用IE.5(ET2),計數到標志位叫TF2H,另有TF2L,必須專門在控制字的D5進行設置才能使用。

                   對于8位時鐘,和上面基本差不多,共用一個中斷。

                    

                  T3和T2沒啥區別,名字數字改改,中斷允許叫ET3,但位置不在IE,無所謂。

 

四、程序實測

1、T2   單16位,16位中斷實測

     初始化: 

   CKCON=0x00;             //D1D0定了分頻數,就是在系統分頻振蕩器后,定時器還能分頻一次。
                                    //D3D2比較爽,寫個0x0c,不分頻直接給時鐘用,很快。。。
  TMR2CN=0x00;         //D5不允許低8位中斷 D4禁止SOF D3單16位 D2暫不啟動 D0使用12分頻時鐘      
  TMR2L=0x78;
  TMR2H=0xEC;
  TMR2RLH =0xEC;
  TMR2RLL =0x78;
  EA=1;
  ET2=1;

    啟動:TR2=1; 

   中斷號 :5

   中斷里面必須加 TF2H=0;

    結果,成功

2、T2 單16位,允許低八位中斷,嘗試根據中斷標志決定處理或者不處理低八位。

    上面的初始化改一句 TMR2CN=0x20;             由于低八位計數到就中斷,且低八位中斷沒清除,分針又跑得飛快了

    中斷多一句清除指令 TF2L=0;                        秒針走很快,合理。因為每255就中斷一

    中斷最前面多一段       if(TF2L==1){TF2L=0;return;}     忽略低八位時鐘中斷,秒針正常了

3、T2雙8位,實在懶得測試了。    測試一下T3的中斷號 

      悲劇了,T3的寄存器都沒有定義!查資料。。。

 修正1  : 在頭文件里把TMR2CN的位定義復制一份,改成3,成功

 修正2  : 在頭文件里手動編寫EIE1的位定義

/*  EIE1  */
sbit ET3           = EIE1 ^ 7;
sbit ECP1        = EIE1 ^ 6;
sbit ECP0        = EIE1 ^ 5;
sbit EPCA0      = EIE1 ^ 4;
sbit EADC0C   = EIE1 ^ 3;
sbit EWADC0  = EIE1 ^ 2;
sbit EUSB0       = EIE1 ^ 1;
sbit ESMB0      = EIE1 ^ 0;

失敗,提示該地址無效?(invalid base address)

修正3: 直接用 EIE1 |= 0x80;  編譯通過

運行后還是不走,估計是中斷號有錯!!!

直接在main函數中查詢T3中斷標志位,手動跳轉到中斷程序,可以運行,但是速度慢得沒天理。

可見T3中斷確實不是這么用的,待查。。。。

還有一個猜測,是不是keil對interrupt 14不支持??

又多了個疑點,改回T2,同樣用查詢方式,手動跳轉,速度非常正常!看來T3的PDF沒有看是個嚴重錯誤!

關閉窗口

相關文章

主站蜘蛛池模板: 91精品亚洲| 99re在线视频 | 香蕉视频91| 国产一区在线视频 | 久久国产高清 | 欧美日产国产成人免费图片 | 欧美日韩国产精品一区 | 激情一区二区三区 | 成人亚洲性情网站www在线观看 | 日韩中出 | 香蕉视频在线播放 | 日韩欧美中文 | 亚洲久久| 亚洲欧洲成人 | 成人妇女免费播放久久久 | 日本福利视频免费观看 | 欧美国产一区二区 | 国产一级在线 | 国产亚洲一区二区三区 | 免费观看黄a一级视频 | 99精品视频在线观看免费播放 | 久久国产精品视频免费看 | 怡红院怡春院一级毛片 | 国产精品网址 | 婷婷色婷婷 | 在线观看中文字幕视频 | 久久久久久电影 | 中文字幕二区三区 | 麻豆精品久久久 | 日韩www | 亚洲91视频 | 中文字幕在线观看一区二区 | 国产一区二区电影 | 99热99| 最新伦理片 | 国产一区二区三区 | 国产精品国产三级国产aⅴ中文 | 在线播放国产一区二区三区 | 亚洲高清在线播放 | 99久久精品国产一区二区三区 | 国产亚洲欧美在线 |