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

📄 mc68hc908gp32_ad.c

📁 freescal的MC68HC908GP32单片结AD转换代码
💻 C
字号:
#include <MC68HC908GP32.h> /* include peripheral declarations */
#define ReSendStatusR SCS1  //SCI状态寄存器    
#define ReTestBit     5     //接收缓冲区满标志位         
#define SendTestBit   7     //发送缓冲区空标志位     
#define ReSendDataR   SCDR  //数据寄存器 
#define PRDS *(volatile unsigned char *)0x3b //PLL分频选择寄存器;头文件里没定义
//串行接收与发送函数声明
unsigned char trn_reg[10];
unsigned char trn_num;
unsigned char rev_reg[10];
unsigned char rev_num;
unsigned char SCIRe1(unsigned char *p);  //接收1字节
unsigned char ADBUF[7];   //存放A/D转换结果的变量
void SCISend1(unsigned char o);          //发送1字节
void HC08Setup(void);	 

void Delay_ms(unsigned char i)
  {  unsigned char j;
     unsigned char u;
     for(j=0;j<i;j++)
     for(u=0;u<=250;u++) ;
  }


/*SCIInit:串行口初始化子程序---------------------------*
*功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位 *
*      数据,无校验等,允许发送器允许接收器.查询方式收发,*
*      波特率为9600(设fBUS=2.4576MHz)                 *
*参 数:无                                              *
*返 回:无                                              *
*-----------------------------------------------------*/

void SCIInit(void)
 {  
    //总线频率fBUS=2.4576MHz时,定义波特率Bt=9600
   // SCBR=0b00000010;//设置允许SCI,正常码输出、8位数据、无校验
    
    //总线频率fBUS=4.9152M时,定义波特率Bt=9600
    SCBR=0b00000011;
    
    SCC1=0b01000000; //设置允许发送、允许接收,查询方式收发     
    SCC2=0b00001100; 
 }
 
 /*
  函数名:AtoD(int channel)
  功能:A/D转换函数        
  入口参数含义:channel 选择的通道(0-7) 
  返回值:转换结果:字节型数据(0-255)
*/
unsigned char AtoD(int channel)
	{
	unsigned char tmp;
	tmp=ADSCR & 0xe0;
	tmp=tmp | channel;
	ADSCR=tmp;			   //选取通道ADCH4-ADCH0=00000-00111:AD0 pin-AD7 pin
	tmp=ADSCR;
	while(tmp>>7==0)
	tmp=ADSCR;
	return ADR;
	}
 
void main()
{   
  unsigned char i;
  HC08Setup();
  SCIInit();
  
  ADCLK=0b01011111;  		   //初始化A/D转换为4分频,内部总线
  ADSCR=0b00000000;		 //选择通道0
  DDRA=0xff;             //定义A口为输出
  DDRB=0x00;             //定义B口为输入
  DDRC=0x00;             //定义C口为输入
  PTA=0xf0;
    	
  while(1) 
  {  
    for(i=0;i<8;i++)    			   //获得并发送8个A/D转换的结果
		{
			ADBUF[i]=AtoD(i);	 //获得8个通道的数值
			
			SCISend1(ADBUF[i]);
    }
    	SCISend1(0x66);
   	Delay_ms(250);  	Delay_ms(250);	Delay_ms(250);	Delay_ms(250);
  }
}


/*SCISend1:串行发送1个字节-----------------------------*
*功  能:串行发送1个字节                                *
*参  数:要发送的数据                                   *
*返  回:无                                             *
*-----------------------------------------------------*/
void SCISend1(unsigned char o)
 {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
   while(1) 
      if ((ReSendStatusR & (1<<SendTestBit)) != 0)
         { ReSendDataR=o;
           break;}
 }



void HC08Setup(void)
 {
   //初始化CONFIG2
   CONFIG2=0b00000001;  //SCIBDSRC=1内部总线时钟用作SCI
                      //时钟;OSCSTOPENB=0在stop模式下
                        //禁止振荡器工作        
   //初始化CONFIG1
   CONFIG1=0b00111101;  //COPD=1 禁止COP模块
                      //STOP=0 禁止STOP指令
                      //SSREC=1 32个CGMXCLK周期退出
                      //STOP模式
                      //LVI5OR3=1 LVI工作在5V
                      //LVIPWRD=1 禁止LVI模块电源
                      //LVIRSTD=1 允许LVI复位信号
                      //LVISTOP=0 在stop模式下禁止LVI
                      //COPRS=0 COP溢出范围使用长的时间                         
   PCTL=0x00;         //①禁止PLL:清零PLL控制寄存器PCTL             
  	  /*
  		 //设置为2.4576M
       PCTL=0x01;         //②将P、E写入PTCL,置VCO的参考频率
                      //  为2                               
       PMSH=0x01;         //③将N写入PMSH、PMSL,置VCO的倍
                      //  频因子为$12C          
       PMSL=0x2C;  
    	 */
    	 
       //设置为4.9152M
       PCTL=0x02;
       PMSH=0x02;         //③将N写入PMSH、PMSL,置VCO的倍
                      //  频因子为$12C          
       PMSL=0x58; 
                   
   PMRS=0b10000000;   //④将L写入PMRS,置VCO的输出频率范
                      //  围系数为$80   
   PRDS=0x01;         //⑤将R写入PRDS
   PCTL|=(1<<5);      //⑥置PCTL.PLLON=1,启动PLL电路  
   PBWC|=(1<<7);      //⑦PBWC自动带宽控制位=1,选择自动
                      //  控制方式  
   PCTL|=(1<<4);      //⑧PCTL.BCS=1,选择PLL电路为时钟源
 }

	
 

⌨️ 快捷键说明

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