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

📄 main.c

📁 是嵌入式处理器
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12e64.h>     /* derivative information */
#include <string.h>

#define NOP {__asm NOP;}
#define RAM_START         0x0F00
#define ROM_START         0x7F00

#define SLAVE 0xAC					/* slave address on I2C bus */

#define ALIGNED_WORD_MASK	0x0001

#pragma LINK_INFO DERIVATIVE "SampleS12"

const word vswr1   @0xC004; 
const word vswr2   @0xC006;
const word gate    @0xC008;

const word vswr_1   @0x3C8004; 
const word vswr_2   @0x3C8006;
const word gate_1   @0x3C8008;


/* Global variables */
/*
byte TxPacket[256];		// global transmit packet 
byte *IIC_TX_P;		    // pointer to current location in transmit packet  
byte *IIC_TX_END;		  // (fixed) pointer to end of transmit packet 
byte IIC_TX_FLAG;			// global flag for transmit functionality 
byte RxPacket[256];		// global receive packet 
byte *IIC_RX_P;		    // pointer to current location in receive packet  
byte *IIC_RX_END;			// (fixed) pointer to end of receive packet 
byte IIC_RX_FLAG = 0;	// global flags for receive functionality 

byte RxIndex=0;
*/

word count=0;
void SetBusClock(void);
void IoConfig(void);
extern void TxByte(byte TxData);
extern void CommInt(void);
extern void CommDeal(void);
extern void TX_Result(word answer); 
void TimeInit(void);
void ADCInit(void);
word ADC_Conver(byte channel);
void IIC_Init(void);
extern void FlashWrite_ROM(byte *WriteData,word * address,byte page); 
extern void FlashWrite_RAM(byte *WriteData,word * address,byte page);
extern void IIC_Deal(void);


void main(void) {
  word i;
  
  byte ff[512];
  byte f=1;
  /* put your own code here */
  EnableInterrupts;
  SetBusClock();
  IoConfig();
  CommInt();
  ADCInit();
  DDRE_BIT4=1;	  	// 用来测量总线时钟
  PEAR_NECLK=0;
  PTU_PTU3=1;
  IIC_Init();
  for(i=0;i<=255;i++)   ff[i]=(byte)i;
  for(i=256;i<=511;i++) ff[i]=(byte)i-256;

  if(f==2) {
    FlashWrite_ROM(ff,(word *)0x8000,0x3d);
  }
  (void)memcpy((byte*)RAM_START,(byte*)ROM_START,255);
  TimeInit();
 // FlashWrite_RAM(ff,(word *)0x8000,0x3c);
  for(;;) {
 // TxByte('A') ;
  for(i=0;i<0xFFFF;i++)  NOP;
 /*
  TX_Result(k);
	TxByte(' ');
	TX_Result(j);
	TxByte('\n');
	*/
	IIC_Deal();         
  CommDeal();  

  } 
  
  
}


//PLL设置部分
void SetBusClock(void)
{
  CLKSEL_PLLSEL =0;
  REFDV= 0;
  SYNR = 2;				     // 24MHZ	  
  PLLCTL_AUTO   =1;		 // 自动锁定
  PLLCTL_PLLON  =1;		 // 开启PLL
  while(!CRGFLG_LOCK); // 等待频率稳定
  CLKSEL_PLLSEL =1;		 // 设置为总线时钟
}

//IO设置部分
void IoConfig(void)
{
  DDRU_DDRU0 =1; 		   // 设置为输出模式
  DDRU_DDRU1 =1; 			 // 设置为输出模式
  DDRU_DDRU2 =1; 			 // 设置为输出模式
  DDRU_DDRU3 =1; 			 // 设置为输出模式
}																					 



// 定时器初始化
void TimeInit(void) {
   TIM0_TIOS_IOS4=1;  // 把定时器0的通道4设置为比较模式
 //  TIM0_TIE_C4I =1;	// 使能比较器中断
   TIM0_TSCR2_PR =7;  // 设置计数时间的预分频
   TIM0_TC4=0xFF1;		// 设置比较器的比较值
   TIM0_TSCR1_TEN=1;  // 使能定时器0
}


// 定时器1 中断服务程序 //
void interrupt timer0ch4(void) {
  NOP;
  TIM0_TFLG1_C4F=1;
  count++;
  //if(count>0xFFF0) {
    
   PTU_PTU0 ^=1;  //201
   PTU_PTU1 ^=1;  //202
   PTU_PTU2 ^=1;  //203
   count=0;
 // }
}


// AD转换模块初始化
void ADCInit() {

  ATDCTL2_ADPU=1;  //设置为普通的ADT功能
  ATDCTL3_S8C =0;  //每个序列转换一次
  ATDCTL3_S4C =0;
  ATDCTL3_S2C =0;
  ATDCTL3_S1C =1;
  
  ATDCTL4_SRES8=0; //10位结果
  ATDCTL4_SMP	 =0; //采样周期为2个CLOCK
  ATDCTL4_PRS	 =5; //24MHZ分频为2MHZ
  
  ATDCTL5_DJM  =1; //Right justified data in the result registers.
  ATDCTL5_DSGN =0; //无符号结果
  ATDCTL5_SCAN =0; //单次转换
  ATDCTL5_MULT =0; //单次采样
}



word ADC_Conver(byte channel) {
 	
    asm	PSHB
  	asm	BSET 0x86,#128
  	asm	LDAB 0x85
  	asm ANDB #240
  	asm	ORAB 0,SP
  	asm	STAB 0x85
  	asm	BRCLR 0x86,#128,*+0
  	asm	LDD 0x90
  	asm	LEAS 1,SP 	
   /*	 
    ATDSTAT0_SCF=1;			 //将该位清零
    ATDCTL5_Cx=channel;  //设定转换的通道 
    while(!ATDSTAT0_SCF);//等待转换结束
    return ATDDR0;
   */
}


// IIC的初始化
void IIC_Init(void) {
 IBAD=SLAVE;  //定义地址
 IBFD=0x17;   //24Mhz/240=100K的波特率
 IBCR_IBEN =1;//IIC模块使能
 IBCR_MS_SL=0;//从机模式
 IBCR_IBIE =1;//中断使能
}




⌨️ 快捷键说明

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