c8051f340实验及程序
- 格式:docx
- 大小:68.99 KB
- 文档页数:4
基于C8051F340的超声避障机器人设计曾军,吴长雷,李东,黄华∗(四川大学电气信息学院,四川成都 610065)摘要:智能移动机器人是当前机器人研究的一个重要领域,具有广阔的应用潜力。
以C8051F340单片机为核心,设计了一种基于超声测距的智能避障机器人,介绍了系统软硬件电路的设计与实现,设计了由舵机和超声波传感器构成的测距模块。
在不影响机器人避障的情况下,有效的减少了传感器数量,简化了硬件电路。
实验结果表明模糊控制算法对环境有很大的适应性,能够实现机器人的自主避障。
关键字:C8051F340;超声传感器;避障;机器人中图分类号:TP242 文献标志码:AThe design of robot’s obstacle avoidance based on C8051F340Zeng Jun Wu Changlei Li Dong Huang Hua(School of Electrical Engineering and Information, Sichuan University, Chengdu, 610065, Sichuan , china) Abstract:One of the most important robot research fields is the intelligent mobile robot which has capacious potential of application. This paper raises a design of the wheeled intelligent mobile robot based on ultrasonic measurement, and takes C8051F340 as the core of controller. It introduces the design of hardware and software, designs the ultrasonic measurement which is compose of steering motor and ultrasonic sensor. It can reduce the number of sensor and the complexity of hardware on the condition that it doesn’t have the impact on the obstacle avoidance of robot. The experiment result indicates that the application of fuzzy algorithm has the very largely compatibility to the environment, the design can realize the robot’s obstacle avoidance. Keywords:C8051F340; ultrasonic sensor; obstacle avoidance; robot1 引言上世纪90年代以来,以研制高水平的环境信息传感器和信息处理技术,高适应性的移动机器人控制技术,真实环境下的规划技术为标志,开展了以智能移动机器人为代表的更高层次的研究,成为目前机器人研究领域的热点之一。
YCL-MCU-C8051F340-I型产品简介本开发板是针对CP2200以太网控制器和C8051F340单片机(SOC)而开发的,板上可实现简单WEB服务器,可通过工具方便配置出各种网络协议,以适应各种应用。
针对C8051F340单片机片上的全部资源,我们编写了所有功能的测试程序,特别是用其SPI总线实现了SD卡模拟U盘功能,不仅单片机可以对SD卡进行文件系统相关的管理,还可以通过USB口和串口实现SD卡文件系统管理(如创建,删除等操作,都提供源代码),用扩展的CP2200以太网控制器实现了简单WEB服务器,串口转以太网、以太网转串口通信功能等。
一. 核心芯片资源1. CP2200以太网控制器CP2200/1是集成了IEEE 802.3以太网媒体访问控制器(MAC)、10Base-T物理层(PHY)和8KB非易失性FLASH存储器的单芯片以太网控制器,采用28脚QFN(5x5mm)或48脚TQFP封装。
2. C8051F340芯片资源:C8051F340是完全集成的混合信号系统级MCU芯片。
主要资源如下:·高速流水线结构的8051兼容的CIP-51内核(最大48MIPS);·全速非侵入式的系统调试接口(C2接口);·USB总线接口,全速12Mbps,1KB FIFO;·真正10位200ksps的17通道ADC,带模拟多路开关;·64K字节可在系统编程的FLASH存储器;·5376字节的片内RAM;·可寻址64K字节地址空间的外部数据存储器接口;·硬件实现的SPI,SMBus/IIC和两个UART串行接口;·4个通用的16位定时器;·具有5个捕捉/比较模块的可编程计数器/定时器阵列;·片内看门狗定时器,2个比较器,VDD监视器和温度传感器;·40个I/O端口;·-40~85度工业级温度范围;·2.7V~3.6V工作电压,48脚TQFP封装;二. 可评估的其它MCUCP2201,C8051F341/2/3/4/5/6/7;三. 开发板硬件资源:·MCU:C8051F340,片内64K FLASH,5376Byte SRAM·10M以太网:CP2200,集成以太网媒体访问控制器(MAC)和10 BASE-T PHY·内置网络变压器的RJ45网络接口·USB2.0全速接口·串行接口一个·C2调试接口·SD卡接口四. 特色1. 支持通过USB口下载应用软件(更新固件),并提供全套源代码;2. 提供ARP,IP,ICMP,TCP协议的源代码,ARP中实现了缓存的学习、更新、老化、轮转替换。
内容:西安科技大学科技创新实验班C8051F单片机教程之一作者:苗瑞日期:2009-12-8网站:/bbs一、认识C8051F并与51比较本节主要是让初学C8051F单片机的学员有个感性的认识,着重强调理论方面的知识,并通过与51单片机的比较,让大家能有更深刻的体会。
1、C8051F单片机简介C8051Fxxx 系列单片机是完全集成的混合信号系统级芯片,具有与8051 兼容的微控制器内核,与MCS-51 指令集完全兼容。
除了具有标准8052 的数字外设部件之外,片内还集成了数据采集和控制系统中常用的模拟部件和其它数字外设及功能部件MCU 中的外设或功能部件包括模拟多路选择器、可编程增益放大器、ADC、DAC、电压比较器、电压基准、温度传感器、SMBus/ I2C、UART、SPI、可编程计数器/定时器阵列(PCA)、定时器、数字I/O 端口、电源监视器、看门狗定时器(WDT)和时钟振荡器等。
所有器件都有内置的FLASH 程序存储器和256 字节的内部RAM,有些器件内部还有位于外部数据存储器空间的RAM,即XRAM。
C8051Fxxx 单片机采用流水线结构,机器周期由标准的12 个系统时钟周期降为1 个系统时钟周期,处理能力大大提高,峰值性能可达25MIPS。
C8051Fxxx 单片机是真正能独立工作的片上系统(SOC)。
每个MCU 都能有效地管理模拟和数字外设,可以关闭单个或全部外设以节省功耗。
FLASH 存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051 固件。
应用程序可以使用MOVC 和MOVX 指令对FLASH 进行读或改写,每次读或写一个字节。
这一特性允许将程序存储器用于非易失性数据存储以及在软件控制下更新程序代码。
片内 JTAG 调试支持功能允许使用安装在最终应用系统上的产品MCU 进行非侵入式(不占用片内资源)、全速、在系统调试。
该调试系统支持观察和修改存储器和寄存器,支持断点、单步、运行和停机命令。
计算机与信息学院智能检测项目设计实践设计报告项目名称:基于80C51F340的智能温度报警器组长:冯春博组员:杨嘉倩花陈韵范雪华专业:计算机科学与技术专业班级:11级计科C1班日期:2014 年6月23日基于8051F340的智能温度报警器摘要基于8051F340的智能温度报警器,利用PT100温度传感器,通过热敏传感器进行温度的测量,当检测到的温度大于设置温度时报警器会开始报警,此报警器可被广泛的运用与餐厅,学校,娱乐场所,厂房等等。
当然同时也可以被用于农田以及其他对温度范围有很高要求的地方。
可以说,智能温度报警器不但可以减少或排除一些感知不到的危害,同时也使温度控制智能化。
关键词:自动报警;PT100;智能;应用范围广;自动测温;Intelligent temperature alarm system basedon 80C51F340AbstractIntelligent temperature alarm system based on 8051F340, using PT100 temperature sensor, temperature measurements were performed by a thermal sensor, when the detected temperature greater than degrees that was set is the alarm willstart the alarm, the alarm can be used with a wide range of restaurants, schools,places of entertainment, plant etc.. Of course, also can be used for farmland and other temperature range with high requirement of the local. Can say, the intelligent temperature alarm not only can reduce or eliminate the hazards are not aware of, but also the intelligent temperature control.Keywords: automatic alarm; PT100; intelligent; wide application range; automatic measurement;目录第1章设计方案 (4)1.1设计分析及要求 (4)第2章硬件电路设计 (4)2.1 单片机8051F340简介 (4)2.2硬件电路设计 (5)热敏电阻PT100简介 (5)2.2.2 参数计算 (6)2.2.3 误差分析 (7)第3章程序设计 (8)3.1 程序流程图 (8)3.2 各部分功能实现的程序 (8)第4章测试结果 (13)第5章结论 (14)附录 (16)第1章设计方案本系统设计是基于PT100热敏电阻作为温度传感器的温度测量系统,在整个系统中,8051f340作为单片机, LM324N作为运算放大器, Nokia5110(3V-5V)作为液晶显示器,本设计运用多种实用软件,编写了相应的软件程序,在PCB上,布置一系列的芯片、电阻、电容等元件,通过PCB上的导线相连,构成电路,实现了测量温度并在液晶上显示的功能。
第20卷第12期长春大学学报Vol.20No.12 2010年12月JOURNAL OF CHANGCHUN UNIVERSITY Dec.2010基于C8051F340单片机的移动机器人避障系统设计赵银银(北华大学工程训练中心,吉林吉林132021)摘要:介绍了一种基于C8051F340单片机的移动机器人超声波测距避障系统,阐述了系统结构、工作原理、设计方法,实验结果表明该系统具有硬件结构简单、高精度、微型化等特点。
关键词:移动机器人;超声传感器;C8051F340单片机中图分类号:TP24文献标志码:A文章编号:1009-3907(2010)12-0021-03移动机器人研究的一个基本问题是安全避障,实现安全避障的前提是准确获取避障信息,准确的避障信息为移动机器人的避障[1]处理提供了可靠的周边环境信息。
对于测距和障碍探测,采用最多的是红外线和超声波传感器。
超声波测距由于其成本低廉,是一种常见的测距方法,但由于超声波传感器具有探测波束角过大、方向性差、等缺点,而采用多传感器又会占用控制器很多资源,且传感器间存在交叉干扰,往往不能对障碍物进行准确定位。
本文介绍一种以C8051F340单片机为核心的高精度、微型化的多传感器测距系统,实现移动机器人的安全避障。
1超声波测距原理超声测距从原理上可分为共振式、脉冲反射式两种。
由于共振法的应用要求复杂,这里使用脉冲反射式。
测距的基本原理[2]是发送(超声)压力波包,并测量该波包发射和回到接收器所占用的时间,即L=CT/ 2,其中L为目标距超声波传感器的距离,C为超声速度,T为发射到接收的时间间隔。
由于声速C与温度有关,为了提高测量精度,应通过温度补偿的方法对声速加以校正。
如表1为声速与温度关系表。
表1声速与温度关系表温度ħ-30-20-100102030100声速m/s3133193253233383443493862系统硬件设计本系统采用5组超声传波传感器,分别于机器人的左方、偏左方、前方、偏右方、右方各安装一组超声波传感器,相互间隔45度角,用于探测各自方向上障碍物的信息。
#include <c8051f330.h>#include <stdio.h>//------------------------------------------------------------------------------------ //宏定义//------------------------------------------------------------------------------------ #define unchar unsigned char#define unint unsigned int#define KEY1 Change_Mode_KEY#define KEY2 Change_Frequency_KEY#define M_C Change_Mode_Count#define F_C Change_Frequency_Count//------------------------------------------------------------------------------------ // 定义函数//------------------------------------------------------------------------------------ void SYSCLK_Init (void);void PORT_Init (void);void DAC0_Init(void);void Interrupts_Init(void) ;void T0_ISR();//定义按键,端口sbit KEY1 = P1^0;sbit KEY2 = P1^1;sbit CH1 = P0^1;unchar M_C = 0;unchar F_C = 1;int Delay_Time = 0;int Delay_Flag = 0;char code SIN_TABLE[256] = {0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8, 0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc, 0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83, 0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a, 0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52, 0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b, 0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27, 0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17, 0x15,0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0b, 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03, 0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, 0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x12,0x13, 0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23, 0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35, 0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b, 0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63, 0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c };void main (void) //主函数{PCA0MD &= ~0x40; //关闭看门狗OSCICN = 0x83;PORT_Init(); // 端口初始化Interrupts_Init(); //中断初始化DAC0_Init(); // DAC转换初始化while(1){}}void Port_Init (void){P0SKIP = 0x02;P0MDOUT = 0x02;P1SKIP = 0x03;P1MDIN = 0x03;P1MDOUT = 0x03;XBR1 = 0x40;}void Interrupts_Init(void){//Timer0TL0 = (64286)&0xff;TH0 = (64286>>8)&0xff;TMOD |= 0x01;TMOD &=~ 0x80; //配置TO工作方式1,清空门控位CKCON |= 0x04; //使用系统时钟TR0 = 1; //Timer0使能ET0 = 1; //启用Timer0中断EA = 1; //启用全局中断}void DAC0_Init (void){REF0CN = 0x08;IDA0CN = 0x82;IDA0L = 0x00;}//----------------------------------------------------------------------------- // 外部中断1服务程序(调用延时服务程序)//----------------------------------------------------------------------------- void T0_ISR() interrupt 1{ static char num=1;static unint i=0;static unchar Timer_C = 0;static char key_st1 = 0;static char key_st2 = 0;TL0 = 64286&0xff;TH0 = (64286>>8)&0xff;switch(key_st1)//按键消抖{case 0:if(KEY1 == 0)key_st1 = 1;break;case 1:if(KEY1 == 0)key_st1 = 2;elsekey_st1 = 0;break;case 2:if(KEY1 == 1){M_C++;key_st1 = 0;}break;}switch(key_st2)//按键消抖{case 0:if(KEY2 == 0 )key_st2 = 1;break;case 1:if(KEY2 == 0)key_st2 = 2;elsekey_st2=0;break;case 2:if(KEY2 == 1){F_C++;key_st2 = 0;}break;}if(F_C>6)F_C=1;if(M_C>3)M_C=0;switch(M_C){case 0: // 正弦波if(++Timer_C>F_C){Timer_C = 0;IDA0H = SIN_TABLE[i++];if(i>255)i = 0;}break;case 1: //方波if(++Timer_C>F_C){Timer_C = 0;if(i++<128)IDA0H =0x00;elseIDA0H =0xff;if(i>255)i = 0;};break;case 2://三角波if(++Timer_C>F_C){Timer_C = 0;if(i<255)IDA0H =i++;else{i++;IDA0H =510-i;}if(i == 510)i=0;}break;case 3: //自创爱心波if(++Timer_C>F_C){Timer_C = 0;if(i>255)IDA0H=125;else{ if(num==1){ num=-num;IDA0H=SIN_TABLE[i%125]/2;}else{ num=-num;IDA0H=SIN_TABLE[125+(i/2)%125];}}if(i++>300)i = 0;break;}}}。
1
C8051F340单片机应用实验
作者:游小侠 原创,实际调试通过
1 实验内容
用C8051F340单片机开发板完成下述实验:定时器T0以固定周期产生中断,中断处理程序
控制I/O口输出,使P2.3脚所接发光二极管闪烁。对P2.5脚的输入模拟电压进行A/D转换,
由A/D转换结果控制发光二极管的闪烁频率。
2 实验原理
1) I/O口输出
C8051F340有5组8位I/O端口,通过配置交叉开关,可以定义每个端口为通用I/O端口或
连接到特殊功能模块。作为通用I/O时,所有端口I/O都耐5V电压,兼有模拟输入功能,
Pn(n=0~4,下同)是端口数据锁存器,端口输入方式寄存器PnMDIN选择相应端口为数字
输入或模拟输入方式,端口输出方式寄存器PnMDOUT选择相应端口为漏极开路或推挽输出
方式。
通过交叉开关可将片内的计数器/定时器、串行总线、硬件中断、比较器输出等资源连接到
I/O端口,这一特性允许用户根据自己的特定应用选择通用I/O端口和所需数字资源的组合。
交叉开关配置寄存器XBR0、XBR1、XBR2选择哪些内部资源需要连接到I/O端口,端口跳过
寄存器P0SKIP、P1SKIP、P2SKIP选择哪些I/O端口不参与交叉开关的配置。这些寄存器的值
确定后,交叉开关就按固定的优先级顺序依次将单片机内部资源配置到I/O端口。
端口初始化可按以下步骤进行:
用端口输入方式寄存器(PnMDIN)选择端口输入方式(模拟或数字);
用端口输出方式寄存器(PnMDOUT)选择端口输出方式(漏极开路或推挽); 用端口跳
过寄存器(PnSKIP)选择需被交叉开关跳过的那些引脚;
用交叉开关配置寄存器XBR0、XBR1、XBR2选择需要连接到I/O引脚的资源;
使能交叉开关:XBARE = 1(XBRE1.6)。
2) 定时器
C8051F340内部有4个计数器/定时器T0、T1、T2、T3,还有一个可编程计数阵列(PCA)。
T0、T1的使用方法与传统MCS-51相同,T2、T3是16位自动重装载计数器/定时器,可用于
ADC、SMBus、USB或作为普通计数器/定时器使用。PCA由1个16位计数器和6个捕捉/比
较模块组成,每个捕捉/比较模块
都可通过交叉开关配置到I/O口。
T0有4种工作方式:13 位计数/定时器、16 位计数器/定时器、8 位自动重装载的计数器/定
时器、两个8位计数器/定时器。本实验使用T0的工作方式1即16 位计数器/定时器方式。
与T0有关的控制寄存器有工作方式控制寄存器TMOD、定时器控制寄存器TCON、时钟控制
寄存器CKCON、计数值低字节寄存器TL0、计数值高字节寄存器TH0。TMOD中的方式选择
位T1M1~T0M0用来选择工作方式,如下表所列。TCON用于使能定时器0和定时器1以及
指示它们的状态。CKCON用来选择计数器的输入时钟。TL0保存计数值低字节,TH0保存计
数值高字节,两字节需分开写。
T1M1 T1M0 方式 说明
0 0 方式0 13位计数器/定时器 0 1 方式1
16位计数器/定时器
1 0 方式2: 自动重装载的8位计数器/定时器 1
1
方式3: 两个8为计数器/定时器
3) 中断
除复位外有17个中断向量,优先级对应为0~16级。与中断有关的寄存器有:3个中断使能
寄存器IE、EIE1、EIE2,3个中断优先级控制寄存器IP、EIP1、EIP2。IE、EIE1、EIE2可以控
制允许或禁止相应的中断,IP、EIP1、EIP2可以定义相应中断为低优先级或高优先级。EA位
(EI.7)是中断允许或禁止的总开关,EA=0时,禁止所有中断,EA=1时,某项中断允许与
否由中断使能寄存器中的对应位决定。
T0溢出中断编号为1,中断向量地址为0x000B。通过将IE寄存器中的ET0位置1来允许定
时器0中断,当T0的计数值溢出(从全1变为全0)时,TF0位(TCON.5)被硬件置1,若
中断被允许,则引起T0溢出中断。TF0可以软件清0,当T0中断服务程序被执行时,TF0
自动清0。
4) A/D转换
ADC子系统有1个最高速度达200ksps的10位逐次逼近型ADC和1个温度传感器。ADC有
两个输入端口,可编程配置为单端输入或差分输入方式,由模拟通道选择寄存器AMX0P、
AMX0N控制,AMX0P选择模拟输入的正端,AMX0N选择模拟输入的负端。将AMX0N的低
5为置为全1,即选择负端接地
ADC工作在单端输入方式;当负端选择其他端口时,ADC工作在差分输入方式。
其他与AD转换有关的寄存器还有配置寄存器ADC0CF、高位数据寄存器ADC0H、低位数据
寄存器ADC0L、控制寄存器ADC0CN。ADC0CF的高5位用于选择AD转换的时钟, ADC0CN
用于控制A/D转换,包括使能ADC模块、选择启动转换的方法、启动转换、指示转换状态
等。向AD0BUSY(ADC0CN.4)写1可以启动转换,转换过程中AD0BUSY=1,转换结束时,
AD0BUSY变为0,同时中断标志位ADC0INT被置1。ADC0H、ADC0L合起来保存10位A/D
转换结果,转换结果在两个寄存器中的存放可以有左对齐和右对齐两种方式,由AD0LJST
(ADC0CF.2)决定。
A/D转换启动方法有6种,除向AD0BUSY写1可以启动外,T0、T1、T2、T3的溢出都可启
动,还有CNVSTR的上升沿触发启动。本实验A/D转换过程是:向AD0BUSY写1启动转换,
读AD0INT状态等待转换结束,当AD0INT=1时,读取结果,处理结果并启动下一次转换。
3 实验程序
本实验程序包括主程序和T0中断服务程序。主程序完成系统初始化、A/D转换和结果计算
处理等功能,中断服务程序控制P2.2脚发光二极管亮灭和闪烁的时间间隔。程序流程图如
下图所示。
4
源程序如下:
#include
unsigned int ti,tn;//定时参数
sbit LED2 = P2^2;//P2.2口发光二极管 sbit LED3 = P2^3;//P2.3口发光二极管
unsigned char h,l;//AD转换中间值 unsigned int r,rh;
unsigned int x[20];//20次AD转换结果 unsigned int sum;//20次AD转换结果之
和 unsigned int adr;//20次AD转换结果平均值
void AD_Init()
{ //AD初始化,单端输入方式 AMX0P = 0x04;//ADC正端选P2.5 AMX0N = 0xFF;//ADC负端选
GND ADC0CF = 0x40;//选择转换时钟 AD0EN = 1;//使能AD模块 AD0BUSY = 1;//启动转换 }
unsigned int AD_RW()
{ //读取AD转换结果并启动下一次转换 h = ADC0H;//AD转换结果高2位 l = ADC0L;//AD转换
结果低8位 rh = (h & 3); r = rh * 256; r = r + l; AD0INT = 0;//中断标志位置0 AD0BUSY = 1;//
启动下一次AD转换 return r; }
void T0_Init() { //T0初始化 TMOD = 0x01;//方式1 TH0 = 0xF4;//计数
值 TL0 = 0x47; TCON |= 0x10;//开始计数 }
void P2_Init()
5
{ //P2口初始化 P2MDOUT |= 0x0C;//P2.2、P2.3推挽输出 P2MDIN = 0xDF;//P2.5模拟输
入 P2SKIP = 0x2C;//P2.2、P2.3、P2.5不参与交叉开关分配 XBR1 = 0x40;//使能交叉开关 }
void ISR_Init() { //中断初始化 IE |= 0x82;//使能T0中断 }
void T0_ISR() interrupt 1 { //T0中断服务程序 ti ++; if(ti >= tn) { ti = 0; LED2 = ~LED2;//发光二
极管状态改变 } T0_Init();//重新启动T0 }
void main() { unsigned char adn = 0; PCA0MD &= ~0x40;//关闭看门狗 //变量初始
化 ti = 0; tn = 5; sum = 0; P2_Init();//P2口初始化 AD_Init();//AD初始化 T0_Init();//T0初始
化 ISR_Init();//中断初始化 while(1) { if(AD0INT == 1)//转换完毕 { EA = 0;//关中
断 x[adn] = AD_RW();//读取AD转换结果并启动下一次转换
6
EA = 1;//开中断 sum = sum + x[adn]; adn ++; }
if(adn > 19)//读取了20个值 { adn = 0; adr = sum / 20;//求平均
值 sum = 0; tn = adr /10;//确定发光二极管闪烁周期 }
LED3 = 1;//P2.3口发光二极管一直亮
}
}
4 实验结果
P2.3口发光二极管一直为点亮状态。
P2.2口发光二极管闪烁,调节电位器,可发现其闪烁频率与P2.5端口输入电压成反比