找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2253|回复: 2
收起左侧

如何产生PWM方波

[复制链接]
ID:497071 发表于 2019-4-5 17:07 | 显示全部楼层 |阅读模式
STC8A8K64S4A12芯片,在P2.4管脚,需要产生一个1毫秒的方波,应该用PWM方式,应该怎么写代码呢?那位大神不吝赐教。
回复

使用道具 举报

ID:310519 发表于 2019-4-6 12:03 | 显示全部楼层
使用单片机的外设一般要配置很多寄存器,还要计算一些参数。

下载它的数据手册看看吧。

一MS,如果可以用定时器吧,比较简单。
回复

使用道具 举报

ID:155507 发表于 2019-4-6 12:12 | 显示全部楼层
我给你来个程序试试


  1. //STC8A8K64S4A12芯片,在PMW4/P2.4管脚,需要产生一个1毫秒的方波,用PWM方式

  2. #include "reg51.h"
  3. #include "intrins.h"

  4. //测试工作频率为12.0000MHz

  5. sfr     P_SW2       =   0xba;
  6. sfr     PWMCFG      =   0xf1;
  7. sfr     PWMIF        =   0xf6;
  8. sfr     PWMFDCR     =   0xf7;
  9. sfr     PWMCR       =   0xfe;

  10. #define PWMC            (*(unsigned int volatile xdata *)0xfff0)
  11. #define PWMCKS          (*(unsigned char volatile xdata *)0xfff2)
  12. #define TADCP           (*(unsigned int volatile xdata *)0xfff3)
  13. #define PWM0T1          (*(unsigned int volatile xdata *)0xff00)
  14. #define PWM0T2          (*(unsigned int volatile xdata *)0xff02)
  15. #define PWM0CR          (*(unsigned char volatile xdata *)0xff04)
  16. #define PWM0HLD         (*(unsigned char volatile xdata *)0xff05)
  17. #define PWM1T1          (*(unsigned int volatile xdata *)0xff10)
  18. #define PWM1T2          (*(unsigned int volatile xdata *)0xff12)
  19. #define PWM1CR          (*(unsigned char volatile xdata *)0xff14)
  20. #define PWM1HLD         (*(unsigned char volatile xdata *)0xff15)
  21. #define PWM2T1          (*(unsigned int volatile xdata *)0xff20)
  22. #define PWM2T2          (*(unsigned int volatile xdata *)0xff22)
  23. #define PWM2CR          (*(unsigned char volatile xdata *)0xff24)
  24. #define PWM2HLD         (*(unsigned char volatile xdata *)0xff25)
  25. #define PWM3T1          (*(unsigned int volatile xdata *)0xff30)
  26. #define PWM3T2          (*(unsigned int volatile xdata *)0xff32)
  27. #define PWM3CR          (*(unsigned char volatile xdata *)0xff34)
  28. #define PWM3HLD         (*(unsigned char volatile xdata *)0xff35)
  29. #define PWM4T1          (*(unsigned int volatile xdata *)0xff40)
  30. #define PWM4T2          (*(unsigned int volatile xdata *)0xff42)
  31. #define PWM4CR          (*(unsigned char volatile xdata *)0xff44)
  32. #define PWM4HLD         (*(unsigned char volatile xdata *)0xff45)
  33. #define PWM5T1          (*(unsigned int volatile xdata *)0xff50)
  34. #define PWM5T2          (*(unsigned int volatile xdata *)0xff52)
  35. #define PWM5CR          (*(unsigned char volatile xdata *)0xff54)
  36. #define PWM5HLD         (*(unsigned char volatile xdata *)0xff55)
  37. #define PWM6T1          (*(unsigned int volatile xdata *)0xff60)
  38. #define PWM6T2          (*(unsigned int volatile xdata *)0xff62)
  39. #define PWM6CR          (*(unsigned char volatile xdata *)0xff64)
  40. #define PWM6HLD         (*(unsigned char volatile xdata *)0xff65)
  41. #define PWM7T1          (*(unsigned int volatile xdata *)0xff70)
  42. #define PWM7T2          (*(unsigned int volatile xdata *)0xff72)
  43. #define PWM7CR          (*(unsigned char volatile xdata *)0xff74)
  44. #define PWM7HLD         (*(unsigned char volatile xdata *)0xff75)

  45. void main()
  46. {
  47.     P_SW2 = 0x80;          //使能程序访问STC8系列单片机内的特殊功能寄存器(SFR)
  48.                                                         //占空比为(PWM4T2-PWM4T1)/PWMC
  49.     PWMCKS = 0x00;                              // PWM时钟为系统时钟
  50.     PWMC = 0x2EE0;                              //设置PWM周期为2EE0H个PWM时钟
  51.     PWM4T1= 0x0000;                             //在计数值为00H地方输出低电平
  52.     PWM4T2= 0x1770;                             //在计数值为1770H地方输出高电平
  53.     PWM4CR= 0x80;                               //使能PWM4输出
  54.     P_SW2 = 0x00;                                                            //禁止访问XSFR

  55.     PWMCR = 0x80;                               //启动PWM模块

  56.     while (1);
  57. }


复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表