4-14 類比中斷 HT66F70A
比較器結構
CP1C Bit 7、[3:1] : 未使用,讀取時回傳0 Bit 6 : C1EN 比較器開/關控制位元 0 : 關閉 1 : 開啟 (當C0EN為0,即使將模擬電壓加至輸入端,比較器也將被關閉且不消耗功率。) Bit 5 : C1POL 比較器輸出極性控制位元 0 : 直接輸出 1 : 反向後輸出 Bit 4 : C1OUT 比較器輸出位元 C0POL=0 C0POL=1 0: C0+ < C0- 0: C0+ > C0- 1: C0+ > C0- 1: C0+ < C0- Bit 0 : C1HYEN 滯後控制位元 Bit 7 6 5 4 3 2 1 NAME - C1EN C1POL C1OUT C1HYEN
CP1C #include <HT66F70A.h> #define CHECK _pg1 #define CHECKC _pgc1 #define LED_Port _pc #define LED_PortC _pcc typedef unsigned char u8; typedef unsigned short u16; const u8 SEG_TAB[] = { //七段顯示器顯示碼(共陰) 0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x67}; void Delay100us(u16); //函式原型宣告 u8 i=0,k=0;
主程式 void main() { _wdtc=0b10101111; //關閉看們狗計時器 LED_PortC=0x00; //規劃LED_Port為輸出模式 LED_Port=0x00; //設定LED_Port初值 CHECKC=0x00; //規劃CHECK為輸出模式 CHECK=0; //設定CHECK初值 _pf1=_pf0=1; //規劃pf0、pf1為輸出模式 _pfs0=0b01110111; //設定pf0、pf1腳位功能 _pgs0=0b00010000; //設定pg1腳位功能 _cp1c=0b01010000; _cp1f=0; _c1out=0; _emi=1; _cp1e=1; //致能中斷致能位元 while(1) { } } void Delay100us(u16 del) //延遲del*200指令週期 { u16 i,j; //@fSYS=8MH,延遲del*100us for(i=0;i<del;i++) for(j=0;j<=25;j++) GCC_NOP();}
中斷副程式 DEFINE_ISR(ISR_CP1,0x10) { if(_c1out==1) { if(LED_Port!=0) //判斷光敏電阻狀態(亮) { do { LED_Port--; LED_Port=LED_Port>>1; Delay100us(3000); }while(LED_Port!=0); } } if(_c1out==0) { if(LED_Port!=0Xff) //判斷光敏電阻狀態(暗) { LED_Port=LED_Port<<1; LED_Port++; }while(LED_Port!=0Xff); _cp1f=0; //清除中斷旗標位元 }