C51中为什么把头文件<AT89X52.H>换成<reg52.h>原先的错误就不见了呢
检举|2009-11-14 10:45jinfang199054 | 分类:操作系统/系统故障 | 浏览1039次
我有更好的答案
提问者采纳
2009-11-22 13:41
检举|2009-11-14 10:45jinfang199054 | 分类:操作系统/系统故障 | 浏览1039次
我有更好的答案
提问者采纳
2009-11-22 13:41
头文件不同所需要的语句也相应会有所区别~有些语句是<AT89X52.H>所不能调用的
/*--------------------------------------------------------------------------
AT89X52.H
Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __AT89X52_H__
#define __AT89X52_H__
/*-------------------------------------------
基本特殊功能寄存器
-------------------------------------------*/
sfr P0 = 0x80; // P0通用I/O寄存器
sfr SP = 0x81; // 堆栈指针
sfr DPL = 0x82; // 数据指针低
sfr DPH = 0x83; // 数据指针高
sfr PCON = 0x87; // 电源控制
sfr TCON = 0x88; // 定时器控制
sfr TMOD = 0x89; // 定时器模式控制
sfr TL0 = 0x8A; // 定时器0低字节
sfr TL1 = 0x8B; // 定时器1低字节
sfr TH0 = 0x8C; // 定时器0高字节
sfr TH1 = 0x8D; // 定时器1高字节
sfr P1 = 0x90; // P1通用I/O寄存器
sfr SCON = 0x98; // 串口控制寄存器
sfr SBUF = 0x99; // 串口缓冲区
sfr P2 = 0xA0; // P2通用I/O寄存器
sfr IE = 0xA8; // 中断使能寄存器
sfr P3 = 0xB0; // P3通用I/O寄存器
sfr IP = 0xB8; // 中断优先级寄存器
sfr T2CON = 0xC8; // 定时器2控制寄存器
sfr T2MOD = 0xC9; // 定时器2 模式控制
sfr RCAP2L = 0xCA; // 定时器2重装/捕捉寄存器低字节
sfr RCAP2H = 0xCB; // 定时器2重装/捕捉寄存器高字节
sfr TL2 = 0xCC; // 定时器2低字节
sfr TH2 = 0xCD; // 定时器2高字节
sfr PSW = 0xD0; // 程序状态字
sfr ACC = 0xE0; // 累加器
sfr B = 0xF0; // B 寄存器
/*-------------------------------------------
P0 通用I/O 寄存器位值 (地址:0x80)
-------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
/*-------------------------------------------
PCON 电源控制寄存器位值 (地址:0x87)
-------------------------------------------*/
#define IDL_ 0x01 // 空闲标志位,置位进入空闲模式
#define STOP_ 0x02
#define PD_ 0x02 // 低功耗标志位,置位进入低功耗模式
#define GF0_ 0x04 // 通用标志位 0
#define GF1_ 0x08 // 通用标志位 1
#define SMOD_ 0x80 // 串行口通信波特率控制位,置位使波特率翻倍
/*-------------------------------------------
TCON 定时器控制位 (地址:0x88)
-------------------------------------------*/
sbit IT0 = 0x88; // 外部中断0触发方式控制
sbit IE0 = 0x89; // 外部中断0标志
sbit IT1 = 0x8A; // 外部中断1触发方式控制
sbit IE1 = 0x8B; // 外部中断1标志
sbit TR0 = 0x8C; // 定时器0启动控制
sbit TF0 = 0x8D; // 定时器0溢出标志
sbit TR1 = 0x8E; // 定时器1启动控制
sbit TF1 = 0x8F; // 定时器1溢出标志
/*-------------------------------------------
TMOD 定时/计数控制寄存器位值 (地址:0x89)
-------------------------------------------*/
#define T0_M0_ 0x01 // 模式选择位低位。
#define T0_M1_ 0x02 // 模式选择位高位。
#define T0_CT_ 0x04 // 如果C/T=1,定时器以计数方式工作,C/T=0 时,以定时方式工作。
#define T0_GATE_ 0x08 // 当GATE 置位时,定时器仅当TR=1 并且INT=1 时才工作,
// 如果GATE=0,置位TR 定时器就开始工作。
#define T1_M0_ 0x10
#define T1_M1_ 0x20
#define T1_CT_ 0x40
#define T1_GATE_ 0x80
#define T1_MASK_ 0xF0 // 用于对高4位的操作
#define T0_MASK_ 0x0F // 用于对低4位的操作
/*-------------------------------------------
P1 通用I/O 寄存器位 (地址:0x90)
-------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
/*-------------------------------------------
P1 口复用功能 (地址:0x90)
-------------------------------------------*/
sbit T2 = 0x90; // 定时器2的外部计数输入
sbit T2EX = 0x91; // 定时器2的重装载/捕获控制口
/*-------------------------------------------
SCON 串行口控制寄存器位 (地址:0x98)
-------------------------------------------*/
sbit RI = 0x98; // 接收中断标志
sbit TI = 0x99; // 发送中断标志
sbit RB8 = 0x9A; // 接收到的第九位数据
sbit TB8 = 0x9B; // 要被发送的第九位数据
sbit REN = 0x9C; // 接收使能
sbit SM2 = 0x9D; // 多机通信控制
sbit SM1 = 0x9E; // 串口模式位1
sbit SM0 = 0x9F; // 串口模式位0
/*-------------------------------------------
P2 通用I/O 寄存器位 (地址:0xA0)
-------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
/*-------------------------------------------
IE 中断使能寄存器 (地址:0xA8)
-------------------------------------------*/
sbit EX0 = 0xA8; // 外部中断0使能位 1=Enable 0=Disable
sbit ET0 = 0xA9; // 定时器0中断使能位 1=Enable 0=Disable
sbit EX1 = 0xAA; // 外部中断1使能位 1=Enable 0=Disable
sbit ET1 = 0xAB; // 定时器1中断使能位 1=Enable 0=Disable
sbit ES = 0xAC; // 串行口中断使能位 1=Enable 0=Disable
sbit ET2 = 0xAD; // 定时器2中断使能位 1=Enable 0=Disable
sbit EA = 0xAF; // 中断总控制位 1= Enable 0=Disable
/*-------------------------------------------
P3 通用I/O 寄存器位 (地址:0xB0)
-------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;
/*-------------------------------------------
P3 口复用功能 (地址:0xB0)
-------------------------------------------*/
sbit RXD = 0xB0; // 串行口输入
sbit TXD = 0xB1; // 串行口输出
sbit INT0 = 0xB2; // 外部中断0输入口
sbit INT1 = 0xB3; // 外部中断1输入口
sbit T0 = 0xB4; // 定时/计数器0外部输入信号
sbit T1 = 0xB5; // 定时/计数器1外部输入信号
sbit WR = 0xB6; // 访问外部RAM时的写信号
sbit RD = 0xB7; // 访问外部RAM时的读信号
/*-------------------------------------------
IP 中断优先级寄存器位 (地址:0xB8)
-------------------------------------------*/
sbit PX0 = 0xB8; // 外部中断0优先级位
sbit PT0 = 0xB9; // 定时器0中断优先级位
sbit PX1 = 0xBA; // 外部中断1优先级位
sbit PT1 = 0xBB; // 定时器1中断优先级位
sbit PS = 0xBC; // 串行口中断优先级位
sbit PT2 = 0xBD; // 定时器2中断优先级位
/*-------------------------------------------
T2CON 定时器2控制寄存器位 (地址:0xC8)
-------------------------------------------*/
sbit CP_RL2= 0xC8; // 捕捉/重装选择 0=Reload, 1=Capture
sbit C_T2 = 0xC9; // 计数器/定时器选择位 0=Timer, 1=Counter
sbit TR2 = 0xCA; // 定时器2运行控制位 0=Stop timer, 1=Start timer
sbit EXEN2= 0xCB; // 定时器2外部事件使能
sbit TCLK = 0xCC; // 发送时钟标志 0=串口时钟用Timer 1,1=用Timer 2
sbit RCLK = 0xCD; // 接收时钟标志 0=串口时钟用Timer 1,1=用Timer 2
sbit EXF2 = 0xCE; // 定时器2外部事件标志
sbit TF2 = 0xCF; // 定时器2溢出标志
/*-------------------------------------------
T2MOD 定时器2 模式控制寄存器位值 (地址:0xC9)
-------------------------------------------*/
#define DCEN_ 0x01 // 向下计数使能。该位与T2EX管脚相结合,控制
// 定时器2 16位自动重装模式下的计数方向
#define T2OE_ 0x02 // 定时器2输出使能。该位用于打开/关闭定时器2时钟输出功能
/*-------------------------------------------
PSW 程序状态字寄存器位 (地址:0xD0)
-------------------------------------------*/
sbit P = 0xD0; // 奇、偶标志位
sbit F1 = 0xD1; // 用户标志1
sbit OV = 0xD2; // 溢出标志
sbit RS0 = 0xD3; // 寄存器区选择位0
sbit RS1 = 0xD4; // 寄存器区选择位1
sbit F0 = 0xD5; // 用户标志0
sbit AC = 0xD6; // 辅助进位标志
sbit CY = 0xD7; // 进位标志
/*-------------------------------------------
中断向量号 在代码(code)区的00 - 0x2D
中断地址 = (Number * 8) + 3
-------------------------------------------*/
#define IE0_VECTOR 0 // 外部中断0中断向量号,中断向量地址 = 0x03
#define TF0_VECTOR 1 // 定时器 0 中断向量号,中断向量地址 = 0x0B
#define IE1_VECTOR 2 // 外部中断1中断向量号,中断向量地址 = 0x13
#define TF1_VECTOR 3 // 定时器 1 中断向量号,中断向量地址 = 0x1B
#define SIO_VECTOR 4 // 串口中断向量号,中断地址 = 0x23
#define TF2_VECTOR 5 // 定时器 2 中断向量号,中断向量地址 = 0x2B
#define EX2_VECTOR 5 // 外部中断1中断向量号,中断向量地址 = 0x2B
#endif