历史上的今天
今天是:2024年12月18日(星期三)
2019年12月18日 | 51单片机测量PWM脉冲宽度LCD1602显示当前PWM占空比频率
2019-12-18 来源:51hei
此程序通过两个定时器一个外部中断,测量PWM高电平时间以及周期,计算并在1602显示出占空比 周期 高电平时间,只需让脉冲在P3^2口输入即能测得数据。。
单片机源程序如下:
#include #include typedef unsigned char uint8; typedef unsigned int uint16;//数据类型重定义 uint8 count = 0; //计进入外部中断次数 bit flag = 1; //捕获结束标志位 long Pwm_All; //PWM的周期 long Pwm_High; //PWM的高电平时间 占空比=Pwm_High/Pwm_All void delay(long i) { while(i--); } void Interrupt_Init() { /*定时器1为工作模式1 16位计数器 由TR1直接启动 定时器0为工作模式1 16位计数器 由GATE和TR0共同启动*/ TMOD = 0x19; TH1 = 0; TL1 = 0; TH0 = 0; TL0 = 0; IT0 = 1;//下降沿触发 IT1 = 1; //TR0 = 1; //GATE高电平启动 EX0 = 1; EA = 1; } void main() { uint16 Pwm_percentage; //PWM占空比 Interrupt_Init(); LCD1602_Initialize( ); LCD1602_PrintString(1,1,"ALL:"); LCD1602_PrintString(1,10,"us"); LCD1602_PrintString(2,1,"HIGH:"); LCD1602_PrintString(2,11,"us"); while(1) { if(flag) { Pwm_percentage = Pwm_High*1000 / Pwm_All; LCD1602_PrintChar(1,12,0x30+Pwm_percentage/100); LCD1602_PrintChar(1,13,0x30+Pwm_percentage%100/10); LCD1602_PrintChar(1,14,'.'); LCD1602_PrintChar(1,15,0x30+Pwm_percentage%10); LCD1602_PrintChar(1,16,'%'); LCD1602_PrintChar(1,5,0x30+Pwm_All/10000); LCD1602_PrintChar(1,6,0x30+Pwm_All%10000/1000); LCD1602_PrintChar(1,7,0x30+Pwm_All%1000/100); LCD1602_PrintChar(1,8,0x30+Pwm_All%100/10); LCD1602_PrintChar(1,9,0x30+Pwm_All%10); LCD1602_PrintChar(2,6,0x30+Pwm_High/10000); LCD1602_PrintChar(2,7,0x30+Pwm_High%10000/1000); LCD1602_PrintChar(2,8,0x30+Pwm_High%1000/100); LCD1602_PrintChar(2,9,0x30+Pwm_High%100/10); LCD1602_PrintChar(2,10,0x30+Pwm_High%10); flag = 0; //计算完一次清零 } delay(70000); } } void EXTI0 () interrupt 0 { count++; if(count == 1) //第一次下降沿,启动定时器1 { TR1 = 1; TR0 = 1; } if(count == 2) //第二次下降沿,一整个周期完毕 { EX0 = 0; //关闭外部中断,防止被其他打断计算 TR1 = 0; //周期停止计数 TR0 = 0; //高电平时间停止计数 Pwm_All = TH1; //获取数据 Pwm_All = (Pwm_All<<8)+TL1; Pwm_High = TH0; Pwm_High = (Pwm_High<<8)+TL0; TH1 = 0; //清零为下一次做准备 TL1 = 0; TH0 = 0; TL0 = 0; count = 0; flag = 1; EX0 = 1; //开启下一次计算 TR1 = 0; TR0 = 0; } }
下一篇:我的单片机超声波测距课程设计
史海拾趣
|
我学的电气工程及其自动化,准备报个单片机提高班,我的考研有控制理论和电气工程两个大专业,电气工程里面的专业如下080801电机与电器 080802电力系统及其自动化 080803高电压与绝缘技术 080804电力电子与电力传动 080805电工理论与新技术 感觉 ...… 查看全部问答> |
|
一段usbd的中断服务程序——为什么第4次中断以后,不再进入这段中断服务程序 这是我在网上找到的一个跟我有着同样原因的人的帖子: 通过串口打印,可以知道当usb线插入pc时,有中断产生. void __irq IsrUsbd(void) //usb设备中断服务程序 { U8 usbdIntpnd,epIntpnd; U8 saveIndexReg=rINDEX_REG; usbdIntpnd=rUSB_I ...… 查看全部问答> |
|
发个软件bf531 jtag的软件,有条件帮忙测试一下,顺便散点分 是ADI,blackfin533系列的Jtag Flash下载器,穷人用用的. 我是有官方的仿真器,刚好这段时间做个东西,需要操作bf531的jtag口,所以 干脆做了这个小东西玩玩. 有条件的兄弟帮忙测试一下. 好久也没来,顺便散分露个脸: 介绍地址: http://www.fcdpj.c ...… 查看全部问答> |
|
(郭天祥)新概念51单片机C语言教程 入门、提高、开发、拓展全攻略 谈起我学单片机经历,可以说是从郭天祥老师51视频教程开始入门的,可以说是他把我代入单片机的世界!!下面是郭老师写的一本书,非常经典!!值得看N边! 可以引导单片机初学者少走弯路。。。。努力学习!!鄙视光下不回帖的!!… 查看全部问答> |




