中科因仑“3+1”工程特种兵精英论坛

标题: 基于AVR比较匹配输出的脉冲宽度调制 [打印本页]

作者: jerryzhai    时间: 2014-7-31 11:17
标题: 基于AVR比较匹配输出的脉冲宽度调制
  1. /******************************************************
  2. //文件名称:利用T/C0的PWM功能产生正弦波
  3. //作    者:翟志刚
  4. //版    本:
  5. //日    期:2014.7.31
  6. //说    明:
  7. //修改记录:
  8. *******************************************************/

  9. #include <iom16v.h>
  10. #include <macros.h>
  11. #define  uchar unsigned char
  12. #define  uint  unsigned int

  13. uchar auc_SinParam[] = {
  14. 128,134,140,147,153,159,165,171,177,182,188,193,198,204,208,213,
  15. 218,222,226,230,233,237,240,242,245,247,249,251,252,253,254,254,
  16. 254,254,253,252,251,250,248,246,244,241,238,235,232,228,224,220,
  17. 215,211,206,201,196,191,185,179,174,168,162,156,150,144,137,131,
  18. 125,119,112,106,100,94,88,82,77,71,65,60,55,50,45,41,
  19. 36,32,28,24,21,18,15,12,10,8,6,5,4,3,2,2,
  20. 2,2,3,4,5,7,9,11,14,16,19,23,26,30,34,38,
  21. 43,48,52,57,63,68,74,79,85,91,97,103,109,116,122,128};         // 128点正弦波样本值

  22. uchar X_LUT = 0;

  23. // T/C0 溢出中断服务
  24. #pragma interrupt_handler timer0_ovf:10
  25. void timer0_ovf(void)
  26. {
  27.         OCR0 = auc_SinParam[X_LUT++];
  28.         if(X_LUT > 128)
  29.                 X_LUT = 0;

  30. }

  31. void main(void)
  32. {
  33.         DDRB=0x08;                                        // PB3输出方式,作为OC0输出PWM波

  34.         TCCR0=0x69;                 //快速PWM初始化
  35.         OCR0=128;

  36.         TIMSK=0x01;                                        // 允许T/C0溢出中断

  37.         SREG=0x80;                                        // 开放全局中断

  38.         while (1)
  39.     {

  40.     };
  41. }

复制代码



作者: 张衍波    时间: 2014-8-3 09:04
大神真棒,,




欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4