




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
劉鎮(zhèn)章zhenzhang.liu@第9講《單片機(jī)技術(shù)與C語言程序設(shè)計(jì)技術(shù)》22三月2024單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì)主要內(nèi)容
一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法 二、過程控制(PID)
三、單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì)22三月2024
一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法
單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法:
1、主控程序;
2、初始化;
3、中斷處理;
4、定時(shí)控制;
5、各模塊程序的調(diào)用和參數(shù)傳遞。22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法1、主控程序voidmain(void){
… while(1) {
…. }
…}22三月20241、主控程序:例voidmain(void){ … while(1)
{if(u_second250>40) //10ms進(jìn)入1次
{u_second250=0;
m_second10++;
if(m_second10%50==0) //0.5s進(jìn)入1次
display_flash=(display_flash)?0:1;//閃標(biāo)志
display_num(num); //顯示
key=read_key();//讀鍵
if(key==KEY_FUN) //鍵處理
{…}
elseif(key==KEY_UP&&sys_state==STOP) { …}
elseif(key==KEY_DOWN&&sys_state==STOP) { …} }
…
}}22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法2、初始化
初始化程序一般處理內(nèi)容:
1、I/O口
2、定時(shí)器
3、A/D 4、外部中斷
5、看門狗
6、從EEPROM讀設(shè)置參數(shù)
7、設(shè)置開機(jī)參數(shù)22三月20242、初始化:例voidsystem_init(void){ PORTB=0x07; //B口設(shè)置 DDRB=0xFF; PORTC=0x38; //C口設(shè)置
DDRC=0xC0; PORTD=0x04; //D口設(shè)置
DDRD=0xFB;
OCR1A=31; //初始化定時(shí)器1
TIMSK1|=(1<<OCIE1A);
TCCR1A=0x00;
TCCR1B=(1<<WGM12)|(1<<CS11);
EICRA=0x03; //初始化外部中斷0
EIMSK=0x01;//
SREG|=0x80; //開全局中斷
ADMUX=0x60; //設(shè)置AD
ADCSRA=0xB3; //
ADCSRA|=(1<<ADSC); //啟動(dòng)AD
EEPROM_READ(EEPROM_ADDR,run_all_time); //讀EEPROM if(run_all_time==0||run_all_time>99)
{run_all_time=RUN_ALLTIME; //設(shè)置運(yùn)行時(shí)間初始值
EEPROM_WRITE(EEPROM_ADDR,run_all_time);
} }22三月20242、初始化:例voidmain(void){ system_init(); //初始化
… while(1) {
…. }
…}22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法3、中斷處理
中斷處理內(nèi)容:
1、模塊中斷設(shè)置
2、全局中斷設(shè)置
3、中斷處理函數(shù)22三月20243、中斷處理:例:中斷設(shè)置voidsystem_init(void){ PORTB=0x07; //B口設(shè)置 DDRB=0xFF; PORTC=0x38; //C口設(shè)置
DDRC=0xC0; PORTD=0x04; //D口設(shè)置
DDRD=0xFB;
OCR1A=31; //初始化定時(shí)器1
TIMSK1|=(1<<OCIE1A);
TCCR1A=0x00;
TCCR1B=(1<<WGM12)|(1<<CS11);
EICRA=0x03; //初始化外部中斷0
EIMSK=0x01;
SREG|=0x80; //開全局中斷
ADMUX=0x60; //設(shè)置AD
ADCSRA=0xB3;
ADCSRA|=(1<<ADSC); //啟動(dòng)AD
EEPROM_READ(EEPROM_ADDR,run_all_time); //讀EEPROM if(run_all_time==0||run_all_time>99)
{run_all_time=RUN_ALLTIME; //設(shè)置運(yùn)行時(shí)間初始值
EEPROM_WRITE(EEPROM_ADDR,run_all_time);
}
}22三月20243、中斷處理:例:中斷處理函數(shù)#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;
…}#pragmainterrupt_handlerint0:2 voidint0(){ voltage_0=1;}
22三月20243、中斷處理:例:中斷處理函數(shù)unsignedintu_second250=0;unsignedcharvoltage_0=0;voidmain(){ system_init();
while(1)
{ if(u_second250>40) //10ms進(jìn)入一次
{ …} }}#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;
…}#pragmainterrupt_handlerint0:2 voidint0(){ voltage_0=1;}
22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法4、定時(shí)控制
定時(shí)控制內(nèi)容:
1、初始化
2、中斷處理函數(shù)
3、定時(shí)使用22三月20244、定時(shí)控制:例:定時(shí)器設(shè)置voidsystem_init(void){ PORTB=0x07; //B口設(shè)置 DDRB=0xFF; PORTC=0x38; //C口設(shè)置
DDRC=0xC0; PORTD=0x04; //D口設(shè)置
DDRD=0xFB;
OCR1A=31; //初始化定時(shí)器1
TIMSK1|=(1<<OCIE1A);
TCCR1A=0x00;
TCCR1B=(1<<WGM12)|(1<<CS11);
EICRA=0x03; //初始化外部中斷0
EIMSK=0x01;
SREG|=0x80; //開全局中斷
ADMUX=0x60; //設(shè)置AD
ADCSRA=0xB3;
ADCSRA|=(1<<ADSC); //啟動(dòng)AD
EEPROM_READ(EEPROM_ADDR,run_all_time); //讀EEPROM if(run_all_time==0||run_all_time>99)
{run_all_time=RUN_ALLTIME; //設(shè)置運(yùn)行時(shí)間初始值
EEPROM_WRITE(EEPROM_ADDR,run_all_time);
}
}22三月20243、中斷處理:例:定時(shí)器處理unsignedintu_second250=0;unsignedcharvoltage_0=0;voidmain(){ system_init();
while(1)
{ if(u_second250>40) //10ms進(jìn)入一次
{ …} }}#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;
…}22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法5、各模塊程序的調(diào)用和參數(shù)傳遞。
函數(shù)調(diào)用和參數(shù)傳遞:
A、1個(gè)參數(shù)的傳遞
B、N個(gè)參數(shù)調(diào)用傳送
C、多個(gè)參數(shù)返回傳送
D、N個(gè)參數(shù)返回傳送
E、全局變量
F、靜態(tài)變量就是函數(shù)調(diào)用22三月2024A、1個(gè)參數(shù)的傳遞例:調(diào)用voiddisplay_num(unsignedcharnum){ …}voidmain(void){ unsignedcharnum;
… while(1)
{if(u_second250>40) //10ms進(jìn)入1次
{u_second250=0;
m_second10++;
if(m_second10%50==0) //0.5s進(jìn)入1次
display_flash=(display_flash)?0:1;//閃標(biāo)志
display_num(num); //顯示
… } }}22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法A、1個(gè)參數(shù)的傳遞例:返回unsignedcharread_key(){ staticunsignedcharkey_time=0;
staticunsignedcharkey_num=0;
unsignedcharkey_n,return_val=0;
key_n=~(PINC|ALL_KEY);
if(key_n==key_num)
{if(key_time<10)
key_time++;
elseif(key_time==10)
{key_time++;
return_val=key_num;
}
}
else{key_time=0; }
key_num=key_n;
returnreturn_val;}
voidmain(void){ … while(1){if(u_second250>40) {u_second250=0;
key=read_key(); if(key==KEY_FUN)//鍵處理
{…}
elseif(key==KEY_UP) { …}
elseif(key==KEY_DOWN) {…} } }
…}
22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法B、N個(gè)參數(shù)調(diào)用傳送例:數(shù)組(指針)unsignedintget_average(unsignedcharn, unsignedintad_value[]){ unsignedintsum,max,min,i; sum=0; max=0; min=0xffff; for(i=0;i<n;i++) { if(ad_value[i]>max) max=ad_value[i]; if(ad_value[i]<min) min=ad_value[i]; sum=sum+ad_value[i]; } sum=(sum–max–min)/(n-2); returnsum;} voidmain(void){ unsignedintad_val[20]; io_init(); while(1) { … get_ad() ad_value(20,ad_val);
…
}}22三月2024C、多個(gè)參數(shù)返回傳送例:按引用方式swap(int&p1,int&p2){ inttemp;temp=p1;p1=p2;p2=temp;}voidmain(){ … inta=5,b=6; if(a<b)swap(a,b);
…}22三月2024voideprom_read(unsignedintaddr, unsignedcharnumber,
unsignedchar*p_buff){ while(EECR&(1<<EEWE)); while(number--) { EEAR=addr++; EECR|=(1<<EERE); *p_buff++=EEDR; }}
voidmain(void){ unsignedchartemp[10]; io_init();
eprom_read(0x10,10,temp);
…
}一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法D、N個(gè)參數(shù)返回傳送例:指針(數(shù)組)22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法E、全局變量例unsignedintu_second250=0;unsignedcharvoltage_0=0;voidmain(){ system_init();
while(1)
{ if(u_second250>40) //10ms進(jìn)入一次
{ …} }}#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;
…}22三月2024一、單片機(jī)軟件系統(tǒng)設(shè)計(jì)方法F、靜態(tài)變量例:按鍵防抖動(dòng)unsignedcharread_key(){ staticunsignedcharkey_time=0;
staticunsignedcharkey_num=0; unsignedcharkey_n; key_n=~(PINC|ALL_KEY);
if(key_n==key_num)
{if(key_time<10) key_time++; elseif(key_time==10) {key_time++;
returnkey_num; } } else{key_time=0;}
key_num=key_n;
return0;}22三月2024
二、過程控制(PID)22三月2024二、過程控制(PID)例:直熱式電熱水器控制(PID)Setpoint:設(shè)置溫度Output:出水溫度Process:加熱電阻原理圖:22三月202422三月2024二、過程控制(PID)
溫度控制方法: 熱水器總功率為:6000KW,分成3段:
RE1控制2000W(繼電器),
RE2控制2000W(繼電器),
PWM控制2000W(可控硅)。 通過PWM控制,可以實(shí)現(xiàn)溫度在0~2000W內(nèi)連續(xù)控制; 當(dāng)功率在2000W以上時(shí),接通RE1,可以在2000W~
4000W內(nèi)連續(xù)調(diào)節(jié)功率,當(dāng)功率在4000W以上時(shí),再接通RE2,可以在4000W~
6000W內(nèi)連續(xù)調(diào)節(jié)功率。 通過以上控制,可以實(shí)現(xiàn)熱水器輸出功率分級連續(xù)可調(diào),實(shí)現(xiàn)熱水器水溫自動(dòng)控制。
22三月2024二、過程控制(PID)
程序舉例:
22三月2024
三、單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì)22三月2024三、單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì)
單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì):
1、采用模塊化設(shè)計(jì)方法;
2、首先單獨(dú)調(diào)試好輸入/輸出模塊;
3、構(gòu)建基本程序框架;
4、逐個(gè)添加功能模塊;
5、完成總體控制;
6、測試系統(tǒng)。22三月2024三、單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì)
2、首先單獨(dú)調(diào)試好輸入/輸出模塊例:室內(nèi)空調(diào)控制系統(tǒng)。
22三月2024一、監(jiān)控系統(tǒng)功能
例:室內(nèi)空調(diào)控制系統(tǒng)。1、從非技術(shù)角度考慮系統(tǒng)功能;2、確定系統(tǒng)的輸入檢測功能;3、確定系統(tǒng)的輸出控制功能;4、確定系統(tǒng)的控制方式;1、遙控2、自動(dòng)溫控3、模式:制冷、制熱、抽濕、自動(dòng)4、風(fēng)向22三月2024一、監(jiān)控系統(tǒng)功能
例:室內(nèi)空調(diào)控制系統(tǒng)。1、從非技術(shù)角度考慮系統(tǒng)功能;2、確定系統(tǒng)的輸入檢測功能;3、確定系統(tǒng)的輸出控制功能;4、確定系統(tǒng)的控制方式;1、遙控2、溫度3、按鍵22三月2024一、監(jiān)控系統(tǒng)功能
例:室內(nèi)空調(diào)控制系統(tǒng)。1、從非技術(shù)角度考慮系統(tǒng)功能;2、確定系統(tǒng)的輸入檢測功能;3、確定系統(tǒng)的輸出控制功能;4、確定系統(tǒng)的控制方式;1、壓縮機(jī)2、吹風(fēng)電機(jī):4級3、風(fēng)向電機(jī)4、抽濕加熱器22三月2024一、監(jiān)控系統(tǒng)功能
例:室內(nèi)空調(diào)控制系統(tǒng)。1、從非技術(shù)角度考慮系統(tǒng)功能;2、確定系統(tǒng)的輸入檢測功能;3、確定系統(tǒng)的輸出控制功能;4、確定系統(tǒng)的控制方式;1、PID溫度控制2、自動(dòng)模式算法22三月2024輸入/輸出電路:1、遙控電路2、溫度電路3、按鍵電路4、壓縮機(jī)控制電路5、吹風(fēng)控制電路6、風(fēng)向控制電路7、加熱控制電路讀紅外模塊紅外編碼識別模塊讀溫度模塊讀按鍵模塊壓縮機(jī)控制(PID)模塊吹風(fēng)電機(jī)控制模塊風(fēng)向電機(jī)控制模塊加熱控制模塊基本模塊:初始化模塊定時(shí)器模塊顯示模塊三、單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì)22三月2024三、單片機(jī)監(jiān)控系統(tǒng)軟件設(shè)計(jì)
3、構(gòu)建基本程序框架例:室內(nèi)空調(diào)控制系統(tǒng)。
unsignedintu_second250=0;voidmain(){ system_init();
while(1)
{ if(u_second250>40) //10ms進(jìn)入一次
{ …} }}#pragmainterrupt_handlertimer1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2017-2018學(xué)年化學(xué)蘇教必修2講義專題1微觀結(jié)構(gòu)與物質(zhì)的多樣性專題核心素養(yǎng)整合1
- 廣東省珠海市普通高中2017-2018學(xué)年高一數(shù)學(xué)1月月考試題08
- 2018-2019學(xué)年高中一輪復(fù)習(xí)化學(xué)專題綜合檢測(十一)物質(zhì)結(jié)構(gòu)與性質(zhì)
- 2025年真空管太陽集熱器合作協(xié)議書
- 基于解空間樹的組合測試并行測試算法的研究
- 天津市某二級醫(yī)院2013-2015年糖尿病患者用藥現(xiàn)狀及合理性分析
- 央企人力資源精細(xì)化管理建設(shè)路徑
- 個(gè)人承包耕地合同范本
- 2024高中化學(xué)第四章生命中的基礎(chǔ)有機(jī)化學(xué)物質(zhì)第一節(jié)油脂綜合訓(xùn)練含解析新人教版選修5
- 供應(yīng)煤矸石合同范例
- 觸電事故與急救理論知識考核試題及答案
- ABC法則教學(xué)講解課件
- 光催化原理(經(jīng)典)課件
- 如何上好一堂課(課件)
- 《土樓回響》第五樂章《客家之歌》高中音樂優(yōu)質(zhì)課課件
- 人美版九年級(初三)美術(shù)下冊全套課件
- 乘客電梯安裝作業(yè)指導(dǎo)書
- 2022年4月自考英語二試題及答案含評分標(biāo)準(zhǔn)
- 鐵路工務(wù)安全規(guī)則+鐵路線路修理規(guī)則
- DBJ51-T 193-2022 四川省金屬與石材幕墻工程技術(shù)標(biāo)準(zhǔn)
- 叉車-復(fù)審證明
評論
0/150
提交評論