




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*-零耗时低频宽脉冲软PWM信号控制Keil C51演示程序C51文件PwmDemo.c HotP作于2004.11.17与大雁塔村队部在uV3中对PWM信号进行实时仿真效果逼真。-*/#include /#include #include /*-AT89S5X SFR定义(REGX52.h中未定义)-*/sfrAUXR= 0x8e;sfrWDTRST= 0xa6;sfr16 TIMEER2 = 0xcc;sfr16 RCAP2= 0xca;/*-PWM管脚定义-*/sbitPWM= P10;/可以为任意IO管脚typedef struct Systemstruct/系统数据结构unsigned int PwmCount;/7002300uSunsigned int RamTest;/内部ram自检变量/*-注意将STARTUP.A51中的IDATALEN改写为0,RamTest才能完成MCU掉电自检。IDATALENEQU00H; the length of IDATA memory in bytes.-*/SystemData;/系统数据结构(此时只是定义了一个新的数据类型SystemData)/全局变量定义(全局结构)SystemData SystemBuffers;/申请系统数据结构缓冲区#define T2_20mS -20000 /MCU主频12MHz,12分频,T2_20mS=20MS/*-系统函数-*/void MainInit(void);/系统初始化void ClrWdt(void);/喂狗void SystemInit(void);/系统初始化void SystemSetup(void);/系统设置void SystemIoInit(void);/系统接口初始化void UserSetup(void);/用户运行环境设置void TimeInit(void);/定时器定时参数初始化/*-主程序初始化-*/void MainInit(void)/系统初始化SystemIoInit();/系统接口初始化ClrWdt();/清除看门狗计数器if (SystemBuffers.RamTest != 0x55aa) /内存测试SystemInit();/系统上电初始化SystemSetup();/系统运行环境设置UserSetup();/用户运行环境设置void SystemInit(void)/系统初始化SystemBuffers.RamTest = 0x55aa;/内存初始化void SystemSetup(void)/系统设置AUXR = 0x01;/关闭EMITimeInit();/定时器定时参数初始化IP = 0x20;/中断优先级ET2void UserSetup(void)/用户运行环境设置/*-在此加入用户运行环境设置代码-*/void SystemIoInit(void)IE = 0x00;/关闭中断P0 = 0xff;/P0口初始化P1 = 0xfe;/P1口初始化,PWM=0P2 = 0xff;/P2口初始化P3 = 0xff;/P3口初始化void TimeInit()/*-定时器0定时参数设置-*/TL0 = 0;TH0 = 0;/TR0 = 1;/启动定时器0/*-定时器1定时参数设置-*/TL1 = 0xfd;TH1 = 0xfd;PCON = 0x00;/SMOD_=0,GF0_=0;/清除疯狗标志/TR1 = 1;/启动定时器1/*-定时器2定时参数设置-*/TIMEER2 = T2_20mS;/上电20mS后PWM开始工作PWM = 0;/上电后无PWM信号SystemBuffers.PwmCount = 700;/首次PWM脉宽为700uSRCAP2= 0 - SystemBuffers.PwmCount;/首次PWM脉宽为700uSTR2= 1;/启动定时器2(上电后20mS内PWM信号为低电平)/*-定时器参数设置-*/TMOD= 0x22;/定时方式(8位自动装载)/*-外部INT0中断服务程序(PWM+10uS)-*/void int0proc() interrupt IE0_VECTOR using 2/*-用户只能改写全局变量SystemBuffers.PwmCount,不能改写静态变量PwmCount-*/if (SystemBuffers.PwmCount 700) /PWM高电平脉宽下界SystemBuffers.PwmCount -= 10;/递减未越界else SystemBuffers.PwmCount = 2300;/递减越界翻到上界/*-定时器T1中断服务程序-*/void t1proc() interrupt TF1_VECTOR using 2/*-在此加入用户代码(与串口复用T1)-*/*-串口SIO中断服务程序-*/void sioproc() interrupt SIO_VECTOR using 2if (RI) /接收中断RI = 0;/*-在此加入用户串口接收代码-*/if (TI) /发送中断TI = 0;/*-在此加入用户串口发送代码-*/*-定时器T2中断服务程序(20mS)零耗时低频宽脉冲软PWM信号控制演示程序软件工作环境及要求:MCU主频12MHz,软PWM控制IO模拟。PWM脉宽调节10uSPWM频率20mS=50Hz, PWM高电平脉宽700uS2300uS,PWM低电平脉宽19300uS17700uS零耗时并非不耗时。只是没用软件空等待等恼人的函数。其主要原理是利用低频宽脉冲软PWM信号的“低速”而T2的16位定时器自动装载功能。T2在每个PWM周期内中断两次。即PWM高电平和PWM低电平各中断1次。合理应用RCAP2的预装载功能并进行简单的减法运算而轻松完成任务的要求。本演示程序只需经过简单的修改,即可实现变PWM频率等功能。为演示方便未用宏定义,否则会更通用。但必须在“低频宽脉冲”的相对条件下。本文纯属虚构,若有雷同请原谅!-*/void t2proc() interrupt TF2_VECTOR using 1static unsigned int PwmCount = 700;/系统内部PWM高电平PwmCount(用户无法访问)/*-PWM软件IO模拟,任务中未加关PWM控制,可以再加限定/PWM电平信号翻转标志。即:SystemBuffers.PwmCount=0为关闭PWM电平信号输出(PWM=0)注意SystemBuffers.PwmCount不能过小.本软PWM控制模块与Windows的原则相同-不主张用户直接开展PWM管脚,而是控制SystemBuffers.PwmCount变量。例:-if (SystemBuffers.PwmCount = 0) /关断PWM信号。(不主张用户直接开展PWM管脚)PWM = 0;/关闭PWM电平信号输出,并强迫执行RCAP2 = 0 - PwmCount;RCAP2=0(最宽)PwmCount = 0;/PWM高电平脉宽为0,PWM低电平脉宽为T2的最大定时时间。else-*/PWM = PWM;/PWM电平信号翻转TF2 = 0;/清除标志if (PWM) /在PWM高电平时至少有700uS的预算时间/*-用户只能改写全局变量SystemBuffers.PwmCount,不能改写静态变量PwmCount-*/PwmCount = SystemBuffers.PwmCount;/应该在PWM下降沿处取用户PWM高电平PwmCount /*-此时RCAP2早已将PWM高电平PwmCount装入到TIMEER2中故此时应该计算PWM低电平20mS-PwmCount到RCAP2中-*/RCAP2 = 0 - (20000 - PwmCount);/注意定时器是+1器RCAP2 = PwmCount - 20000;/(优化计算)注意定时器是+1器(RCAP2首次为-19300)else /在PWM低电平时至少有17700uS的预算时间/*-此时RCAP2早已将PWM低电平20mS-PwmCount装入到TIMEER2中故此时应该计算PWM高电平PwmCount到RCAP2中-*/RCAP2 = 0 - PwmCount;/注意定时器是+1器(RCAP2首次为-700)/*-PWM高电平RCAP2定时时间 + PWM低电平RCAP2定时时间 = PWM周期20mS-*/void ClrWdt(void)/喂狗WDTRST = 0x1e;/8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 1120:2025 EN Conveyor belts - Determination of strength of mechanical fastenings for textile conveyor belts- Static test method
- 商场安全员培训课件
- 2025年汽车行业智能网联技术发展前景研究报告
- 2025年可再生能源行业可再生能源发电技术及市场前景研究报告
- 2025年风电行业风能利用技术发展前景研究报告
- 2025年电信通讯行业5G技术应用前景研究报告
- 2025年区块链行业区块链数字资产交易市场前景研究报告
- 定海区2025年浙江舟山市定海区环境卫生管理中心编外招聘2人笔试历年参考题库附带答案详解
- 大足区2025重庆大足区某机关事业单位招聘2人笔试历年参考题库附带答案详解
- 商品食品安全培训资料课件
- 离子检验-教案-
- GB/T 12643-2025机器人词汇
- Unit 5 Lesson 20 The Spring Festival Is Coming!(说课稿)-2024-2025学年冀教版(三起)英语五年级上册
- 智能悬架系统集成开发关键技术与实践-2024-12-技术资料
- 应用PDCA降低药占比
- 分包商安全管理规定(4篇)
- 超重与失重+说课高一上学期物理人教版(2019)必修第一册
- 公司收取管理费协议书范本
- JTS-165-6-2008滚装码头设计规范-PDF解密
- 设备维修与保养(课件)
- 医院培训课件:《和谐医患关系的建构与医疗纠纷的应对》
评论
0/150
提交评论