找回密码
 立即注册
查看: 315|回复: 3

复制范例程序STC8G PWM中断 IO口指示灯没亮

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-14 07:09:01

15

主题

51

回帖

579

积分

高级会员

积分
579
发表于 2024-6-13 14:03:37 | 显示全部楼层 |阅读模式

添加了两个输出观察LED PWM中断.png
sbit    PWM1     =   P3^5;
sbit    PWM2     =   P3^7;


    P3M0 = 0xF0; //
    P3M1 = 0x00;

P3.4 P3.5 P3.6 P3.7强推挽

第一次学习测试STC8GPWM

发现和定时器控制差不多
没有特殊的地方需要设置
IO口目测无反应


#include "reg51.h"
#include "intrins.h"

sfr     P_SW2   =   0xba;

sfr     PWMSET  =   0xF1;
sfr     PWMCFG01 =  0xF6;

#define PWM0CH      (*(unsigned char volatile xdata *)0xFF00)
#define PWM0CL      (*(unsigned char volatile xdata *)0xFF01)
#define PWM0CKS     (*(unsigned char volatile xdata *)0xFF02)

sfr     P0M1    =   0x93;
sfr     P0M0    =   0x94;
sfr     P1M1    =   0x91;
sfr     P1M0    =   0x92;
sfr     P2M1    =   0x95;
sfr     P2M0    =   0x96;
sfr     P3M1    =   0xb1;
sfr     P3M0    =   0xb2;
sfr     P4M1    =   0xb3;
sfr     P4M0    =   0xb4;
sfr     P5M1    =   0xc9;
sfr     P5M0    =   0xca;
sbit    PWM1     =   P3^5;
sbit    PWM2     =   P3^7;
sbit    P10     =   P1^0;
sbit    P11     =   P1^1;

void PWM0_Isr() interrupt 22
{
    if (PWMCFG01 & 0x08)
    {
        PWMCFG01 &= ~0x08;                      //清中断标志
        P10 = !P10;      
                               //测试端口
        PWM1=~PWM1;
        PWM2=~PWM2;
    }
}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x03;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0xF0; //
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    PWMSET = 0x01;                              //使能PWM0模块(必须先使能模块后面的设置才有效)

    P_SW2 = 0x80;                                //使能访问XFR特殊功能寄存器
    PWM0CKS = 0x0f;                             //PWM0时钟为系统时钟/16
    PWM0CH = 0x01;                              //设置PWM0周期为256个PWM0时钟
    PWM0CL = 0x00;
    P_SW2 = 0x00;                                //禁止访问特殊功能寄存器

    PWMCFG01 = 0x05;                            //启动PWM0模块并使能PWM0计数器中断
    EA = 1;

    while (1);
}



回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-13 15:35:14 | 显示全部楼层
有一个问题啊,,你自己算过你这里设置的PWM的周期么?

参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-13 16:21:59 | 显示全部楼层
就是,你先确定PWM程序能跑起来,再看周期是多少,快了你也看不见啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-6-13 17:09:05 | 显示全部楼层
PWM这一块很难,我弄了好久才明白一点儿。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 17:17 , Processed in 0.127382 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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