⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initialization.c

📁 c8051f020pwm 基于c8051f020的编程
💻 C
字号:
/*--------------文件信息--------------------------------------------------------------------------------
**文   件   名: c8051f020.c
**创   建   人: 郑仙麟 S-509 电力电子实验室
**创  建 日 期:2008.03.25
**描        述:作为c8051f020单片机实验板的的基层源程序模板。
**说        明:不要在此直接编程,请复制使用
**------------------------------------------------------------------------------------------------------
**------------------------------------------------------------------------------------------------------
**--------------当前版本修订----------------------------------------------------------------------------
** 修改人:
** 日 期:2008.03.25
** 描 述:
**说明:TX0=P0^0 RX0=P0^1 SCK=P0^2 MISO=P0^3 MISO=P0^4 NSS=P0^5 SDA=P0^6 SCK=P0^7
        P1口作为AIN1使用
        CEX0=P2^0 CEX1=P2^1 CP0=P2^3  T0=P2^4 INT0=P2^5 
        P2^6P2^7做扩展用(可用于扩展成TX1,RX1,CP1,T1,INT1)
        P3口有于LCD的控制(1602用3根320240用5根12864用6根其余的可用于扩展)
        P4口做为LCD的数据口
        P5口做为电机方向控制引脚(但不可位操作,写一次要数据要把低4位都一次)
        P4P5为推挽输出.DIR1A=P5^0; DIR1B=P5^1; DIR1C=P5^2;  DIR1D=P5^3;  //方向控制管脚
**------------------------------------------------------------------------------------------------------
**------------------------------------------------------------------------------------------------------
**--------------当前版本修订----------------------------------------------------------------------------
** 修改人:
** 日 期:2008.04.04
** 描 述:
**说明:pwm的设置
**------------------------------------------------------------------------------------------------------
**------------------------------------------------------------------------------------------------------*/
#include <c8051f020.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit INT0=P2^5;
sbit lcdrw=P3^0;
sbit lcdcs=P3^1;
sbit lcdrs=P3^2;
/***********************************************************************/
/*		                        函数的声明            	       */
/***********************************************************************/
void config (void) ;
void delay1ms(uint time);
void spi_cfg(uchar spi0cfg,uchar spi0ckr,uchar spi0cn);
void SendSPIByte(unsigned char ch);
unsigned char ReceiveSPIByte();
void pcaini(void);
void pca0ini(void);
void pca1ini(void);
void PWM0_set(uchar low0);
void PWM1_set(uchar val1);
void PWM_init(void);
void AmplidyneSteeringWheel(uchar direction);
/***********************************************************************/
/*		                         初始化配置            	       */
/***********************************************************************/
void config (void) 
{   
	EA=0;
	WDTCN = 0x07;				//对WDTCN寄存器复位
        WDTCN = 0xDE;   			//看门狗禁止,写入0XDE后4个系统周期后在写入0XAD可将WDT禁止
        WDTCN = 0xAD; 				//看门狗禁止  	
	EA=1;
	XBR0=0xD7;					//交叉开关配置的几种配置方案见Text2
	XBR1=0x06;
	XBR2=0x40;
	P1MDIN=0x00;
	P0MDOUT = 0xFF;
	P1MDOUT = 0x00;
	P2MDOUT = 0xFF;
	P3MDOUT = 0xFF;
	P74OUT  = 0x07;
	INT0=1;
	EMI0CF=0x13;   				//EMD2(EMI0CF4)=0,非复用方式;
    OSCXCN = 0x00;	
    OSCICN = 0x17; 				//采用内部晶振,频率为0x17->16MHZ  0x16->8MHZ;
                                                // 0x15->4MHZ;0x14->2MHZ
}   
/***********************************************************************/
/*		                      延时间子程序         	       */
/***********************************************************************/	
void delay1ms(uint time)		//延迟子程序,当time=1000时为延时1s;当time=10时为延时10ms(与时钟频率有关)
{
	uint i;
	uint j;
	for (i=0;i<time;i++)
	{
		for(j=0;j<300;j++);
	}	
}
void spi_cfg(uchar spi0cfg,uchar spi0ckr,uchar spi0cn)  //SPI配置
{
SPI0CFG = spi0cfg;										//0x50
SPI0CKR = spi0ckr;										//0xFF
SPI0CN  = spi0cn;										//0x08
EIE1|=0x01; 											//允许SPIF标志位的中断请求
}
void PWM0_set(uchar low0){   //高电平占空比为val/256
 PCA0CPH0=low0;
}
void PWM1_set(uchar low1){   //高电平占空比为val/256
 PCA0CPH1=low1;
}

void pcaini(void){
 PCA0MD=0x09;    //PCA采用系统时钟,且PCA溢出中断禁止
 PCA0CN=0x40;    //启动PCA计数器
}
void pca0ini(void){        //CEX0为8bit PWM输出模式
 PCA0CPM0=0x42;
}
void pca1ini(void){           //CEX1为8bit PWM输出模式
 PCA0CPM1=0x42;
}

void PWM_init(void){
 pcaini();                          //产生PWM脉宽调制
 pca0ini();
 pca1ini();
 } 
/***********************************************************************/
/*		                    电机方向控制						       */
/***********************************************************************/
void AmplidyneSteeringWheel(uchar direction){
P5=direction;
}

/***********************************************************************/
/*		                    SPI通信子程序						       */
/***********************************************************************/

void SendSPIByte(unsigned char ch)  				// 通过SPI发送一个字节数据
{
         SPIF = 0;                  				// SPIF位清零
         SPI0DAT = ch;              				// 启动一次数据发送
         while (SPIF == 0);                			// 等待数据发送完毕 
} 

unsigned char ReceiveSPIByte()    					//通过SPI接收一个字节数据
{
         SPIF = 0;                  				// SPIF位清零
         SPI0DAT = 0;              					//启动一次数据接收
         while (SPIF == 0);          				// 等待数据接收完毕
		 return  SPI0DAT;          					// 读取SPI接收到的数据
}









/***********************************************************************/
/*		                    主程序						       */
/***********************************************************************/

void main()
 { 
  uchar low0set;
  uchar low1set;
  uchar directionset;
 directionset=0x0A;         //0x09,0x06,电机转0x00,0x0f电机停
 low0set=100;
 low1set=20;       //占空比设置,高电平占空比为(256-lownset)/256
 config();
 PWM_init();
 //PWM1_set(low1set);	
//PWM0_set(low0set);
 AmplidyneSteeringWheel(directionset);	
 				                       
while(1)
  {
   PWM1_set(low1set);
   PWM0_set(low0set);
   delay1ms(1000);
   //low0set+=10;
   //low1set-=10;

  }

}




/***********************************************************************/
/*		               中断服务子程序入口	               */
/***********************************************************************/
void INT_0() interrupt 0{	
}

void T0() interrupt 1{						
}

void T1() interrupt 3{
}

void spi_wr() interrupt 6
{
SPIF=0;
}
void ADC0_OVER() interrupt 15{                   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -