- 打卡等级:偶尔看看II
- 打卡总天数:20
- 最近打卡:2025-07-24 22:46:38
高级会员
- 积分
- 837
|
感谢大家都鼓励和帮助
下载了很多例程
各种控制比较复杂
寄存器非常多
一时还消化不了
目前我只想由浅入深
先把P2.0 和P2.2PWM控制电机正反转实现
程序改了又改 试了又试
搞到筋疲力尽 还是没有输出
程序先进行引脚配置
PWMA_PS |= PWM1_2; //选择 PWM1_2 通道
PWMA_PS |= PWM2_2; //选择 PWM2_2 通道
后面的EER MR寄存器还搞不懂
刚刚做了一块PCB板
用P2.0 P2.2分别控制电机正反转
先按照官方程序测试效果
目前只实现IO口点亮
还是不知道怎么修改参数
达到工作要求
脉冲频率和占空比可变
参考查阅寄存器 和PWM工作原理
发现PWM控制牵涉的寄存器比较多
做文档研究两三天还不是很明白
#include "STC8H.h" //
#include "intrins.h" //
#define uchar unsigned char //
#define uint unsigned int //
#define ENO1P 0x01
#define ENO2P 0x04
#define PWM1_2 0x01 //P:P2.0 N:P2.1
#define PWM2_2 0x04 //P:P2.2 N:P2.3
sbit OutPut0=P2^0; //
sbit OutPut1=P2^2;
uchar SS;
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
void Delay100ms(uint x) //
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<11000;j++);
}
/*************关所有输出*******************************/
void Init_io()
{
P1M0=0X00; //
P1M1=0X00; //
P2M0=0x05;
P2M1=0x00;
P3M0=0X00; //
P3M1=0X00; //
P5M0=0X00; //
P5M1=0X00; //
}
/******************** 主函数 **************************/
void main(void)
{
P_SW2|=0X80;
EA=1;
Init_io();
for(SS=0;SS<5;SS++)
{
OutPut0=0;
OutPut1=0;
Delay100ms(50);
OutPut0=1;
OutPut1=1;
Delay100ms(50);
}
//
PWMA_PS |= PWM1_2; //选择 PWM1_2 通道
PWMA_PS |= PWM2_2; //选择 PWM2_2 通道
PWMA_CCER1=0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
// PWMA_CCER2=0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR1=0x60; //设置 PWM1 模式1 输出
PWMA_CCMR2=0x60; //设置 PWM1 模式1 输出
PWMA_CCER1=0x01; //使能 CC1E 通道, 高电平有效
// PWMA_CCER2=0x01; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCR1=100; //设置占空比时间
PWMA_CCR2=100; //设置占空比时间
PWMA_ARR=2000; //设置周期时间
PWMA_ENO |= ENO1P; //使能输出
PWMA_ENO |= ENO2P; //使能输出
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1 |= 0x81; //ARR预装载,开始计时
while(1)
{
} //
} //
|
|