📄 text1.c
字号:
#include <REG938.h> /*头文件的包含*/
#include <intrins.h>
#define uchar unsigned char /*宏定义*/
#define uint unsigned int
#define ulong unsigned long
#define _Nop() _nop_() /*定义空指令*/
uint pwm_b = 1000,pwm_c = 1000;
//sbit motor_stop=P0^3;
sbit cw_flag=P0^3;
sbit ccw_flag=P0^2;
uchar cw=0;
uchar ccw=0;
void CCU_init(void);
void outb_pwm(void);
void outc_pwm(void);
void key_scan(void);
void dally_Nus(uint data us);
void dally_Nus(uint data us)
{
do
{
us--;
}
while (us > 0);
}
/***********************************************************
CCU初始化
************************************************************/
void CCU_init(void)
{
OCB=1;//P89LPC938的引脚P1.6
OCC=1;//P89LPC938的引脚P1.7
TPCR2H=0x00; //
TPCR2L=0x18; // 设置CCU预分频系数为25
TCR21=0x04; // 设置锁相环输入为7372800Hz
CCCRB=0x01; // PWM 输出通道 B
CCCRC=0x01; // PWM 输出通道 C
TCR20=0x80; // 启动 PLL, 输出方式: stop
OCB=1; // 等待一个周期
OCC=1;
while(PLEEN==0);// 等待 PLL 锁定
TOR2H=0x07; // 重装值 0x1770=6000
TOR2L=0xD0; //
TCR21|=0x80; // 更新重装值
OCRBH=0x00; // 初始化占空比 B
OCRBL=0x00;
TCR21|=0x80; // 更新占空比数据
TCR20=0x82; // 设置输出模式为不对称 PWM
}
/***********************************************************
通道B电压控制
************************************************************/
void outb_pwm(void)
{
uchar data pwmh,pwml;
pwmh = pwm_b / 256;
pwml = pwm_b % 256;
OCRBH = pwmh;
OCRBL = pwml;
TCR21 |= 0x80;
}
/***********************************************************
通道C电压控制
************************************************************/
void outc_pwm(void)
{
uchar data pwmh,pwml;
pwmh = pwm_c / 256;
pwml = pwm_c % 256;
OCRCH = pwmh;
OCRCL = pwml;
TCR21 |= 0x80;
}
/********************************************************************
键盘检测
********************************************************************/
void key_scan(void)
{
if(cw_flag==0)
{
cw=1;
ccw=0;
}
if(ccw_flag==0)
{
cw=0;
ccw=1;
}
}
/********************************************************************
初始化、主控制
********************************************************************/
void main(void)
{
int i,j;
AUXR1=0x00;
P0M1=0x00; //0000 0000
P0M2=0x00; //0000 0000 准双向
P1M1=0xC0; //0000 0000
P1M2=0xC0; //0000 0000 P1.7 P1.6开漏
P2M1=0x00; //0000 0000
P2M2=0x00; //0000 0000 准双向
P3M1=0x00; //0000 0000
P3M2=0x00; //0000 0000 准双向
P0 = 0xbf;
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
SP = 0x7f; //初始化堆栈
CCU_init();
dally_Nus(5000);
while(1)
{
key_scan();
if(cw==1)
{
for(i=200;i>0;i--)
{
outb_pwm();
}
while(1);
cw=0;
}
if(ccw==1)
{
for(j=400;j>0;j--)
{
outc_pwm();
}
ccw=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -