第9讲-单片机系统软件设计_第1页
第9讲-单片机系统软件设计_第2页
第9讲-单片机系统软件设计_第3页
第9讲-单片机系统软件设计_第4页
第9讲-单片机系统软件设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

刘镇章zhenzhang.liu@第9讲《单片机技术与C语言程序设计技术》22三月2024单片机监控系统软件设计主要内容

一、单片机软件系统设计方法 二、过程控制(PID)

三、单片机监控系统软件设计22三月2024

一、单片机软件系统设计方法22三月2024一、单片机软件系统设计方法

单片机软件系统设计方法:

1、主控程序;

2、初始化;

3、中断处理;

4、定时控制;

5、各模块程序的调用和参数传递。22三月2024一、单片机软件系统设计方法1、主控程序voidmain(void){

… while(1) {

…. }

…}22三月20241、主控程序:例voidmain(void){ … while(1)

{if(u_second250>40) //10ms进入1次

{u_second250=0;

m_second10++;

if(m_second10%50==0) //0.5s进入1次

display_flash=(display_flash)?0:1;//闪标志

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一、单片机软件系统设计方法2、初始化

初始化程序一般处理内容:

1、I/O口

2、定时器

3、A/D 4、外部中断

5、看门狗

6、从EEPROM读设置参数

7、设置开机参数22三月20242、初始化:例voidsystem_init(void){ PORTB=0x07; //B口设置 DDRB=0xFF; PORTC=0x38; //C口设置

DDRC=0xC0; PORTD=0x04; //D口设置

DDRD=0xFB;

OCR1A=31; //初始化定时器1

TIMSK1|=(1<<OCIE1A);

TCCR1A=0x00;

TCCR1B=(1<<WGM12)|(1<<CS11);

EICRA=0x03; //初始化外部中断0

EIMSK=0x01;//

SREG|=0x80; //开全局中断

ADMUX=0x60; //设置AD

ADCSRA=0xB3; //

ADCSRA|=(1<<ADSC); //启动AD

EEPROM_READ(EEPROM_ADDR,run_all_time); //读EEPROM if(run_all_time==0||run_all_time>99)

{run_all_time=RUN_ALLTIME; //设置运行时间初始值

EEPROM_WRITE(EEPROM_ADDR,run_all_time);

} }22三月20242、初始化:例voidmain(void){ system_init(); //初始化

… while(1) {

…. }

…}22三月2024一、单片机软件系统设计方法3、中断处理

中断处理内容:

1、模块中断设置

2、全局中断设置

3、中断处理函数22三月20243、中断处理:例:中断设置voidsystem_init(void){ PORTB=0x07; //B口设置 DDRB=0xFF; PORTC=0x38; //C口设置

DDRC=0xC0; PORTD=0x04; //D口设置

DDRD=0xFB;

OCR1A=31; //初始化定时器1

TIMSK1|=(1<<OCIE1A);

TCCR1A=0x00;

TCCR1B=(1<<WGM12)|(1<<CS11);

EICRA=0x03; //初始化外部中断0

EIMSK=0x01;

SREG|=0x80; //开全局中断

ADMUX=0x60; //设置AD

ADCSRA=0xB3;

ADCSRA|=(1<<ADSC); //启动AD

EEPROM_READ(EEPROM_ADDR,run_all_time); //读EEPROM if(run_all_time==0||run_all_time>99)

{run_all_time=RUN_ALLTIME; //设置运行时间初始值

EEPROM_WRITE(EEPROM_ADDR,run_all_time);

}

}22三月20243、中断处理:例:中断处理函数#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;

…}#pragmainterrupt_handlerint0:2 voidint0(){ voltage_0=1;}

22三月20243、中断处理:例:中断处理函数unsignedintu_second250=0;unsignedcharvoltage_0=0;voidmain(){ system_init();

while(1)

{ if(u_second250>40) //10ms进入一次

{ …} }}#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;

…}#pragmainterrupt_handlerint0:2 voidint0(){ voltage_0=1;}

22三月2024一、单片机软件系统设计方法4、定时控制

定时控制内容:

1、初始化

2、中断处理函数

3、定时使用22三月20244、定时控制:例:定时器设置voidsystem_init(void){ PORTB=0x07; //B口设置 DDRB=0xFF; PORTC=0x38; //C口设置

DDRC=0xC0; PORTD=0x04; //D口设置

DDRD=0xFB;

OCR1A=31; //初始化定时器1

TIMSK1|=(1<<OCIE1A);

TCCR1A=0x00;

TCCR1B=(1<<WGM12)|(1<<CS11);

EICRA=0x03; //初始化外部中断0

EIMSK=0x01;

SREG|=0x80; //开全局中断

ADMUX=0x60; //设置AD

ADCSRA=0xB3;

ADCSRA|=(1<<ADSC); //启动AD

EEPROM_READ(EEPROM_ADDR,run_all_time); //读EEPROM if(run_all_time==0||run_all_time>99)

{run_all_time=RUN_ALLTIME; //设置运行时间初始值

EEPROM_WRITE(EEPROM_ADDR,run_all_time);

}

}22三月20243、中断处理:例:定时器处理unsignedintu_second250=0;unsignedcharvoltage_0=0;voidmain(){ system_init();

while(1)

{ if(u_second250>40) //10ms进入一次

{ …} }}#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;

…}22三月2024一、单片机软件系统设计方法5、各模块程序的调用和参数传递。

函数调用和参数传递:

A、1个参数的传递

B、N个参数调用传送

C、多个参数返回传送

D、N个参数返回传送

E、全局变量

F、静态变量就是函数调用22三月2024A、1个参数的传递例:调用voiddisplay_num(unsignedcharnum){ …}voidmain(void){ unsignedcharnum;

… while(1)

{if(u_second250>40) //10ms进入1次

{u_second250=0;

m_second10++;

if(m_second10%50==0) //0.5s进入1次

display_flash=(display_flash)?0:1;//闪标志

display_num(num); //显示

… } }}22三月2024一、单片机软件系统设计方法A、1个参数的传递例:返回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一、单片机软件系统设计方法B、N个参数调用传送例:数组(指针)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、多个参数返回传送例:按引用方式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);

}一、单片机软件系统设计方法D、N个参数返回传送例:指针(数组)22三月2024一、单片机软件系统设计方法E、全局变量例unsignedintu_second250=0;unsignedcharvoltage_0=0;voidmain(){ system_init();

while(1)

{ if(u_second250>40) //10ms进入一次

{ …} }}#pragmainterrupt_handlertimer1:13voidtimer1(void) //0.25ms{ u_second250++;

…}22三月2024一、单片机软件系统设计方法F、静态变量例:按键防抖动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:设置温度Output:出水温度Process:加热电阻原理图:22三月202422三月2024二、过程控制(PID)

温度控制方法: 热水器总功率为:6000KW,分成3段:

RE1控制2000W(继电器),

RE2控制2000W(继电器),

PWM控制2000W(可控硅)。 通过PWM控制,可以实现温度在0~2000W内连续控制; 当功率在2000W以上时,接通RE1,可以在2000W~

4000W内连续调节功率,当功率在4000W以上时,再接通RE2,可以在4000W~

6000W内连续调节功率。 通过以上控制,可以实现热水器输出功率分级连续可调,实现热水器水温自动控制。

22三月2024二、过程控制(PID)

程序举例:

22三月2024

三、单片机监控系统软件设计22三月2024三、单片机监控系统软件设计

单片机监控系统软件设计:

1、采用模块化设计方法;

2、首先单独调试好输入/输出模块;

3、构建基本程序框架;

4、逐个添加功能模块;

5、完成总体控制;

6、测试系统。22三月2024三、单片机监控系统软件设计

2、首先单独调试好输入/输出模块例:室内空调控制系统。

22三月2024一、监控系统功能

例:室内空调控制系统。1、从非技术角度考虑系统功能;2、确定系统的输入检测功能;3、确定系统的输出控制功能;4、确定系统的控制方式;1、遥控2、自动温控3、模式:制冷、制热、抽湿、自动4、风向22三月2024一、监控系统功能

例:室内空调控制系统。1、从非技术角度考虑系统功能;2、确定系统的输入检测功能;3、确定系统的输出控制功能;4、确定系统的控制方式;1、遥控2、温度3、按键22三月2024一、监控系统功能

例:室内空调控制系统。1、从非技术角度考虑系统功能;2、确定系统的输入检测功能;3、确定系统的输出控制功能;4、确定系统的控制方式;1、压缩机2、吹风电机:4级3、风向电机4、抽湿加热器22三月2024一、监控系统功能

例:室内空调控制系统。1、从非技术角度考虑系统功能;2、确定系统的输入检测功能;3、确定系统的输出控制功能;4、确定系统的控制方式;1、PID温度控制2、自动模式算法22三月2024输入/输出电路:1、遥控电路2、温度电路3、按键电路4、压缩机控制电路5、吹风控制电路6、风向控制电路7、加热控制电路读红外模块红外编码识别模块读温度模块读按键模块压缩机控制(PID)模块吹风电机控制模块风向电机控制模块加热控制模块基本模块:初始化模块定时器模块显示模块三、单片机监控系统软件设计22三月2024三、单片机监控系统软件设计

3、构建基本程序框架例:室内空调控制系统。

unsignedintu_second250=0;voidmain(){ system_init();

while(1)

{ if(u_second250>40) //10ms进入一次

{ …} }}#pragmainterrupt_handlertimer1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论