//The Header file for 8051 compatible MCU STC89C52
//Modified by 人参果
//Note: ROM:8KB
// RAM:512B including 256B internal RAM(8052 compatible) and 256B external RAM(Logic External)
// IAP_EEPROM:5KB (10 sectors) Address:0x2000-0x33FF
#ifndef __STC89C52_H_
#define __STC89C52_H_
/************************************************/
/************************************************/
/*********************I/O口**********************/
/************************************************/
/************************************************/
sfr P0 = 0x80;//数码管模块、【扩展】1602液晶屏、【扩展】12864液晶屏
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr P1 = 0x90;//流水灯模块
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sbit T2 = P1^0;//定时器2外部时钟源
sbit T2EX = P1^1;//定时器2捕获输入
sfr P2 = 0xA0;
sbit P20 = P2^0;//IIC通讯SDA
sbit P21 = P2^1;//IIC通讯SCL
sbit P22 = P2^2;//【扩展】温度传感器
sbit P23 = P2^3;//蜂鸣器
sbit P24 = P2^4;//红外发射
sbit P25 = P2^5;
sbit P26 = P2^6;//数码管位选锁存器
sbit P27 = P2^7;//数码管段选锁存器
sbit SDA = P2^0;//I2C总线SDA
sbit SCL = P2^1;//I2C总线SCL
sbit IR = P2^4;//红外二极管
sfr P3 = 0xB0;//矩阵键盘
sbit P30 = P3^0;//独立按键
sbit P31 = P3^1;//独立按键
sbit P32 = P3^2;//独立按键、红外接收
sbit P33 = P3^3;//独立按键
sbit P34 = P3^4;//【扩展】1602液晶屏、【扩展】8x8矩阵LED
sbit P35 = P3^5;//【扩展】1602液晶屏、【扩展】8x8矩阵LED
sbit P36 = P3^6;//【扩展】1602液晶屏、【扩展】8x8矩阵LED
sbit P37 = P3^7;
sbit RXD = P3^0;//串口1数据接收端
sbit TXD = P3^1;//串口1数据发送端
sbit INT0 = P3^2;//外部中断0,下降沿中断或低电平中断,按钮P32
sbit INT1 = P3^3;//外部中断1,下降沿中断或低电平中断,按钮P33
sbit T0 = P3^4;//定时器、计数器0的外部输入
sbit T1 = P3^5;//定时器、计数器1的外部输入
sbit WR = P3^6;//外部数据存储器写脉冲
sbit RD = P3^7;//外部数据存储器读脉冲
sfr P4 = 0xE8;
sbit P44 = P4^4;//标记PEN
sbit P45 = P4^5;//标记ALE,默认用作ALE(可在STC-ISP程序中设置为P4.5)
sbit P46 = P4^6;//原EA脚(无法使用,为保证兼容性,开发板已经将此脚连接至VCC)
/************************************************/
/************************************************/
/********************中断系统********************/
/************************************************/
/************************************************/
/*
中断系统是为使CPU具有对外界紧急事件的
实时处理能力而设置的。
STC89C52单片机提供了6个中断请求源,
它们分别是:外部中断0(INT0)、定时器0中断
、外部中断1(INT1)、定时器1中断、串口(UAR
T)中断、定时器2。每一个中断源可以用软件
独立地控制为开中断或关中断状态;每一个中
断的优先级别均可用软件设置。当两个相同优
先级的中断同时产生时,将由查询次序来决定
系统先响应哪个中断。通过设置新增加的特殊
功能寄存器IPH中的相应位,可将中断优先级
设为四级,如果只设置IP或XICON,那么中断
优先级就只有两级,与传统8051单片机两级中
断优先级完全兼容。
如果使用C语言编程,中断查询次序号就是中
断号:
//interrupt 0 外部中断0(INT0)
//interrupt 1 定时器0中断
//interrupt 2 外部中断1(INT1)
//interrupt 3 定时器1中断
//interrupt 4 串口(UART)中断
//interrupt 5 定时器2
*/
sfr TCON = 0x88;//定时器控制寄存器
sbit IT0 = TCON^0;/*外部中断0中断源类型
选择位。IT0=0,INT0/P3.2引脚上的低电平信
号可触发外部中断0。IT0=1,外部中断0为下
降沿触发方式。*/
sbit IE0 = TCON^1;/*外部中断0请求源标志
IE0=1外部中断0向CPU请求中断,当CPU响应外
部中断时,由硬件归零IE0。*/
sbit IT1 = TCON^2;/*外部中断1中断源类型
选择位。IT1=0,INT1/P3.3引脚上的低电平信
号可触发外部中断1。IT1=1,外部中断1为下
降沿触发方式。*/
sbit IE1 = TCON^3;/*外部中断1请求源标志
IE0=1外部中断0向CPU请求中断,当CPU响应外
部中断时,由硬件归零IE1。*/
sbit TR0 = TCON^4;//定时器0的运行控制位
sbit TF0 = TCON^5;//T0溢出中断标志
sbit TR1 = TCON^6;//定时器1的运行控制位
sbit TF1 = TCON^7;//T1溢出中断标志
sfr IE = 0xA8;//中断允许寄存器
sbit EX0 = IE^0;//外部中断0中断允许位(P32)
sbit ET0 = IE^1;//T0的溢出中断允许位
sbit EX1 = IE^2;//外部中断1中断允许位(P33)
sbit ET1 = IE^3;//定时/计数器T1的溢出中断允许位
sbit ES = IE^4;//串行口1中断允许位
sbit ET2 = IE^5;//定时/计数器T2的溢出中断允许位
sbit EA = IE^7;//CPU的总中断允许控制位,EA=1,CPU开放中断
sfr T2CON = 0xC8;//定时器/计数器2控制寄存器
sbit CP_RL2= T2CON^0;/*捕获/重装标志。EXEN2=
1时,T2EX 的负跳变产生捕获,EXEN2=0时,定时器
2溢出或T2EX的负跳变都可使定时器自动重装。当RC
LK=1或TCLK=1时,该位无效且定时器强制为溢出时
自动重装*/
sbit C_T2 = T2CON^1;/*定时器/计数器选择。0内
部定时器,1外部事件计数器*/
sbit TR2 = T2CON^2;//定时器2启动控制位,1启动
sbit EXEN2 = T2CON^3;//定时器2外部使能标志
sbit TCLK = T2CON^4;//发送时钟标志
sbit RCLK = T2CON^5;//接收时钟标志
sbit EXF2 = T2CON^6;//定时器2外部标志
sbit TF2 = T2CON^7;//定时器2溢出标志
sfr T2MOD = 0xC9;//定时器2模式寄存器
//自动重装,内部控制0x03;自动重装,外部控制0x0B
//16位,内部控制0x02;16位,外部控制0x0A
sfr RCAP2L = 0xCA;//定时器2 重装/捕获 低位
sfr RCAP2H = 0xCB;//定时器2 重装/捕获 高位
sfr TL2 = 0xCC;//定时器2高位
sfr TH2 = 0xCD;//定时器2低位
sfr IP = 0xB8;/*中断优先级寄存器(低八位)
置1可提高优先级为1(标准8051共两个优先级,
将IPH对应位置1后优先级在2和3中选择)
复位后IP和IPH均为00H,各个中断源均为低优先
级中断*/
sbit PX0 = IP^0;//外部中断0优先级控制位
sbit PT0 = IP^1;//定时器0中断优先级
sbit PX1 = IP^2;//外部中断1优先级控制位
sbit PT1 = IP^3;//定时器1中断优先级
sbit PS = IP^4;//串口1中断优先级控制位
sbit PT2 = IP^5;//定时器2中断优先级控制位
sfr XICON = 0xC0;/*辅助中断控制
用于控制外部中断2,3。
DIP40封装无这两个管脚,不用*/
sfr IPH = 0xB7;/*中断优先级寄存器(高八位)
(初始值00000000不可位寻址)
置1可扩展中断至3,4优先级
B0 PX0H
B1 PT0H
B2 PX1H
B3 PT1H
B4 PSH
B5 PT2H
B6 PX2H
B7 PX3H*/
sfr SCON = 0x98; //串口控制寄存器
sbit RI = SCON^0; //
sbit TI = SCON^1; //
sbit RB8 = SCON^2; //
sbit TB8 = SCON^3; //
sbit REN = SCON^4; //
sbit SM2 = SCON^5; //允许方式2或方式3多机通信控制位
sbit SM1 = SCON^6; //
sbit SM0 = SCON^7; //
sfr SBUF = 0x99; //串口数据缓冲器
sfr SADDR = 0xA9; //从机地址控制寄存器
sfr SADEN = 0xB9; //从机地址掩模寄存器
sfr SP = 0x81;//堆栈指针
/*堆栈指针是一个8位专用寄存器。它指示出堆栈
顶部在内部RAM块中的位置。系统复位后,SP初始
化位07H,使得堆栈事实上由08H单元开始,考虑
08H~1FH单元分别属于工作寄存器组1~3,若在程
序设计中用到这些区,则最好把SP值改变�