導航:首頁 > 操作系統 > 單片機比較器

單片機比較器

發布時間:2022-02-12 14:25:25

單片機的比較器有什麼作用

單片機的比較器可以看作1位的ADC。很多場合需要檢測模擬電壓,比如一個濕度報警器,感測器模擬信號經過放大後直接接在比較器輸入端,跟參考電壓比較,當大小發生變化時,就可以輸出邏輯0、1,單片機檢測這個電平就可以進行相應的處理了。這樣電路設計起來方便一些。

❷ 帶比較器的單片機做AD能行嗎

//這是一個STC單片機用比較器做AD的官網常式。可以參考一下
#define MAIN_Fosc 22118400L //定義主時鍾
#define BaudRate1 9600ul //定義波特率
#define ADC_SCALE 50000 //ADC滿量程, 根據需要設置
#include "STC15Fxxxx.H"

/************* 本地常量聲明 **************/

//CMPCR1

#define CMPEN 0x80 //1: 允許比較器, 0: 禁止,關閉比較器電源
#define CMPIF 0x40 //比較器中斷標志, 包括上升沿或下降沿中斷, 軟體清0
#define PIE 0x20 //1: 比較結果由0變1, 產生上升沿中斷
#define NIE 0x10 //1: 比較結果由1變0, 產生下降沿中斷
#define PIS 0x08 //輸入正極性選擇, 0: 選擇內部P5.5做正輸入, 1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
#define NIS 0x04 //輸入負極性選擇, 0: 選擇內部BandGap電壓BGv做負輸入, 1: 選擇外部P5.4做輸入.
#define CMPOE 0x02 //1: 允許比較結果輸出到P1.2, 0: 禁止.
#define CMPRES 0x01 //比較結果, 1: CMP+電平高於CMP-, 0: CMP+電平低於CMP-, 只讀
//CMPCR2

#define INVCMPO 0x80 //1: 比較器輸出取反, 0: 不取反
#define DISFLT 0x40 //1: 關閉0.1uF濾波, 0: 允許
#define LCDTY 0x00 //0~63, 比較結果變化延時周期數
#define TIM_16BitAutoReload 0

#define TIM_16Bit 1
#define TIM_8BitAutoReload 2
#define TIM_16BitAutoReloadNoMask 3
#define Pin0 0x01 //IO引腳 Px.0

#define Pin1 0x02 //IO引腳 Px.1
#define Pin2 0x04 //IO引腳 Px.2
#define Pin3 0x08 //IO引腳 Px.3
#define Pin4 0x10 //IO引腳 Px.4
#define Pin5 0x20 //IO引腳 Px.5
#define Pin6 0x40 //IO引腳 Px.6
#define Pin7 0x80 //IO引腳 Px.7
#define PinAll 0xFF //IO所有引腳
/************* 本地變數聲明 **************/

sbit P_ADC = P1^2; //P1.2 比較器轉IO輸出端
u16 adc; //ADC中間值, 用戶層不可見
u16 adc_ty; //ADC計數周期, 用戶層不可見
u16 adc_value; //ADC值, 用戶層使用
bit adc_ok; //ADC結束標志, 為1則adc_value的值可用. 此標志給用戶層查詢,並且清0
/************* 本地函數聲明 **************/

void TxString(u8 *puts);
void main(void)

{
u8 i;
u8 tmp[5];
//IO口初始化

P1n_push_pull(Pin2); //P1.2設置為push-pull output
P5n_pure_input(Pin4+Pin5); //P5.4 P5.5設置為高阻輸入
//比較器初始化

CMPCR1 = 0;
CMPCR2 = 20; //比較結果變化延時周期數, 0~63
CMPCR1 |= CMPEN; //允許比較器 ENABLE,DISABLE
// CMPCR1 |= PIE; //允許上升沿中斷 ENABLE,DISABLE
// CMPCR1 |= NIE; //允許下降沿中斷 ENABLE,DISABLE
// CMPCR1 |= PIS; //輸入正極性選擇, 0: 選擇內部P5.5做正輸入, 1: 由ADCIS[2:0]所選擇的ADC輸入端做正輸入.
CMPCR1 |= NIS; //輸入負極性選擇, 0: 選擇內部BandGap電壓BGv做負輸入, 1: 選擇外部P5.4做輸入
// CMPCR1 |= CMPOE; //允許比較結果輸出到P1.2, ENABLE,DISABLE
// CMPCR2 |= INVCMPO; //比較器輸出取反, ENABLE,DISABLE
CMPCR2 |= DISFLT; //內部0.1uF濾波, ENABLE,DISABLE
//定時器0 初始化

TMOD &= ~0x0f;
Timer0_16bitAutoReload(); //設置為16位自動重裝模式
Timer0_1T(); //設置為1T模式
ET0 = 1; //允許中斷
PT0 = 1; //高優先順序中斷
TH0 = (u8)((65536 - MAIN_Fosc / 100000ul)>>8); //重裝值 100KHZ, 10us, 65536 - (MAIN_Fosc)/100000
TL0 = (u8)( 65536 - MAIN_Fosc / 100000ul);
TR0 = 1; //開始運行
//串口1初始化

S1_USE_P30P31(); //UART1 使用P30 P31口 默認
// S1_USE_P36P37(); //UART1 使用P36 P37口
// S1_USE_P16P17(); //UART1 使用P16 P17口
S1_8bit(); //8位數據,波特率可變

S1_RX_Enable(); //允許接收
S1_TXD_RXD_OPEN(); //將TXD與RXD連接中繼斷開 默認
S1_BRT_UseTimer2(); //使用Timer2做波特率發生器
ES = 0; //禁止中斷, 使用查詢發送
Timer2_1T(); //Timer2 1T模式, 固定為16位自動重裝

T2L = (65536 - (MAIN_Fosc/4/BaudRate1)); //設置波特率重裝值
T2H = (65536 - (MAIN_Fosc/4/BaudRate1))>>8;
Timer2_Run(); //允許定時器2計數
EA = 1; //允許全局中斷

TxString("\r\n使用比較器做ADC例子\r\n"); //SUART1發送一個字元串

while (1)

{
if(adc_ok) //等待ADC結束
{
adc_ok = 0; //清除ADC已結束標志
TxString("ADC = "); //轉十進制
tmp[0] = adc_value / 10000 + '0';
tmp[1] = adc_value % 10000 / 1000 + '0';
tmp[2] = adc_value % 1000 / 100 + '0';
tmp[3] = adc_value % 100 / 10 + '0';
tmp[4] = adc_value % 10 + '0';
for(i=0; i<4; i++) //消無效0
{
if(tmp[i] != '0') break;
tmp[i] = ' ';
}
for(i=0; i<5; i++) //發串口
{
TI = 0;
SBUF = tmp[i];
while(!TI);
TI = 0;
}
TxString("\r\n");
}
}
}
void TxString(u8 *puts) //發送一個字元串

{
for (; *puts != 0; puts++) //遇到停止符0結束
{
TI = 0;
SBUF = *puts;
while(!TI);
TI = 0;
}
}
/********************* Timer0中斷函數************************/

void timer0_int (void) interrupt TIMER0_VECTOR
{
if((CMPCR1 & CMPRES) == 0) P_ADC = 0; //比較器輸出高電平
else //P_ADC輸出低電平, 給負輸入端做反饋.
{
P_ADC = 1; //P_ADC輸出高電平, 給負輸入端做反饋.
adc ++; //ADC計數+1
}
if(--adc_ty == 0) //ADC周期-1, 到0則ADC結束

{
adc_ty = ADC_SCALE; //周期計數賦初值
adc_value = adc; //保存ADC值
adc = 0; //清除ADC值
adc_ok = 1; //標志ADC已結束
}
}

❸ 電壓比較器就是單片機吧

電壓比較器與單片機沒有任何關系,它實際上是一個電壓增益無限大的同相比例放大電路,是模擬電路中的一個東西,單片機是數字電路的。

❹ PIC單片機中PWM和比較器是怎麼個意思啊!

PWM是脈寬調節,比較器一般是電壓比較,兩者關系不大

❺ 請問C8051F單片機中的比較器的會差電壓是什麼意思啊 ADC的轉換時候的「跟蹤保持」是什麼意思啊

比較器兩輸入端電壓大於回差電壓值時才會使輸出端發生變化。

❻ 單片機的比較器有什麼作用雙時鍾和單時鍾有啥區別

單片機中的比較器一般是配合Time0和time1使用,但前題是你的單片機必需帶有CCP模塊。
它的作用有二,其一是為了捕捉像紅外遙控的編碼信號;其二是為了產生PWM信號;

❼ 是不是所有的單片機都包括內部比較器

不是所有的都有
單片機和晶元的關系?不明白你想問什麼...

❽ 單片機比較器是什麼

單片機的比較器可以看作1位的adc。很多場合需要檢測模擬電壓,比如一個濕度報警器,感測器模擬信號經過放大後直接接在比較器輸入端,跟參考電壓比較,當大小發生變化時,就可以輸出邏輯0、1,單片機檢測這個電平就可以進行相應的處理了。這樣電路設計起來方便一些。

❾ 帶電壓比較器的單片機有哪些

AVR的單片機是使用復用器來為一個電壓比較器選擇輸入,PIC有的單片機就有多個電壓比較器,MSP430的就不清楚了。

❿ 單片機自帶的比較器如何使用

比較器的引腳,先要接上外設。
然後由程序,讀出寄存器,是1是0,進行分支,即可。

閱讀全文

與單片機比較器相關的資料

熱點內容
不用電腦安卓手機怎麼降級 瀏覽:979
lib文件編譯完可以刪除嗎 瀏覽:888
2020江西買車購置稅演算法 瀏覽:222
百度已解壓文件在哪 瀏覽:88
小米安卓turbo手勢怎麼用 瀏覽:941
php框架作用 瀏覽:35
python消息自定義 瀏覽:949
四川內江電信寬頻伺服器雲主機 瀏覽:953
編譯後的源文件到哪找 瀏覽:956
小米多模網關如何接入aqaraapp 瀏覽:915
python為什麼true 瀏覽:591
androidfonts 瀏覽:341
51單片機外接電源維修 瀏覽:337
文件解壓軟體是幹嘛的 瀏覽:936
linux設置伺服器端ip地址 瀏覽:358
如何把代碼編譯出來 瀏覽:129
python之禪中文版 瀏覽:752
androidbluetooth開發 瀏覽:681
如何買美股什麼app可以買美股 瀏覽:509
分享緩解壓力的做法 瀏覽:385