收藏 分销(赏)

单片机课程设计--基于MCS-51单片机的温度采集系统毕业设计论文.doc

上传人:可**** 文档编号:9873613 上传时间:2025-04-11 格式:DOC 页数:32 大小:983KB
下载 相关 举报
单片机课程设计--基于MCS-51单片机的温度采集系统毕业设计论文.doc_第1页
第1页 / 共32页
单片机课程设计--基于MCS-51单片机的温度采集系统毕业设计论文.doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述
微型计算机技术专业方向课程设计 任务书 题目名称:基于MCS-51单片机的数据采集系统 专业 自动化 班级 111 班 姓名 学号 课程设计任务书 课程名称:微型计算机技术 设计题目:基于MCS-51单片机的温度采集系统 系统硬件要求: 1、 配置单片机的外部程序ROM空间,容量为外扩ROM,RAM各32 KB(其大小由设计者自己设计),系统时钟电路、复位电路等构成的最小系统。 2、 配置0809芯片作为数据采集通道(也可以选择其他芯片),对外部1路温度传感器输入信号采集。 3、 显示部分为LED动态显示设计和键盘设计。 4、 要求每1s采样一次,使用中断完成,其温度测量范围为-20-70度,精度要求1度。 5、接口电路的设计:设计者扩展一个并行接口〔8155或8255〕,键盘设计由设计者根据需要设计键盘的数量,显示采用LED显示,显示电路也根据显示的内容设计; 6、有开机显示状态(如显示88....); 软件设计: 1)主程序设计(包括初始化芯片,定时器,中断以及SP指针等); 2)各功能子程序设计,温度采集计算子程序、键盘子程序\显示子程序设计,定时,中断程序等;) 选做要求: 1、 2路信号采集。 2、 可使用按键选择输入通道。 3、 具有自动通道轮换采样功能。 其他要求: 1、 每位同学独立完成本设计。 2、依据题目要求,提出系统设计方案。 3、设计系统电路原理图。 4、 调试系统硬件电路、功能程序。 5、 编制课程设计报告书并装订成册,报告书内容(按顺序) (1)报告书封面 (2)课程设计任务书 (3)系统设计方案的提出、分析 (4)系统中典型电路的分析 (5)系统软件结构框图 (6)系统电路原理图 (7)源程序 (8)课设字数不少于2000字 成绩 评语 摘要 本文是以MCS-51单片机系统为基础的,通过热电阻PT100的阻值随温度的变化的特性,通过采集得到的模拟信号,并通过A/D转换器ADC0809对模拟信号进行模数转换,把转换得到的数字信号按照顺序分别送入单片机,通过单片机进行均值滤波,并通过查表得到温度值。LED数码管显示。本系统设计简单,性能稳定,能够通过单片机灵活编程进行各种功能的设定和修改。并且为以后温度控制系统的扩展提供了方便,提供了键盘可以进行温度设定和模式选择。并且提供了利用Visual Stdio 2010编写的温度调节上位机进行温度监控和调试。为以后的系统扩展调试提供了方便。 关键词:A/D转换器;热电阻;MCS-51,上位机 第一章 前言 1 第二章 系统总体设计 1 2.1系统概述 1 2.2系统工作原理分析 1 第三章 硬件部分 2 3.1单片机最小系统及键盘模块 3 3.2 数据采集通道模块 5 3.3串行口模块 5 3.4并行I/O芯片及显示模块 6 3.5 温度传感器模块 6 3.6外部储存器模块 7 第四章 软件部分 8 4.1 主程序的设计 8 4.2 定时器中断程序的设计 9 4.3 数据采样程序的设计 9 4.4 A/D转换程序的设计 11 4.5 LED显示程序设计. 12 第五章 辅助调试工具 16 总结 17 参考文献 17 附录1硬件原理图及PCB图 17 附录2分程序代码 18 第一章 前言 温度是一个非常重要的物理量,因为它直接影响燃烧、化学反应、烘烤、煅烧、蒸馏、结晶、空气流动以及温度漂移等物理和化学过程。温度控制失误就可能引起生产安全、产品质量、产品产量以及生活安全等一系列问题。因此对温度的检测的意义就越来越大。温度采集控制系统在工业生产、科学研究和人们的生活领域中,得到了广泛应用。在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。使用自动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。并且温度控制是一个大惯性控制,控制难度比较大。温度采集任务在温度控制中是比较重要的一个环节,因此本文来研究温度采集系统,意义重大。 第二章 系统总体设计 2.1系统概述 根据课程设计要求的性能指标,本系统要满足一定精度的温度采集的基本功能,同时系统还具有动态显示当前的测量温度值的功能和键盘操作的功能。 2.2系统原理分析 本文以MCS-51单片机系统为基础,通过温度传感器PT100随温度的变化而得到的模拟信号进行采集,连接ADC0809实现单路路模拟信号的采集,并通过A/D转换器对模拟信号进行数模转换,把转换得到的数字信号送入单片机,通过LED显示。本系统设计简单,性能稳定,能够通过单片机灵活编程进行各种功能的设定和修改。根据本课题的设计目标以及硬件的特点,本系统的总体设计框图如图所示。 图一 系统框图 第三章 硬件部分 3.1 单片机最小系统及键盘模块 单片机选用AT89C51,该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 本系统包括晶振电路,复位电路,地址锁存器电路,3-8译码器,键盘电路等。图如下,其中译码器输为P2.7,P2.6,P2.5,译码产生8个片选信号,分别来选通8155,外部RAM,ADC0809等芯片工作。保证了地址的扩展和单片机的基本运行。 图二 单片机最小系统原理图 3.2数据采集通道模块 ADC0809是八通道的八位逐次逼近式A/D转换器。由单一的5V电源供电,片内带有锁存功能的8选1的模拟开关。由C、B、A的编码来决定所选的模拟通道。转换时间为100us。转换误差为1/2LSB。 它的引脚的排列及其功能,其引脚图见下 图三 ADC0809的引脚图 IN7~IN0 :八个通道的模拟输入量。 ADDA、ADDB、ADDC:模拟通道地址线。当CBA=000时,IN0输入,当CBA=111时,IN7输入。 ALE:地址锁存信号。 START:转换启动信号,高电平有效。 D7~D0:数据输出线。三态输出,D7是最高位,D0是最低位。 OE:输出允许信号,高电平有效。 CLK:时钟信号,最高频率为 640KHZ。 EOC:转换结束状态信号。上升沿后高电平有效。 VCC:+5V电源。 VREF:参考电压。 利用它可直接输入8个单端的模拟信号分时进行A/D转换,在多点巡回检测和过程控制、运动控制中应用十分广泛。本次设计配置0809芯片作为数据采集通道。连接如图 图四 数据采集通道原理图 3.3串行口的选择 该串行口选用了标准RS-232C接口,它是电平与TTL电平转换驱动电路。常用的芯片是MAX232,MAX232的优点是: (1)一片芯片可以完成发送转换和接收转换的双重功能。 (2)单一电源+5V供电 (3)它的电路设计与连接比较简单而且功能齐全。 电路图如下 图五 串行口原理图 3.4 并行I/O芯片及显示模块 8155芯片内包含有256字节RAM,2个8位、1个6位的可编程并行I/O口,和1个14位定时器/计数器。由于8155既具有RAM又具有I/O口,因而是单片机系统中最常用的外围接口芯片之一。 LED数码显示管是一种由LED发光二极管组合显示字符的显示器件。它使用了8个LED显示管,其中7个用于显示字符,1个用来显示小数点,故通常称之为八段发光二极管数码显示器。对LED数码显示器的控制可以采用按时间向它提供具有一定驱动能力的位选和段选信号。 原理图如下 图六 并行I/O芯片及显示模块 3.5 温度传感器模块 题目要求,采集温度范围为-20℃-70℃。经过比较我们选择PT100作为温度传感器,pt100是铂热电阻,它的阻值跟温度的变化成正比,铂电阻的特点是精度高,稳定性好,性能可靠。铂在氧化性气氛中,甚至在高温下的物理、化学性质都非常稳定。因此铂被公认为是目前制造热电阻的最好材料。铂电阻主要作为标准电阻温度计使用,也常被用在工业测量中。 PT100的阻值与温度变化关系为:当PT100温度为0℃时它的阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。它的工业原理:当PT100在0摄氏度的时候他的阻值为100欧姆,它的阻值会随着温度上升而成匀速增长的。 图七 PT100桥式电路图 根据电桥的运算关系得出桥式电路输出压差为 ————① 查PT100分度表得出,-20℃-70℃对应的电阻为92.16Ω-127.08Ω,为了提高采集的精度,我们把-20℃-70℃对应的电压变化利用惠斯通电桥和运放,变换到MCS-51可以最大程度识别和测量的范围,所以当-20℃的时候,对应输出电压为0V。    因此,—————,②   把R3=510Ω,R1=200Ω,RPT=92.16Ω,带入上式得出R9=1106.8Ω;所以应该调节滑动变阻器R9=1106.8Ω接入电路。   当测量温度为70℃时,对应的RPT=127.08Ω,R3=510Ω,R1=200Ω,R9=1106.8Ω,带入①式得到U=0.366V。 为了输入单片机MCS-51的电压为0-5V,应该设计运算放大器的放大倍数为,为了留有一定的余量和现有电阻大小,选择运算放大器的倍数为12倍。 采集电压范围为0V-4.392V。 最终我们,我们为了防止AD输入阻抗不够大,而对采集电路的电压造成影响,从而对电压采集造成误差。所以采用两级运放。第一级为查分比例运算电路,放大倍数为4被。后面一级为比例运算放大电路,放大倍数为3倍。最终放大倍数为12倍。运算放大电路的电路电阻匹配为 ——————③ 我们取,R4=R5=20K,R6=R7=80K; ——————④ 我们取,R8=12K,R11=24K;且为匹配电阻,R12=8K; 原理图如下 图八 主电路原理图 3.6 外部储存器模块 本系统扩展32K ROM, RAM,分别用了四片2764和6264,其P2.7,P2.6,P2.5通过3-8译码器,编译成Y0-Y7,作为片选信号。其余地址线作为连接8K的13根地址线。 Eg. U8:0x0000-0x1fff U9:0x2000-0x3fff U10:0x4000-0x5fff U11:0x6000-0x7fff 原理图如下 图九 外部储存器的连接原理图 第四章 软件部分 4.1主程序的设计 设计思路: 主程序主要执行LCD显示和键盘的扫描,AD的采集在外部中断中执行,采样数据处理以及LCD显示数据的更新均在定时器中断中完成。主程序开始时首先定义相关的指针,并对定时器T0,外部中断INT0,ADC0809进行初始化设置。ADC0809转换完成时,单片机将收到低电平,所以将INT0设为下降沿触发。题目要求每隔1s更新一次显示温度,这里选用定时方式1,方式1的最大定时时间为:=×1us=65.536ms 这里每次溢出时设为50ms,每溢出20次进行一次数据更新。 重装值的计算公式为:TC=-50ms/1us=15536=3CB0H 51单片机的中断优先级默认为,INT0高于T0,当在定时器中断执行数据处理程序时应避免外部中断的打断,因此设为TO中断为高优先级。 循环,等待中断。 流程图: 图十 主程序流程图 4.2 定时器中断程序的设计 设计思路: 定时中断函数主要进行采样数据的处理以及温度的转换。为了减小误差,取最近十次的采样值相加求取平均值,然后转换为相应的温度。求平均值时,16位的除法操作比较困难,对于高八位可以看做是n个255,用高八位乘以25.5,即除以10之后的值,在与低八位除以10之后的数据相加,就是最后的平均值。对于ADC0809来说,它的采集电压范围为0-5V,电路设计时留有余量,参考值为4.09V,因此采集的最大值为208。进行温度转换时,-20℃对应0,70℃对应208,按照对应关系可以用查表进行。查出相应温度后转为十位、个位BCD码,为后面的LCD显示做准备。 图十一 定时器流程图 求平均值时的代码: DATA_Explose: PUSH ACC PUSH DPL PUSH DPH /*把寄存器切换到1区*/ CLR RS1 SETB RS0 CLR A MOV R4,#00H MOV R5,#00H MOV R3,#10 CLR C MOV R1,#32H LOOP_ADD: ADDC A,@R1 JC ADD_High_8 SJMP ADD_Continue ADD_High_8: INC R4 CLR C ADD_Continue: INC R1 DJNZ R3,LOOP_ADD MOV R5,A AD_AVE: MOV A,R4 MOV B,#25 MUL AB MOV R2,A MOV A,R4 MOV B,#2 DIV AB ADD A,R2 MOV R4,A MOV A,R5 MOV B,#10 DIV AB ADD A,R4 MOV 2AH,A//把最终的数据送入2AH中 温度转换代码: AD_DATA_USing: MOV DPTR,#TEM_DATAB; //温度转换表格地址 MOVC A,@A+DPTR; //查表得相应温度 MOV B,#0AH; //被除数10给B DIV AB MOV 2FH,B MOV 30H,A CJNE A,#57,TREAT1; //将采样数值与57比较,若不相等则TREAT1 MOV 31H,#0AH; //若相等,幅值FUHAOWEI,57,即正数 LJMP DOWN_AD TREAT1: JC TREAT2; //若Cy=1,则TREAT2 MOV 31H,#0AH; LJMP DOWN_AD TREAT2: MOV 31H,#0BH; //因Cy为0,为负温度 LJMP DOWN_AD DOWN_AD: POP DPH POP DPL POP ACC RET 4.3 A/D转换和数据采样程序的设计 设计思路:本设计程序中,由ADC0809转换完成信号触发外部中断进行数据的采集,并预留十个地址暂存采样数据,末位地址存入数据之后重新从首地址开始存入,进行数据处理时便可以取最近十次的值进行计算,提高精度。 流程图: 图十二 A/D转换和数据采样程序 相关代码: ADC_Finish: PUSH DPH PUSH DPL PUSH ACC CJNE R7,#00H,DUAL_MODE LJMP CH1_1 DUAL_MODE: SETB RS1 CLR RS0 CJNE R6,#00H,CH1 MOV R6,#01H MOV DPTR,#ADR_ADC0809_CH0_MIN CH1: MOV R6,00H LJMP CHANLE_1_CONVENT CH1_1: MOV DPTR,#ADR_ADC0809_CH1_MIN SING_CONVENT: //MOV DPTR,#ADR_ADC0809_CH0_MIN MOVX A,@DPTR; //取值 MOV @R0,A ; //将采样值送到存储地址 MOVX @DPTR,A; //重新启动ADC0809 INC R0 ; //存储地址加一 DJNZ R1,INTLOOP; //判断是否存满十个数据,否,返回主函数 MOV R0,#32H //填满十个采样值后,更新采样首地址 MOV R1,#10 LJMP INTLOOP CHANLE_1_CONVENT: //MOV DPTR,#ADR_ADC0809_CH0_MIN MOVX A,@DPTR; //取值 MOV @R0,A ; //将采样值送到存储地址 MOVX @DPTR,A; //重新启动ADC0809 INC R0 ; //存储地址加一 DJNZ R1,INTLOOP; //判断是否存满十个数据,否,返回主函数 MOV R0,#42H //填满十个采样值后,更新采样首地址 MOV R2,#10 LJMP INTLOOP INTLOOP: POP ACC POP DPL POP DPH RETI 4.4键盘扫描程序的设计 设计思路:本次课设中用到的键盘为单排八个按键,程序设计比较简单,只要给一个高电平,再检测相应按键接口即可,在此无需赘述。 4.5 LED显示程序设计 实际思路:本次课设采用三个数码管,共阴极设计,控制信号分为位选信号和段选信号。先由8155的C口输出片选信号选通将要显示的数码管,然后由A口输出段选信号,使数码管显示相应数字。 流程图: 图十三 显示程序流程图 /*LED数码管显示子程序*/ LED_DIP: PUSH ACC MOV R3,#10H CJNE R7,#0,NEXT1_Mode LJMP DDOOP NEXT1_Mode: CJNE R7,#1,NEXT2_Mode LJMP DDOOP1 NEXT2_Mode: SETB RS1 CLR RS0 MOV A,R5 CJNE A,#00H,DD1 MOV R5,#00H CLR RS0 CLR RS1 LJMP DDOOP DD1: MOV R5,#01H CLR RS0 CLR RS1 LJMP DDOOP1 DDOOP: MOV DPTR,#ADR_PC_MIN;//指向C口 MOV A, #11111110B MOVX @DPTR,A; //选中个位数码管 MOV DPTR,#DTATAB; //数据表格起始地址送DPTR MOV A,02FH; MOVC A,@A+DPTR; //查得个位数码管输出信号 MOV DPTR,#ADR_PA_MIN; //指向A口 MOVX @DPTR,A; //数码管输出个位数 ACALL DELAY; //延时5ms MOV DPTR,#ADR_PC_MIN MOV A, #11111101B MOVX @DPTR,A //选中十位数码管 MOV DPTR,#DTATAB; //数据表格起始地址送DPTR MOV A,30H MOVC A,@A+DPTR; //查得十位数码管输出信号 MOV DPTR,#ADR_PA_MIN; //指向A口 MOVX @DPTR,A; //数码管输出十位数 ACALL DELAY; //延时5ms MOV DPTR,#ADR_PC_MIN MOV A, #11111011B MOVX @DPTR,A; //选中符号位数码管 MOV DPTR,#DTATAB; //数据表格起始地址送DPTR MOV A,31H MOVC A,@A+DPTR; //查得符号位数码管输出信号 MOV DPTR,#ADR_PA_MIN; //指向A口 MOVX @DPTR,A; //数码管输出符号位 ACALL DELAY; //延时5ms DJNZ R3,DDOOP; //循环显示十次 RET DDOOP1: MOV DPTR,#ADR_PC_MIN; //指向C口 MOV A, #11111110B MOVX @DPTR,A; //选中个位数码管 MOV DPTR,#DTATAB; //数据表格起始地址送DPTR MOV A,032H; MOVC A,@A+DPTR; //查得个位数码管输出信号 MOV DPTR,#ADR_PA_MIN;//指向A口 MOVX @DPTR,A; //数码管输出个位数 ACALL DELAY; //延时5ms MOV DPTR,#ADR_PC_MIN MOV A, #11111101B MOVX @DPTR,A //选中十位数码管 MOV DPTR,#DTATAB; //数据表格起始地址送DPTR MOV A,33H MOVC A,@A+DPTR; //查得十位数码管输出信号 MOV DPTR,#ADR_PA_MIN; //指向A口 MOVX @DPTR,A; //数码管输出十位数 ACALL DELAY; //延时5ms MOV DPTR,#ADR_PC_MIN MOV A, #11111011B MOVX @DPTR,A; //选中符号位数码管 MOV DPTR,#DTATAB; //数据表格起始地址送DPTR MOV A,34H MOVC A,@A+DPTR; //查得符号位数码管输出信号 MOV DPTR,#ADR_PA_MIN; //指向A口 MOVX @DPTR,A; //数码管输出符号位 ACALL DELAY; //延时5ms DJNZ R3,DDOOP; //循环显示十次 POP ACC RET DTATAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH DB 07H, 7FH, 6FH, 00H, 40H 第五章 辅助调试工具 使用Visual Stdio 2010编写的温度调节上位机进行温度监控和调试系统,利用串口实现PC机和单片机的通讯,该调试系统具有温度设定,PID参数调整,温度保存文件,温度变化曲线显示等功能,为以后系统的扩展提供了方便。系统效果图如下: 图十四 温度调节工具效果图 总结:通过本次课程设计使我们学到了怎样去查找翻阅有关理论资料和技术手册,把书本上知识总结起来去应用于实践,初步学到了研究、开发,设计单片微型计算机对工业过程控制的一套完整的方法,受益很大。作为自动化111班1组课程设计的组长,我平时定期给组员开会,督促组员设计进度,在整个设计过程中我不断鼓励队员,让他们在整个设计过程中真正的学到东西,首先冲整体上把握本次设计的目的,从而达到巩固课本知识的目的。然后再根据每个人的特点合理分配每个人的任务,最终每个人都很好的完成了分配的任务。达到了很好的合作效果。我在本次设计过程中,主要负责的任务如下:一,作为组长,掌握课程设计的总进度。二、督促队员,给他们设计的积极性和战斗力。三、完成了系统的硬件设计并给队员们真正的讲明白。四、进行软件的最终汇总和加入了附加部分的功能,思考设计出,解决16为数据求平均值的算法。五、使用C#语言编写了上位机系统,为以后扩展提供方便。六、制作PPT,为最终答辩提供方便。在这个过程中我不仅仅学到了课本中的知识,把课本知识掌握的更加熟练,并且将之用于实际,并在此过程中体会到了团队合作的重要性,每个人身上都有优点。作为组长,我应该学会善于发现别人的长处,并给队员合理安排合适的任务。这样会达到极佳的效果。最后感谢老师给我们这次锻炼的机会。这种课设的模式真的不多,不仅让学生参与的积极性有很大提高,能够保质保量完成任务,并且还可以提高同学们的团队合作能力。在此,感谢老师对我的经心指导和队友们的大力支持。 参考文献: 《单片机原理及其接口技术》(第三版) 胡汉才 主编 《数字电子技术基础》(第五版) 清华大学电子学教研室组 编 阎石 主编 《模拟电子技术基础》(第四版) 清华大学电子学教研室组 编 华成英 童诗白主编 《自动检测技术及仪表控制系统》(第三版) 张毅 张宝芬 曹丽 彭黎辉 编 附录: 附录一 原理图及PCB图 图十五 总原理图 图十六 PCB效果图 附录二 部分程序代码 /*----------------------------------------------------*/ /*-----------------单片机课程设计---------------------*/ /*-------------自动化111班一组全体成员----------------*/ /*------------------2013.12.20------------------------*/ /*-----------------Description---------------------*/ /*Mecro define*/ /*ROM*/ ADR_ROM1_MIN DATA 0000H ADR_ROM1_MAX DATA 1FFFH ADR_ROM2_MIN DATA 2000H ADR_ROM2_MAX DATA 3FFFH ADR_ROM3_MIN DATA 4000H ADR_ROM3_MAX DATA 5FFFH ADR_ROM4_MIN DATA 6000H ADR_ROM4_MAX DATA 7FFFH /*RAM*/ ADR_RAM1_MIN DATA 0000H ADR_RAM1_MAX DATA 1FFFH ADR_RAM2_MIN DATA 2000H ADR_RAM2_MAX DATA 3FFFH ADR_RAM3_MIN DATA 4000H ADR_RAM3_MAX DATA 5FFFH ADR_RAM4_MIN DATA 6000H ADR_RAM4_MAX DATA 7FFFH /*ADC0809*/ ADR_ADC0809_CH0_MIN DATA 0a000H ADR_ADC0809_CH0_MAX DATA 0bff8H ADR_ADC0809_CH1_MIN DATA 0a001H ADR_ADC0809_CH1_MAX DATA 0bff9H /*8155*/ ADR_CONTROL_MIN DATA 8000H ADR_CONTROL_MAX DATA 9FF8H ADR_PA_MIN DATA 8001H ADR_PA_MAX DATA 9FF9H ADR_PB_MIN DATA 8002H ADR_PB_MAX DATA 9FFAH ADR_PC_MIN DATA 8003H ADR_PC_MAX DATA 9FFBH GEWEI DATA 2FH; //个位BCD数据存放位置 SHIWEI DATA 30H; //十位BCD位数据存放位置 FUAHOWEI DATA 31H; //符号位 /*The mecro end*/ /*MAIN Structer start */ ORG 0000H SJMP MAIN ORG 0003H SJMP ADC_Finish ORG 000BH SJMP TIM0_IRQ ORG 0023H LJMP USART_Send MAIN: MOV SP,#60H CLR A ; // 请累加器A SETB EA ; //开CPU中断 SETB ET0 ; //开定时器T0中断 MOV TMOD,#21H; //选用TO的计时方式1 MOV TH0,#3CH //定时器重装值 MOV TL0,#82H /*----------------串口初始化------------------------------*/ MOV TH1,#0F4H MOV TL1,#0F4H MOV PCON,#80H SETB TR1 MOV SCON,#40H SETB ES SETB EX0; //开INT0外部中断 SETB IT0; //下降沿触发 SETB PT0; //定时中断优先级高 MOV R1,#10; //循环采样计数值 MOV R4,#20; //采样间隔为1s,定时中断为50ms,需要进 SETB TR0 ; //启动TO MOV DPTR,#ADR_ADC0809_CH0_MIN; //ADC0809地址给DPTR MOVX @DPTR,A; //启动ADC0809 /* 8155IO口工作模式设定 */ MOV DPTR,#ADR_CONTROL_MIN; //DPTR指向状态口 MOV A,#80H MOVX @DPTR,A; //令A,B,C口为输出 Loop: LCALL LED_DIP ; //调用显示子程序 LCALL SCAN ; //调用扫描子程序 LJMP Loop /*串口发送接受中断程序*/ /*---若使用上位机,发送数据前先发送0x23*/ USART_Send: PUSH PSW PUSH ACC SETB RS0 SETB RS1 MOV C,TI JC SEND SJMP ACCEPT SEND: CLR TI MOV A,R7 MOV SBUF,A SJMP USART_DOWN ACCEPT: CLR RI MOV A,SBUF MOV R6,A USART_DOWN: POP ACC POP PSW CLR RS0 CLR RS1 RETI /*TIM0中断进行平均求值,进行数码管显示*/ ADC_Finish: PUSH DPH PUSH DPL PUSH ACC CJNE R7,#00H,DUAL_MODE LJMP CH1_1 DUAL_MODE: SETB RS1 CLR RS0 CJNE R6,#00H,CH1 MOV R6,#01H MOV DPTR,#ADR_ADC0809_CH0_MIN CH1: MOV R6,00H LJMP CHANLE_1_CONVENT CH1_1: MOV DPTR,#ADR_ADC0809_CH1_MIN SING_CONVENT: //MOV DPTR,#ADR_ADC0809_CH0_MIN MOVX A,@DPTR; //取值 MOV @R0,A ; //将采样值送到存储地址 MOVX @DPTR,A; //重新启动ADC0809 INC R0 ; //存储地址加一 DJNZ R1,INTLOOP; //判断是否存满十个数据,否,返回主函数 MOV R0,#32H //填满十个采样值后,更新采样首地址 MOV R1,#10 LJMP INTLOOP CHANLE_1_CONVENT: MOVX A,@DPTR; //取值 MOV @R0,A ; //将采样值送到存储地址 MOVX @DPTR,A; //重新启动ADC0809 INC R0 ; //存储地址加一 DJNZ R1,INTLOOP; //判断是否存满十个数据,否,返回主函数 MOV R0,#42H //填满十个采样值后,更新采样首地址 MOV R2,#10 LJMP INTLOOP INTLOOP: POP ACC POP DPL POP DPH RETI /*INT0外部中断,ADC0809转换完毕,进行ADC0通道读取,并开始重新一次转化*/ TIM0_IRQ: PUSH DPH PUSH DPL PUSH ACC MOV TH
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服