📄 config.h
字号:
#define SYSCLK 22118400
typedef unsigned int UINT;
typedef unsigned char UCHAR;
sbit SCLK = P3^5; //移位寄存器时钟输入:11脚
sbit RCLK = P3^4; //存储寄存器时钟输入:12脚
sbit SER = P3^3; //串行数据输入:14脚
/**************************************************/
///函数名称: SYSCLK_Init()
///函数功能: 外部振荡器11.0592MHz晶体
///入口参数: 无
///出口参数: 无
///调用模块: 无
/***************************************************/
void SYSCLK_Init(void)
{
int i = 0; //定义延时变量
OSCXCN = 0x67; //启动外部振荡器22.1184MHz晶体
for (i = 0; i < 256; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0); //等待晶体振荡器稳定
OSCICN = 0x88; //使能时钟丢失检测器,检测到时钟丢失时间大于100ms将触发复位,使能外部时钟为系统时钟
}
/**************************************************/
///函数名称: UART_Init
///函数功能: 串口0初始化
///入口参数: 无
///出口参数: 无
///调用模块: 无
/***************************************************/
void UART0_Init(void)
{
TMOD = 0x21; //定时T1方式2,为波特率发生器
TH1 = 0xF4; //按波特率设置初值
TR1 = 1; //启动T1
SCON0 = 0X50; //URAT0方式1,允许接收
CKCON|= 0x10; //
PCON |= 0X80; //SMOD00=1
TI0 = 1; //TX0就绪
}
/**************************************************/
///函数名称: PORT_Init
///函数功能: 端口初始化
///入口参数: 无
///出口参数: 无
///调用模块: 无
///注意事项:在读-修改-写指令的读周期,所读的值是端口数据寄存器的内容,而不是端口引脚本身的状态。
// 在XBARE 被设置为逻辑‘1’之前,端口0-3 的输出驱动器应被明确禁止,以防止对交叉开关寄存器和其它寄存器写入时在端口引脚上产生争用
/***************************************************/
void PORT_Init(void)
{
EMI0CF = 0x2b;//EMIF 在P4-P7,工作在地址,ALE 高和ALE 低脉冲宽度 = 4 个SYSCLK 周期。
//数据复用方式,带块选择的分片方式,
P0MDOUT = 0x01;//将UART0 的TX 引脚(TX0,P0.0),输出设置为推挽方式
P74OUT = 0xFF;//ALE、/RD、/WR的输出设置为推挽方式 EMIF 端口(P6、P7)的输出方式配置为推挽方式。
XBR0 = 0x04;//使能UART0为P0.0,和 P0.1。
XBR2 = 0x40;//使能交叉开关和弱上拉
P3MDOUT = 0XFF;
}
void config(void)
{
WDTCN = 0xde;
WDTCN = 0xad;//禁止看门狗
PORT_Init();
SYSCLK_Init();
UART0_Init();
EA=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -