#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit pwm=P2^1;
bit DIR;
u16 count,value,timer1;
void timer1init()
{
TMOD|=0x10;
TH1=0xff;
TL1=0xff; //1us
ET1=1; //打开定时器1中断允许
EA=1; //打开总中断
TR1=1; //打开定时器
}
//变量c当count为100时+1,10个count相当一个完整1000的timer1,第一圈,timer加满后,在结尾c才有10
//然后进行第二圈,也相当于第二个周期,开始value有10,所以前10个timer1是小于value的,于是整个1000周期中,前10为高,后990为低
//相当于一个周期时间1000里,c将其分为了100份,c每加一份,就相当于一个新的周期即将开始,再下一个周期中使用
//c越到后面,timer1因为存在一个追逐时间,此时间内c也要每过100进行+1,所以越到后面占空比会变大,不过最大也只是增加9/1000
void main()
{
timer1init(); //初始化定时器1
while(1)
{
if(count>75) //判断count,若经过了100*1us进入此判断,每过0.1ms就根据方向对变量c移位1
{
count=0;
if(DIR==1) //DIR为变量c的移动方向,此程序中c用value表示,value变化比timer1慢,每过1000只加10次
{
value++;
}
if(DIR==0)
{
value--;
}
}
if(value==750) //变量c变动的范围为0~1000,此处也有对周期的设置
{
DIR=0;
}
if(value==0)
{
DIR=1;
}
if(timer1>750) //timer1为持续进行中的时间位置,pwm周期为1000*1us
{
timer1=0;
}
if(timer1<value)
{
pwm=1;
}else{
pwm=0;
}
}
}
void time1() interrupt 3 //每过1us就进入此中断,timer1和count自加1
{
TH1=0xff;
TL1=0xff; //1us
timer1++;
count++;
}
DA转换 利用PWM.zip_DA转换_da和pwm_keil_pwm_单片机
版权申诉
148 浏览量
2022-09-23
03:09:02
上传
评论
收藏 26KB ZIP 举报
JaniceLu
- 粉丝: 79
- 资源: 1万+
最新资源
- 隐藏文件展示工具,用来展示被病毒隐藏的文件
- 基于Matlab的图像分割系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB指纹门禁GUI设计源码+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的仪表指数识别系统霍夫曼变换+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 的霍夫曼变换答题卡识别带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 疲劳驾驶检测专识别GUI源码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于matlab的虫害侵蚀系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的教室人数统计系统 可以统计正脸情况下的人数+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计
- 基于MATLAB的水果分级系统,带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的车票发票识别系统带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈