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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【java毕业设计】springboot医学电子技术线上课堂系统(springboot+vue+mysql+说明文档).zip
- java 输入任意字符串找回文
- NewModel_3.2.2(1).zip
- 上海交通大学版 asp.NET第152页-运用ADO.NET访问数据库(注册账号并在网站中查询)
- 【源码+数据库】利用Java Swing框架与Socket技术开发的即时通讯系统,系统分为客户端和服务端,类似于qq聊天
- 计算机科学与技术数据结构实践考核要求.ppt
- 【java毕业设计】springboot中医院问诊系统的设计与实现(springboot+vue+mysql+说明文档).zip
- MATLAB大数计算工具箱及其用法
- 基于 python 实现的微博的数据挖掘与社交舆情分析
- Screenshot_20241105_140450.jpg