ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:31.50KB ,
资源ID:3531324      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3531324.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简单的PWM程序.doc)为本站会员(sk****8)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

简单的PWM程序.doc

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个工作日内予以改正。