//硬件资源:stc12C5608
//初始化程序
//系统时钟,时钟110592MHZ,为保证pwm周期是20ms,则定时器中断频率是12800HZ
void init()
{
P1=0xff;
P3=0x7f;
////
TMOD=0x22; /定时器0,1都工作在自动重装模式,/
TH0=0xB8; //每秒12800个脉冲
TL0=0xB8;
TH1=0xfd; /不倍速 9600,8,0,1/
TL1=0xfd;
PCON=0x00; //PCON=0x80则波特率加倍
SCON=0x50;
//
CCON = 0; //Initial PCA control register
//PCA timer stop running
//Clear CF flag
//Clear all module interrupt flag
CL = 0; //Reset PCA base timer
CH = 0;
CCAPM1 =0; //disable PCA module-1
CMOD = 0x40; //Set PCA timer clock source as timer0
//Disable PCA timer overflow interrupt
CCAP0H = CCAP0L = 0xff; //PWM0 port output 0% duty cycle square wave
CCAPM0 = 0; //PCA module-0 work in 8-bit PWM mode
//and no PCA interrupt
//CCAP1H = CCAP1L = 0xff; //PWM1 port output 0% duty cycle square wave
//PCAPWM1 = 0x03;
//CCAPM1 = 0x42; //PCA module-1 work in 8-bit PWM mode
//and no PCA interrupt
IT1=1; //使能边沿触发
TR1=1;
TR0=1;
IE=0x92; //7 EA 中断使能位: 5 定时器2中断使能。 4 ES 串口中断使能。
//3 定时器1溢出中断使能。2 EX1 外部中断1使能。1 ET0 定时器0溢出中断使 能。 0 EX0 外部中断0使能。
IP=0x02;
}
//PWM0输出程序
//ispeed 是占空比,值0-255,输出脉宽为 20msispeed/256
//当ispeed=0时,关闭PWM
void setspeed(uchar ispeed)
{
uchar i;
if(ispeed)
{
PWM=1;
CH=0;
CL=0;
i=0xff-ispeed;
CCAP0H = CCAP0L =i; //PWM0 port output 0% duty cycle square wave
CCAPM0 =0x42;
CR=1;
}
else
{
CCAP0H = CCAP0L = 0xff; //PWM0 port output 0% duty cycle square wave
CCAPM0 =0;
CCON=0;
CR=0;
PWM=0;
}
}4路PWM波绝不可能独立控制六足机器人的18个舵机! 18个舵机必须由18路PWM波控制。 PWM波,不一定非得依赖单片机内部的PWM模块,我见过比较高档的ATMEGA128也才8路PWM。用普通的I/O口配合定时器就应该能做到;不过18路的协调是一个难题。串口传输协议、TCP-IP协议、ADC、中断应用、Flash读写、LCD驱动、I2C、SPI、USB、SD卡、Linux *** 作系统移植等等,有很多可以做的,自动控制系统、自动检测、与PC软件互联你用的是Altera还是xilinx的IP核?
一般的ip核都有自动生成工具,比如Altera有megacore wizard,按照你需要的功能enable或者disable选项就可以了。具体步骤可以上Altera或者Xilinx的网站,搜索你需要的以太网ip核关键字,比如GE或者FE,以及是否需要MAC,PCS功能等。
仿真方面,ip核提供商都是考虑好了的:提供有仿真模型,一般生成core的时候都有sim文件夹,可以用来实现仿真。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)