?? wcp1.#1
字號:
參考程序B : WCP1.c 此程序可完成CP1比較器的比較功能,比較器基準信號來自于VREF引腳,比較器響應后將產中斷, 在主程序中設定P4=0FH,.在中斷程序中對P4求反,同時發光二極管的狀態也會改變.比較器1上升沿中斷服務程序 ,鳴笛二次,比較器1下降沿中斷服務程序 ,鳴笛一次.
#include <c8051f020.h>
#include <intrins.h>
sbit BELL = P3^5;
void PORT_Init (void);
void CPT1_Init (void);
void CPT1_ISR (void);
void CPT1B_ISR (void);
void sleep_ms(unsigned int count);
void main (void) {
WDTCN = 0xde;
WDTCN = 0xad; //禁止看門狗定時器
P4=0x0f;
PORT_Init ();
CPT1_Init ();
EA=1;
while (1)
{
}
}
void CPT1_Init (void)// 比較器1初始化
{
EIE1 |=0xC0; //比較器CP1下降沿/上升沿中斷允許位置1,允許CP1RIF標志位/CP1FIF標志位的中斷請求.
CPT1CN =0x8F; //CP1允許,CP1正/負回差設定為10mv
REF0CN |= 0x01; //用基準電壓作為比較信號基準,CP1N接VREF
}
void PORT_Init (void) // 通用I/O口及交叉開關初始化
{
XBR2 = 0x40;
XBR1 =0x01; //將CP1輸出端引到P0.1腳
XBR0 =0x80; //將CP0輸出端引到P0.0腳
P74OUT |= 0x03; //P4為推挽輸出
}
void CPT1_ISR (void) interrupt 12 //比較器1下降沿中斷服務程序
{ //鳴笛一次
CPT1CN &=~ 0x30;
P4 = ~P4; //發光二極管的狀態改變
BELL=0;
sleep_ms(100);
BELL=1;
}
void CPT1B_ISR (void) interrupt 13 //比較器1上升沿中斷服務程序
{ //鳴笛二次
CPT1CN &=~ 0x30;
P4 = ~P4; //發光二極管的狀態改變
BELL=0; //鳴笛
sleep_ms(100);
BELL=1;
sleep_ms(100);
BELL=0; //鳴笛
sleep_ms(100);
BELL=1;
}
void sleep_ms(unsigned int count)
{
unsigned char ii,jj;
for(ii=0;ii<count;ii++)
{
for(jj=0;jj<250;jj++)
_nop_();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -