复制范例程序STC8G PWM中断 IO口指示灯没亮
添加了两个输出观察LED
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);
}
有一个问题啊,,你自己算过你这里设置的PWM的周期么?
就是,你先确定PWM程序能跑起来,再看周期是多少,快了你也看不见啊 PWM这一块很难,我弄了好久才明白一点儿。
页:
[1]