C51代码(PWM).pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
该代码是基于C51语言实现的脉宽调制(PWM)控制程序,适用于8051微控制器。以下是对代码中的关键知识点的详细解释: 1. **头文件**: - `#include <reg51.h>`:包含了51系列单片机的基本寄存器定义,用于操作P0、P1、P2、P3等端口。 - `#include <intrins.h>`:提供了51系列单片机的一些内联函数,如位操作等。 2. **端口定义**: - `sbit K1 = P1^4` 和 `sbit K2 = P1^5` 分别定义了P1口的第四位和第五位为按键K1和K2,用于控制PWM的增减。 - `sbit P00 = P0^1` 定义了P0口的第一位为输出信号P00。 - `sbit BEEP = P3^7` 定义了P3口的第七位为蜂鸣器BEEP。 3. **变量初始化**: - `unsigned char PWM=0xe7`:定义了一个无符号字符型变量PWM,并赋予初始值0xe7,用于存储PWM脉冲宽度。 4. **函数声明**: - `void Beep()`:蜂鸣器子程序,用于控制蜂鸣器的发声。 - `void delayms(unsigned char ms)`:延迟毫秒级的子程序,用于实现定时功能。 - `void delay(unsigned char t)`:延迟单周期的子程序,用于配合毫秒级延迟实现更精确的定时。 5. **主函数main**: - 设置P1口为全高电平,TMOD寄存器设置为模式2,即工作在PWM方式。 - TH0和TL0设置50us的延时常数,用于定时器0的计数,TH1和TL1则分别用于设置PWM的脉宽。 - 开启全局中断EA,以及定时器0(ET0)和定时器1(ET1)的中断。 - 启动定时器0(TR0),进入无限循环,通过按键K1和K2控制PWM脉宽的增加和减少,当达到最大或最小值时,触发蜂鸣器。 6. **定时器中断服务子程序**: - `timer0() interrupt 1`:定时器0中断服务程序,用于重置定时器并更新PWM值,启动输出到P00端口。 - `timer1() interrupt 3`:定时器1中断服务程序,用于结束输出到P00端口,即关闭PWM输出。 7. **蜂鸣器子程序Beep**: - 使用一个循环来控制蜂鸣器的开与关,每次循环延迟100ms,通过改变BEEP的电平状态使蜂鸣器发出声音,最后关闭蜂鸣器并等待100ms。 8. **延迟子程序**: - `delay()` 函数通过循环实现单周期延迟。 - `delayms()` 函数用于实现毫秒级延迟,可能是通过调用`delay()`函数来实现。 这个程序通过定时器0和定时器1实现了PWM输出,并通过按键控制脉宽变化,同时利用蜂鸣器提供反馈,显示当前的PWM状态。它展示了如何在8051微控制器上进行基本的IO操作、中断系统以及定时器的使用。
剩余19页未读,继续阅读
- 粉丝: 1
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- vs2019 c++20 语法规范 头文件 <ratio> 的源码阅读与注释,处理分数的存储,加减乘除,以及大小比较等运算
- 基于Kotlin语言的Android开发工具类集合源码
- 零延迟 DirectX 11 扩展实用程序.zip
- 基于Java的语音识别系统设计源码
- 基于Java和HTML的yang_home766个人主页设计源码
- 基于Java与前端技术的全国实时疫情信息网站设计源码
- 基于鸿蒙系统的HarmonyHttpClient设计源码,纯Java实现类似OkHttp的HttpNet框架与优雅的Retrofit注解解析
- 基于HTML和JavaScript的廖振宇图书馆前端设计源码
- 基于Java的Android开发工具集合源码
- 通过 DirectX 12 Hook (kiero) 实现通用 ImGui.zip