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

📄 parelle.c.bak

📁 单片机控制语音压缩芯片(声码器)AMBE1000
💻 BAK
📖 第 1 页 / 共 2 页
字号:
/******************************************************************
*
*			    单片机C语言模板
*				   参考资料      
*作者:黄增锋
*时间:2003年10月30
*******************************************************************/
/* 			可位寻址的寄存器各位定义
---------------------------------------------------------------------
 PSW		CY	          AC	         F0
 标志	       进位	        半进位          用户保留               	
 寄存器	      0  无进位	       0  无进位		              
	      1  有进位	       1  有进位		                      
        ..............................................................
               RS1    RS0         OV      _              P
             寄存器选择位       溢出     _      0—'1'的个数为偶
             00        0组      0  无            1—'1'的个数为奇
             01        1组      1  有   
             10        2组
             11        3组
----------------------------------------------------------------------
 TCON             TF1      TR1   TF0     TR0                 
 定时器控制 	T1中断	T1启停	T0中断	T0启停  
   		0  复位	 0  停	     (同  T1)	
		1  溢出	 1  启			
           ---------------------------------------------------------
                IE1          IT1            IE0     IT0
             INT1中断   INT1触发方式           INT0
             0  复位  0  电平触发        ( 同INT1)
             1 有中断   1  边沿触发   
---------------------------------------------------------------------
SCON		SM0	SM1	       SM2		REN
 串行口控制	工作方式	    通信方式         接收控制                    
             00   同步移位寄存器    0    单机      0   禁止接收    
             01   10位异步收发      1    多机      1   允许接收 
             10   11位异步收发   
             11   11位异步收发         
        -------------------------------------------------------------
	    TB8		RB8          	TI             RI
    	 发送第9位   接收第9位    发送中断标志   接收中断标志
---------------------------------------------------------------------
IE		EA	—	   ET2	            ES
 中断允许   所有中断控制		T2(8032)         串行口           
 控制		0  关中断				             
		1  开中断
		---------------------------------------------
		ET1	EX1	ET0	EX0
		T1	INT1	 T0	INT0
		(同前 )
---------------------------------------------------------------------
IP		—	—	PT2		PS	PT1
 中断优先级		       T2(8032)	     串行口      T1	
 控制			       0  低优先级		            
			       1  高优先级
		-----------------------------------------------
		PX1	PT0	PX0
		INT1	 T0	INT0
		   (同前)
---------------------------------------------------------------------
/*********************不可位寻址的寄存器各位定义********************
---------------------------------------------------------------------
 TMOD            GATE                      C/_ T             
 定时器       (T1)中断控制              定时/记数模式     
 方式控制     0   与INT1无关             0  定时器模式
              1   与INT1有关             1  计数器模式        
           -------------------------------------------                                         
             M1      M0      GATE    C/_ T   M1      M0
               工作方式                    (T0)
              (T0)与T1同
         00   13位计数器
         01   16位计数器
         10   自动重装初值8位计数器 
         11   T0 双独立计数器 , T1 无中断重装8位计数器
---------------------------------------------------------------------
/************************    其它资料    ****************************** 
 中断源		C中定义			中断向量
INT0		interrupt 0		 0003H
T0		interrupt 1		 000BH
INT1		interrupt 2		 0013H	
T1		interrupt 3		 001BH
串行		interrupt 4		 0023H
***********************************************************************/

/**********************************************************************/
/*			       程序区        			      */
/**********************************************************************/


/**********************************************************************/
/*			      头文件区        			      */
/**********************************************************************/

#include <reg51.h>	/*关于寄存器、位的定义*/

#include <intrins.h>/*内部函数调用,如_nop_ 、_crol_*/

#include <absacc.h>	/*绝对地址访问,如XBYTE[0x0fff0]*/

#include <defnum.h>	/*自定义的数据类型,如uchar 、uint */



/*-----------------------------   常量定义区   ---------------------------------*/

//#define  Addr_DAC0832 	XBYTE[0x8FFF]		/*  DAC0832的端口地址 */
//#define  Addr_ADC0809		XBYTE[0x9FFF] 		/*  ADC0809的端口地址 */
//#define  Addr_AMBE1000 	XBYTE[0x9FFF] 		/*  ADC0809的端口地址 */

//帧格式ID号
#define VOICE_DATA     0x00 //语音帧
#define RATE_CONFIG    0x01 //码率设置帧
#define VOLUME_CONFIG  0x02 //音量设置帧
#define SPECIAL_CONFIG 0x03 //特殊功能设置帧
#define POWER_CONFIG   0x04 //电源模式设置帧
#define DUAL_TONE      0x06 //双音频信号产生帧
#define WAKE_UP	       0xFE //唤醒帧

//帧头位置定义
#define HEADER_H   0	//第零字节帧头标志
#define HEADER_L   1	//第一字节
#define ID 	   2	//帧ID号	
#define CONTROL_0  3	//控制字0
#define CONTROL_1H 4    //控制字1低位
#define CONTROL_1L 5    //控制字1高位
#define CONTROL_2H 6	//控制字2低位
#define CONTROL_2L 7	//控制字2高位
#define CONTROL_3H 8	//控制字3低位
#define CONTROL_3L 9	//控制字3高位


/*-----------------------------   全局变量定义   -------------------------------*/


//uchar data number;    
sfr ALE=0x8e;

uchar bdata flag=0;						// 标志位变量 
sbit  time_1ms   = flag^0;					//  定时1ms标志  
sbit  time_2ms   = flag^1;					//  定时2ms标志  
sbit  time_10ms  = flag^2;					//  定时10ms标志
sbit  time_100ms = flag^3;
sbit  time_10s   = flag^4;					//  定时1s标志   

uchar data counter_1ms=0,counter_2ms=0,counter_10ms=0,counter_100ms=0;	//  定时时间计数器 
uint  data counter_10s=0;

//======   AMBE1000控制端口==============
/*
sbit AMBE_BPSSEL0 = P1^0;		//码率选择BPS_SEL
sbit AMBE_BPSSEL1 = P1^1;
sbit AMBE_BPSSEL2 = P1^2;
sbit AMBE_BPSSEL3 = P1^3;

sbit AMBE_CHSEL0  = P1^4;		//信道接口选择(主动被动模式)CH_SEL
sbit AMBE_CHSEL1  = P1^5;
sbit AMBE_CHSEL2  = P1^6;

sbit AMBE_RESET   = P1^7;		//AMBE复位端

sbit AMBE_CSEL0  = P2^0;		//AD/DA选择 CSEL
sbit AMBE_CSEL1  = P2^1;
sbit AMBE_CSEL2  = P2^2;

sbit AMBE_ECHO_EN  = P2^3;		//特殊功能选择
sbit AMBE_VAD_EN   = P2^4;
sbit AMBE_SLEEP_EN = P2^5;
sbit AMBE_SLIP_EN  = P2^6;
*/

sbit AMBE_RESET   = P3^7;		//AMBE复位端
sbit MC5480_UASEL = P2^5;		//5480uA选择
sbit AMBE_INI   = P2^6;               //AMBEuA选择


sbit LED1 = P3^3;			//指示灯
sbit LED2 = P3^4;
sbit LED3 = P3^5;

/*
sbit AMBE_DATA       = P3^0;		//串行数据
sbit AMBE_DATA_CLK   = P3^1;		//串行时钟
*/

sbit AMBE_READ_STRB  = P2^0;		//输出选通信号-- 下降沿可以输出第一个数据
sbit AMBE_WRITE_STRB = P2^1;		//输入选通信号-- 下降沿可以输入第一个数据

sbit AMBE_DPE        = P2^2;		//解码包空指示--  单片机可以开始发送数据!
sbit AMBE_EPR        = P2^3;		//编码包准备好指示--  单片机可以开始取数据!


/*=============================================================================*/
/* 			  函数及子程序定义区   				       */
/*=============================================================================*/

/*---------------------------------------------------------------*/
/*----------------    中断处理子程序区  -------------------------*/
/*---------------------------------------------------------------*/

/******************************************************************/
/* 		INT0 中断,待用					 
/*		(注意开中断!)					 
/******************************************************************/
/* void int0_() interrupt  0  using 1  --------- INT0 中断处理程序 --------
{
}
*/
/*------------------------------------------------------------------------------*/
/******************************************************************/
/*	   中断名:INT1 中断号 02 待用	      
/*	   功能: 	  */
/******************************************************************/
/*
void int1_keyboard() interrupt 2 using 3       /*--- INT1 中断处理程序 --*/
/*{

} 
*/
/*INT1 END */
/******************************************************************/
/*  			T0 中断,待用			   	  */
/*			(注意开中断!)			 	  */
/******************************************************************/
/*
void t0_() interrupt 1 using 2	       	--------T0中断处理程序------
{
}
*/
/******************************************************************/
/*		T1 中断,用作系统多任务的定时器			  */
/*		功能:提供各任务的分时复用所需时间(注意开中断!)   */
/******************************************************************/

/*
void t1_systimer() interrupt 3 using 1
{
	TR1=0;				       // 关T1,暂停1ms定时
	counter_1ms++;
	if(counter_1ms>=2)     time_1ms=1;

	counter_2ms++;
	if(counter_2ms>=4)     time_2ms=1;
	
	counter_10ms++;
	if(counter_10ms>=20)   time_10ms=1;
	
	counter_100ms++;
	if(counter_100ms>=200)   time_100ms=1;
	
	counter_10s++;		
	if(counter_10s>=20000)   time_10s=1;

	TH1=0xFC;				// 重新赋予初值	
	TL1=0x30;				// 初值修正 		
	TR1=1;					// 开T1,启动0.5ms定时 

}
*/

/*----------------------------------------------------------------------------*/


/*========================================================================*/
/*			  其它函数及程序定义 				  */
/*========================================================================*/
//延时子程序
void delay(uchar i)
{
	uchar j;
	while(i--)
	{
		for(j=0;j<2;j++)
		{;
		}//4us*2=8us
	}
}


/********************************************************************/
/*	  系统初始化程序 函数原型:void system_ini(void) 	    */
/*	  功能:完成中断、定时器、外设等硬软件的初始化     	    */
/********************************************************************/

void system_ini(void)
{
	/*--------开机自检------*/
	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();	
	_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();

	P0  = 0xFF;
	P1  = 0xFF;
	P2  = 0xFF;
	P3  = 0xFF;
	ALE = 0xFF;
	
	LED1 = 0;
	LED2 = 0;
	LED3 = 0;
/*	

⌨️ 快捷键说明

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