简单的PWM程序.doc

上传人:sk****8 文档编号:3531324 上传时间:2019-06-02 格式:DOC 页数:5 大小:31.50KB
下载 相关 举报
简单的PWM程序.doc_第1页
第1页 / 共5页
简单的PWM程序.doc_第2页
第2页 / 共5页
简单的PWM程序.doc_第3页
第3页 / 共5页
简单的PWM程序.doc_第4页
第4页 / 共5页
简单的PWM程序.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

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(0x3f3a);union adres /定义一个共用体,用于存放 10 位 A/D 转换的结

2、果int y1;unsigned char adre2;adresult; const char TABLE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,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); unsigned char QC,TONOFF=5;uns

3、igned int ad_data=0;/主程序main() ini();CCP1INIT(); /CCP1 模块的 PWM 工作方式初始化T2CON=4; /打开 TMR2,且使其前预分频为 1:1,后分频比为 1:1, 但在这个程序中后分频比用不上while(1)CCPR1L=TONOFF; /CCPR1L 与 DC1B1 与 DC1B0 共同组成占空比的可调范围,以当前程序为例,则占空比为 DC1B9:0)*Tosc*TMR2 预分频QC=0;display_voltage();adinitial_voltage();void CCP1INIT() /CCP1 模块的 PWM 工作方式初

4、始化子程序*/CCP1CON=0X3C; /设置 CCP1 模块为 PWM 工作方式,且其占它比的低两位 DC1B1 与 DC1B0 为 11INTCON=0X00; /禁止总中断和外围中断PR2=150; /设置 PWM 的工作周期, 也即 PWM 的工作频率 其中 PWM 周期=(PR2+1)*4*Tosc*TMR2 预分频比,Tosc 为MCU 的振荡周期/以当前程序为例,则 PWM 的输出频为 1/(156+1)*4*0.25us(4M 晶体)*1=6.3694267515923566878980891719745kTRISC=RC2=0; /设置 CCP1 引脚为输出方式/A/D 转

5、化初始化子程序void adinitial_voltage(void)unsigned char a=50;ad_data=0;for(a;a-;)ADCON0=0B01000001; /A/D 转换器模块工作;但 AD 转换不进行;FOSC/8ADCON1=0B11100000; /ADRESH 寄存器的高 6 位读为 0;6 位与 7 位须置 1ADIF=0; /AD 转换中断标志先清出。 while(ADGO);adresult.adre0=ADRESL;adresult.adre1=ADRESH; /读取并存储 A/D 转换结果ad_data+=adresult.y1; ADGO=1;

6、 ad_data/=50;void display_voltage(void) /电压显示函数 int bai,shi,ge,qian,temp,change; /定义 6 个临时变量temp=ad_data/208.97959183673469387755102040816*1000; /10 位 AD1024,我的电源电压为 4.9V,所心1024/4.9=208.9=209TONOFF=(ad_data/208.97959183673469387755102040816)*25.000;change=temp;qian=temp/1000; /求显示的千位 bai=temp%1000/1

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

8、RTD=TABLEge; /求个位显示的代码PORTA=0x1F; /RA5 输出低电平,点亮个位显示delay(1); /延时一定时间,保证亮度PORTD=0xff; void ini(void) TRISA=0B00000001;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=0x0;

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

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。