2022年2022年简单的PWM程序 .pdf

上传人:Che****ry 文档编号:34255276 上传时间:2022-08-15 格式:PDF 页数:5 大小:59.57KB
返回 下载 相关 举报
2022年2022年简单的PWM程序 .pdf_第1页
第1页 / 共5页
2022年2022年简单的PWM程序 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年2022年简单的PWM程序 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年简单的PWM程序 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、写了一个简单的PWM 程序,给初学者, PWM+ 数字电表用 QL200 的 VR1作输入来调节占空比,并用D10,D11 来显示 VR1 输入到 RA0的电压,/ / Author : Toby / Date : 2009/01/21 / Function : 程序用于使 CCP1模块产生分辨率为10 位的 PWM波形,占空比可调 , / MCU : PIC16F877A / C Compiler : PICC 8.05 / IDE : MPLAB IDE v8.10 / #include _CONFIG(0 x3f3a); union adres / 定义一个共用体,用于存放10 位 A/

2、D 转换的结果int y1; unsigned char adre2; adresult; const char TABLE=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0X82,0XF8,0X80,0X90; / 定义常数 0-9 的数据表格void CCP1INIT(void); void interrupt clkint(void); void adinitial_voltage(void); void display_voltage(void); void ini(void); void delay(unsigned char x); 名师资料总结 - -

3、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - unsigned char QC,TONOFF=5; unsigned int ad_data=0; / 主程序main() ini(); CCP1INIT(); /CCP1模块的 PWM 工作方式初始化 T2CON=4; / 打开 TMR2,且使其前预分频为1:1,后分频比为 1:1,但在这个程序中后分频比用不上while(1) CCPR1L=TONOFF; /CCPR1L 与 DC1B1 与 DC1

4、B0 共同组成占空比的可调范围,以当前程序为例,则占空比为 DC1B9:0)*Tosc*TMR2预分频QC=0; display_voltage(); adinitial_voltage(); void CCP1INIT() /CCP1 模块的 PWM 工作方式初始化子程序 */ CCP1CON=0X3C; / 设置 CCP1模块为 PWM 工作方式,且其占它比的低两位DC1B1 与 DC1B0为 11 INTCON=0X00; /禁止总中断和外围中断 PR2=150; /设置 PWM的工作周期 ,也即 PWM的工作频率其中 PWM周期=(PR2+1)*4*Tosc*TMR2预分频比 ,Tos

5、c 为MCU的振荡周期/ 以当前程序为例,则PWM 的输出频为1/(156+1)*4*0.25us(4M晶体)*1=6.3694267515923566878980891719745k 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - TRISC=RC2=0; /设置 CCP1引脚为输出方式 /A/D 转化初始化子程序void adinitial_voltage(void) unsigned char a=50; ad_data=

6、0; for(a;a-;) ADCON0=0B01000001; /A/D 转换器模块工作 ;但 AD 转换不进行 ;FOSC/8 ADCON1=0B11100000; /ADRESH 寄存器的高 6 位读为 0;6 位与 7 位须置 1 ADIF=0; /AD 转换中断标志先清出。while(ADGO); adresult.adre0=ADRESL; adresult.adre1=ADRESH; / 读取并存储 A/D 转换结果ad_data+=adresult.y1; ADGO=1; ad_data/=50; void display_voltage(void) / 电压显示函数 int

7、bai,shi,ge,qian,temp,change; / 定义 6 个临时变量名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - temp=ad_data/208.97959183673469387755102040816*1000; /10 位 AD1024,我的电源电压为4.9V,所心1024/4.9=208.9=209 TONOFF=(ad_data/208.97959183673469387755102040816)*2

8、5.000; change=temp; qian=temp/1000; / 求显示的千位bai=temp%1000/100; / 求显示的百位shi=(temp%100)/10; / 求显示的十位ge=temp%10; / 求显示的个位change=TABLEqian&0 x7f; / 显示一个小数点PORTD=change; PORTA=0B1111011; /RA2 输出低电平,点亮千位显示delay(1); PORTD=TABLEbai; / 查表得百位显示的代码PORTA=0 x37; /RA3 输出低电平,点亮百位显示delay(1); / 延时一定时间,保证显示亮度PORTD=TA

9、BLEshi; / 查表得十位显示的代码PORTA=0 x2F; /RA4 输出低电平,点亮十位显示delay(1); / 延时一定时间,保证亮度PORTD=TABLEge; / 求个位显示的代码PORTA=0 x1F; /RA5 输出低电平,点亮个位显示delay(1); / 延时一定时间,保证亮度PORTD=0 xff; void ini(void) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - TRISA=0B00000

10、001; TRISD=0; PORTD=0XFF; / 延时子程序void delay(unsigned char x) / 延时程序 unsigned char i,i=x; / 定义整形变量for(i=250;-i;); / 延时 void interrupt clkint(void) / 定时器中断函数 QC+; / 在这个函数中没有写TMRO=多少,主要目的是让TMR0 自由的溢出,这样计时更准确。T0IF=0 x0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁