版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
刘镇章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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉利熊猫电动汽车的整合营销策划
- How to Write an Application Letter英语 教学课件
- 呼吸机临床应用护理常规
- (冻融现象)教学课件
- 2024年高考生物二轮复习高频考点追踪与预测专题06 变异与进化(分层练)(原卷版)
- 员工离职手续办理程序
- 干部试用期满转正总结
- 陕西省西安音乐学院附属中等音乐学校2024-2025学年高三下学期开学摸底考试物理试题试卷含解析
- 技能等级评价变电一次安装理论题(初级工中级工)
- 陕西省西安市一中年2025届高三第一次阶段性过关考试物理试题含解析
- LY/T 3371-2024草原生态状况评价技术规范
- 电工班组的劳务承包协议
- 新质生产力心得体会范文简短发言6篇
- 2025届高考语文复习:作文审题立意 课件
- 我的暑假生活总结汇报演讲
- 玉米螟调查与防治 (1)课件讲解
- 能源电力系统安全生产治本攻坚三年行动方案(2024-2026年)
- 高校教师入职培训课件
- 子宫异常出血病例查房
- 英语论文 浅谈核心素养引领下如何创新初中英语的作业内容和形式 论文
- GB/T 18910.4-2024液晶显示器件第4部分:液晶显示模块和屏基本额定值和特性
评论
0/150
提交评论