新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > C8051F320-時鐘和4in1八段管

C8051F320-時鐘和4in1八段管

作者: 時間:2012-08-16 來源:網(wǎng)絡(luò) 收藏

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

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

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

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

四、程序?qū)崪y

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

初始化:

CKCON=0x00; //D1D0定了分頻數(shù),就是在系統(tǒng)分頻振蕩器后,定時器還能分頻一次。
//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;

結(jié)果,成功

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

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

中斷多一句清除指令 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函數(shù)中查詢T3中斷標志位,手動跳轉(zhuǎn)到中斷程序,可以運行,但是速度慢得沒天理。

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

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

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


上一頁 1 2 下一頁

關(guān)鍵詞: C8051F320 時鐘 八段管

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉