[其他产品] PIC16F877A的50HZ正弦波

[复制链接]
 楼主| waveforms 发表于 2019-4-24 14:09 | 显示全部楼层 |阅读模式
原帖链接:https://www.cnblogs.com/wangh0802PositiveANDupward/archive/2012/08/11/2633416.html


  1. #include <pic.h>//包含单片机内部资源预定义
  2. #include <math.h>

  3. unsigned char const sin_32[]={104,109,114,119,124,128,133,137,142,146,150,154,157,161,164,//15
  4. 167,169,172,174,176,177,178,179,180,180,180,180,179,178,176,175,173,171,168,165,//20
  5. 162,159,156,152,148,144,140,135,131,126,121,116,111,106,101,96,91,86,81,76,72,67,63,//23
  6. 58,54,50,46,43,39,36,33,31,28,26,24,23,22,21,20,20,20,20,21,22,24,25,27,29,32,35,38,//42
  7. 41,44,48,52,56,60,65,69,74,79,84,89,94,99
  8. };//浮点型精度高,换其他会出现尖角

  9. void work0();
  10. unsigned char set_pwm;
  11. void main(void)
  12. {   
  13.     work0();
  14.     while(1)
  15.     {
  16.     }
  17. }

  18. void work0()//m=0.8;T=(PR2+1)*4*f*TIMR2分频
  19. {
  20.     //CCPR1L=0X00;//设置CCP1,0%的脉宽输出
  21.     TRISC=0X00;//PORTC are outputs
  22.     CCP1CON=0x0C;//0000 1100,设置CCP1为PWM工作方式,且工作循环位的低两位为00
  23.     PR2=199;//设置PWM周期:(PR2+1)*4*Tosc*(TMR2预分频数1)=200u(5k)
  24.     T2CON=0x04;//Tc赋值=T*D=(PR2+1)*D=200*D
  25.     CCP1IE=1;
  26.     INTCON=0xC0;//GIE=1,开总中断,开启第一外设中断外围功能模块中断
  27.     TMR2IE=1;TMR2IF=0;
  28. }

  29. //interrupt//
  30. void interrupt pic(void)
  31. {
  32.     if(TMR2IF&TMR2IE)
  33.     {  
  34.         set_pwm++;
  35.         TMR2IF=0;CCP1IF=0;
  36.         CCPR1L=sin_32[set_pwm];
  37.         if(set_pwm==99) set_pwm=0;
  38.     }
  39. }


幸福小强 发表于 2019-4-24 22:37 | 显示全部楼层
波形发生?
幸福小强 发表于 2019-4-24 22:37 | 显示全部楼层
这个频率不过,可以很容易实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

212

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

32

主题

212

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部