📄 parelle.c.bak
字号:
/******************************************************************
*
* 单片机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 + -