单片机成长之路(51基础篇) - 029 stc89c52_register.h

感觉stc89c51的库不好用,自己写了个:stc89c52_register.h

#ifndef __STC89C52_REGISTER_H_
#define __STC89C52_REGISTER_H_
/* Above is STC additional SFR */
// --------------------------------------------------------------------
/* Registers */
sfr P0		= 0x80;			// Port 0
sfr SP		= 0x81;			// 堆栈指针
sfr DPL		= 0x82;			// 数据指针(低)
sfr DPH		= 0x83;			// 数据指针(高)
sfr PCON	= 0x87;			// 电源控制寄存器
sfr TCON	= 0x88;			// 定时器控制寄存器
sfr TMOD	= 0x89;			// 定时器控制寄存器
sfr TL0		= 0x8A;			// 定时器0低8位寄存器
sfr TL1		= 0x8B;			// 定时器1低8位寄存器
sfr TH0		= 0x8C;			// 定时器0高8位寄存器
sfr TH1		= 0x8D;			// 定时器1高8位寄存器
sfr AUXR	= 0x8E;			// 辅助寄存器
sfr P1		= 0x90;			// Port 1
sfr SCON	= 0x98;			// 串口控制寄存器
sfr SBUF	= 0x99;			// 串口数据缓存器
sfr P2		= 0xA0;			// Port 2
sfr AUXR1	= 0xA2;			// 辅助寄存器
sfr IE		= 0xA8;			// 中断允许寄存器
sfr SADDR	= 0xA9;			// 从地址寄存器
sfr P3		= 0xB0;			// Port 3
sfr IPH		= 0xB7;			// 中断优先级寄存器(高)
sfr IP		= 0xB8;			// 中断优先级寄存器(低)
sfr SADEN	= 0xB9;			// 中断优先级寄存器(低)
sfr XICON	= 0xC0;			// Auxiliary Interrupt Control
sfr T2CON	= 0xC8;			// Timer/Counter 2 Mode
sfr T2MOD	= 0xC9;			// Timer/Counter 2 Mode
sfr RCAP2L	= 0xCA;			// Timer/Counter 2 Reload/Capture Low Byte
sfr RCAP2H	= 0xCB;			// Timer/Counter 2 Reload/Capture High Byte
sfr TL2		= 0xCC;			// Timer/Counter Low Byte
sfr TH2		= 0xCD;			// Timer/Counter High Byte
sfr PSW		= 0xD0;			// 程序状态寄存器
sfr ACC		= 0xE0;			// 累加器
sfr WDT_CONTR = 0xe1;		// 看门狗控制寄存器
sfr ISP_DATA  = 0xe2;		// ISP/IAP 数据寄存器
sfr ISP_ADDRH = 0xe3;		// ISP/IAP 高8位地址寄存器
sfr ISP_ADDRL = 0xe4;		// ISP/IAP 低8位地址寄存器
sfr ISP_CMD   = 0xe5;		// ISP/IAP 命令寄存器
sfr ISP_TRIG  = 0xe6;		// ISP/IAP 命令触发寄存器
sfr ISP_CONTR = 0xe7;		// ISP/IAP 控制寄存器
sfr P4		= 0xe8;			// Port 4
sfr B		= 0xF0;			// B 寄存器
// --------------------------------------------------------------------
/* Bit definition */
// -----------------------------------
// Bit 
# define Bit0	0x01
# define Bit1	0x02
# define Bit2	0x04
# define Bit3	0x08
# define Bit4	0x10
# define Bit5	0x20
# define Bit6	0x40
# define Bit7	0x80
// -----------------------------------
//	sfr P0		= 0x80;			// Port 0
sbit P00 = P0^0;
# define 	set_P00		P00=1
# define	cle_P00		P00=0
# define	git_P00		P00
sbit P01 = P0^1;
# define 	set_P01		P01=1
# define	cle_P01		P01=0
# define	git_P01		P01
sbit P02 = P0^2;
# define 	set_P02		P02=1
# define	cle_P02		P02=0
# define	git_P02		P02
sbit P03 = P0^3;
# define 	set_P03		P03=1
# define	cle_P03		P03=0
# define	git_P03		P03
sbit P04 = P0^4;
# define 	set_P04		P04=1
# define	cle_P04		P04=0
# define	git_P04		P04
sbit P05 = P0^5;
# define 	set_P05		P05=1
# define	cle_P05		P05=0
# define	git_P05		P05
sbit P06 = P0^6;
# define 	set_P06		P06=1
# define	cle_P06		P06=0
# define	git_P06		P06
sbit P07 = P0^7;
# define 	set_P07		P07=1
# define	cle_P07		P07=0
# define	git_P07		P07
// -----------------------------------
//	sfr PCON	= 0x87;			// 电源控制寄存器
// IDL
# define set_IDL	(PCON | Bit0)			// 进入IDLE模式(空闲),除系统不给CPU供时钟,cpu不执行指令,其余功能部件仍可继续工作,可由任何一个中断唤醒。
# define cle_IDL  	(PCON & (~Bit0))		// 默认(关闭)
# define git_IDL	(Bit0 == (PCON&Bit0))
// PD
# define set_PD	 	(PCON | Bit1)			// 进入Power Down模式(停机,掉电),可以外部中断低电平触发或下降沿触发唤醒,进入掉电模式时,内部时钟停振,由于无时钟CPU、定时器、串行口等功能部件停止工作,只有外部中断继续工作。停电模式可由外部中断唤醒,中断返回后,继续执行原程序。掉电模式也叫停机模式,此时功耗 < 0.1uA。
# define cle_PD  	(PCON & (~Bit1))		// 默认(关闭)
# define git_PD		(Bit1 == (PCON&Bit1))
// DF0:通用工作标志位,用户可以任意使用
# define set_DF0  	(PCON | Bit2)
# define cle_DF0  	(PCON &(~Bit2))
# define git_DF0	(Bit2 == (PCON&Bit2))
// DF1:通用工作标志位,用户可以任意使用
# define set_DF1  	(PCON | Bit3)
# define cle_DF1  	(PCON &(~Bit3))
# define git_DF1	(Bit3 == (PCON&Bit3))
// POF:启动标志位(启动时判断:0为软复位,1位冷启动上电复位)
# define set_POF	(PCON | Bit4)		// 判断结果为:冷启动
# define cle_POF	(PCON & (~Bit4))	// 判断结果为:热启动
# define git_POF	(Bit4 == (PCON&Bit4))
// 串口部分(SMOD 和 SMOD0)
// SMOD0:帧错误检测有效控制位。
# define set_SMOD0	(PCON | Bit6)		// SCON 寄存器中的SM0/FE位用于FE(帧错误检测)功能;
# define cle_SMOD0	(PCON &(~Bit6))		// SCON 寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串口的工作方式。复位时SMOD0 = 0;
# define git_SMOD0	(Bit6 == (PCON&Bit6))
// SMOD:波特率选择位。当SMOD 
# define set_SMOD	(PCON | Bit7)		// 是串口通信方式1、2、3的波特率加倍
# define cle_SMOD	(PCON &(~Bit7))		// 所有串口通信方式的波特率加倍,复位时 SMOD = 0
# define git_SMOD	(Bit7 == (PCON&Bit7))
// -----------------------------------
//	sfr TCON	= 0x88;		// 定时器控制寄存器
sbit IT0  = TCON^0;				// 外部中断0触发方式
# define	set_IT0		IT0=1	// 下降沿触发
# define	cle_IT0		IT0=0	// 低电平触发
# define	git_IT0		IT0
sbit IE0  = TCON^1;				// 外部中断0请求标志位,当IE0=1外部中断0向CPU请求中断,当CPU响应外部中断时,由硬件清 0(触发方式为边沿触发)
# define	set_IE0		IE0=1	// CPU中断请求
# define	cle_IE0		IE0=0	// 已清零
# define	git_IE0		IE0
sbit IT1  = TCON^2;				// 外部中断1触发方式
# define	set_IT1		IT1=1	// 下降沿触发
# define 	cle_IT1		IT1=0	// 低电平触发
# define	git_IT1		IT1
sbit IE1  = TCON^3;				// 外部中断1请求标志位,当IE1=1外部中断1向CPU请求中断,当CPU响应外部中断时,由硬件清 0(触发方式为边沿触发)
# define	set_IE1		IE1=1	// CPU中断请求
# define	cle_IE1		IE1=0	// 已清零
# define	git_IE1		IE1
sbit TR0  = TCON^4;				// 定时器0的运行控制位
# define	set_TR0		TR0=1	// 允许 T0 开始计数
# define	cle_TR0		TR0=0	// 禁止 T0 计数
# define	git_TR0 	TR0
sbit TF0  = TCON^5;				// 定时器/计数器 T0 溢出中断标志位
# define	set_TF0		TF0=1	// 定时器溢出
# define	cle_TF0		TF0=0	// 硬件清零
# define 	git_TF0
sbit TR1  = TCON^6;				// 定时器1的运行控制位
# define	set_TR1		TR1=1	// 允许 T1 开始计数
# define	cle_TR1		TR1=0	// 禁止 T1 计数
# define	git_TR1		TR1
sbit TF1  = TCON^7;
# define	set_TF1		TF1=1
# define	cle_TF1		TF1=0
# define	git_TF1		TF1
// -----------------------------------
//	sfr TMOD	= 0x89;			// 定时器控制寄存器
// Time0			// 定时器/计数器0
// Time0_M0			模式选择(低)
# define set_Count0_M0		(TMOD | Bit0)
# define cle_Count0_M0		(TMOD &(~Bit0))
# define git_Count0_M0		(Bit0 == (TMOD&Bit0))
// Time0_M1			模式选择(高)
# define set_Count0_M1		(TMOD | Bit1)
# define cle_Count0_M1		(TMOD &(~Bit1))
# define git_Count0_M1		(Bit1 == (TMOD&Bit1))
// C/T0:T0 计数器的时钟输入方式选择
# define set_Count0_CT0		(TMOD | Bit2)		// 电平来源(外部)
# define cle_Count0_CT0		(TMOD &(~Bit2))		// 内部时钟(内部时钟6/12分频)
# define git_Count0_CT0		(Bit2 == (TMOD&Bit2))
// GATE0:门控制位置
# define set_Count0_GATE	(TMOD | Bit3)		// 要用软件使 TR 或 TR 为1,可以启动定时器/计数器
# define cle_Count0_GATE 	(TMOD &(~Bit3))		// 只要用软件TCON中的 TR* 寄存器为1,就可以启动计数器工作
# define git_Count0_GATE 	(Bit3 == (TMOD&Bit3))
// Time1			// 定时器/计数器0
// Time1_M0			模式选择(低)
# define set_Count1_M0		(TMOD | Bit4)
# define cle_Count1_M0		(TMOD &(~Bit4))
# define git_Count1_M0		(Bit4 == (TMOD&Bit4))
// Time1_M1			模式选择(高)
# define set_Count1_M1		(TMOD | Bit5)
# define cle_Count1_M1		(TMOD &(~Bit5))
# define git_Count1_M1		(Bit5 == (TMOD&Bit5))
// C/T1:T1 计数器的时钟输入方式选择
# define set_Count1_CT1		(TMOD | Bit6)		// 电平来源(外部)
# define cle_Count1_CT1		(TMOD &(~Bit6))		// 内部时钟(内部时钟6/12分频)
# define git_Count0_CT1		(Bit6 == (TMOD&Bit6))
// GATE1:门控制位置
# define set_Count1_GATE	(TMOD | Bit7)		// 要用软件使 TR 或 TR 为1,可以启动定时器/计数器
# define cle_Count1_GATE	(TMOD &(~Bit7))		// 只要用软件TCON中的 TR* 寄存器为1,就可以启动计数器工作
# define git_Count1_GATE	(Bit7 == (TMOD&Bit7))
// 定时器模式配置
// Time0
# define Time0_mode_0		cle_Count0_M1;cle_Count0_M0
# define Time0_mode_1		cle_Count0_M1;set_Count0_M0
# define Time0_mode_2		set_Count0_M1;cle_Count0_M0
# define Time0_mode_3		set_Count0_M1;set_Count0_M0
// Time1
# define Time1_mode_0		cle_Count1_M1;cle_Count1_M0
# define Time1_mode_1		cle_Count1_M1;set_Count1_M0
# define Time1_mode_2		set_Count1_M1;cle_Count1_M0
# define Time1_mode_3		set_Count1_M1;set_Count1_M0
// -----------------------------------
//	sfr AUXR	= 0x8E;			// 辅助寄存器
// ALEOFF/P4.5			// ALE 信号输出控制使能
# define set_ALEOFF			(AUXR|Bit0)				// 为P4.5引脚
# define cle_ALEOFF			(AUXR&(~Bit0))			// 设置为 ALE 输出引脚
# define git_ALEOFF			(Bit0 == (AUXR&Bit0))
// EXTRAM 	内部/外部RAM存取控制
# define set_EXTRAM			(AUXR|Bit1)				// 内部扩展的 EXTRAM 可以存取
# define cle_EXTRAM			(AUXR&(~Bit1)			// 外部数据存取存储器
# define git_EXTRAM			(Bit1 == (AUXR&Bit1))	
// -----------------------------------
//	sfr P1		= 0x90;			// Port 1
sbit P10 = P1^0;
# define 	set_P10		P10=1
# define	cle_P10		P10=0
# define	git_P10		P10
sbit P11 = P1^1;
# define 	set_P11		P11=1
# define	cle_P11		P11=0
# define	git_P11		P11
sbit P12 = P1^2;
# define 	set_P12		P12=1
# define	cle_P12		P12=0
# define	git_P12		P12
sbit P13 = P1^3;
# define 	set_P13		P13=1
# define	cle_P13		P13=0
# define	git_P13		P13
sbit P14 = P1^4;
# define 	set_P14		P14=1
# define	cle_P14		P14=0
# define	git_P14		P14
sbit P15 = P1^5;
# define 	set_P15		P15=1
# define	cle_P15		P15=0
# define	git_P15		P15
sbit P16 = P1^6;
# define 	set_P16		P16=1
# define	cle_P16		P16=0
# define	git_P16		P16
sbit P17 = P1^7;
# define 	set_P17		P17=1
# define	cle_P17		P17=0
# define	git_P17		P17
// --------------
sbit T2   = P1^0;
# define 	set_T2		T2=1
# define	cle_T2		T2=0
# define	git_T2		T2
sbit T2EX = P1^1;
# define 	set_T2EX	T2EX=1
# define	cle_T2EX	T2EX=0
# define	git_T2EX	T2EX
// -----------------------------------
//	sfr SCON	= 0x98;			// 串口控制寄存器
sbit RI   = SCON^0;		// 串行口1接受中断标志位。若串行口1允许接受且以方式0工作,则每当接受到第8位数据时置1;若以方式1、2、3工作且SM2=0时,则每当接受到停止位的中间时置1当串口以方式1、2、3工作且SM2=1时,则仅当接收到第9位数据RB8位1后,同时还要接受到停止位的中间时置1。RI为1表示串行口1正向CPU申请中断(接受中断)。RI必须由用户的中断服务程序清零。
# define set_RI		RI=1	// 向CPU申请中断(需要用户清理申请RI=0)
# define cle_RI		RI=0 	// 用户已经清理
# define git_RI		RI
sbit TI   = SCON^1;		// 串行口1发送中断标志。串行口1以方式0发送完8位数据,由硬件置1;若以方式1、方式2或方式3发送时,在发送停止位的开始时置1。TI=1表示串行口1正在向CPU申请中断(发送中断) 。值得注意的是,CPU响应发送中断请求,转向执行中断服务程序时并不将TI清零,TI必须由用户在中断服务程序中清零。
# define set_TI		TI=1	// 向CPU申请中断(需要用户清理申请TI=0)
# define cle_TI		TI=0 	// 用户已经清理
# define git_TI		TI
sbit RB8  = SCON^2;		// 在方式2或方式3,是接收到的第9位数据,按需求由软件置位或清零。例如,可用作数据的校验位或多机通信中表示地址帧/数据帧的标志位。
# define set_RB8	RB8=1
# define cle_RB8	RB8=0
# define git_RB8	RB8
sbit TB8  = SCON^3;		// 在方式2或方式3,它为要发送的第9位数据,按需求由软件置位或清零。例如,可用作数据的检验位或多机通信中表示地址帧/数据帧的标志位。
# define set_TB8	TB8=1
# define cle_TB8	TB8=0
# define git_TB8	TB8
sbit REN  = SCON^4;		// 允许/禁止 串行接收控制位。由软件置位 REN,即 REN=1 为允许串行接收状态,可启动串行接收器 RxD,开始接收信息。软件复位 REN,即 REN=0,则禁止接收。
# define set_REN 	REN=1	// 允许串口接收
# define cle_REN 	REN=0	// 禁止串口接收
# define git_REN  	REN
sbit SM2  = SCON^5;		// 允许方式2或方式3多级通信控制位。在方式2或方式3时,如 SM2 位为1,REN位为1,则从机处于只有接收到RB8位为1(地址帧)时才激活中断申请标志位RI位1,并向主机请求中断处理。被确认为寻址的从机则复位SM2为1,则只有在接收到有效的停止位时才置位中断请求标志位RI为1;在方式0时,SM2应为0。
# define set_SM2	SM2=1	// 在方式2或方式3时,如 SM2 位为1,REN位为1,则从机处于只有接收到RB8位为1(地址帧)时才激活中断申请标志位RI位1,并向主机请求中断处理。被确认为寻址的从机则复位SM2为1,则只有在接收到有效的停止位时才置位中断请求标志位RI为1;
# define cle_SM2 	SM2=0	// 在方式0时,SM2应为0。
# define git_SM2 	SM2
sbit SM1  = SCON^6;		// 串口的工作方式(高位)
# define set_SM1	SM1=1
# define cle_SM1	SM1=0
# define git_SM1 	SM1
sbit FE   = SCON^7;		// alternatively "FE"		当PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测。当检测到一个无效停止位时,通过UART接收器设置改位。它必须由软件清零。
# define set_FE		FE=1
# define cle_FE 	FE=0
# define git_FE 	FE
sbit SM0  = SCON^7;		// 串口的工作方式(低位) 	当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通信的工作方式如下:
# define set_SM0	SM0=1
# define cle_SM0 	SM0=0
# define git_SM0 	SM0
// SM0、SM1 工作方式 
// 当单片机工作在12T 模式时,定时器1的溢出率 = sysclk/12/(256 - TH1)
// 当单片机工作在 6T 模式时,定时器1的溢出率 = sysclk/ 6/(256 - TH1)
#define UART0_mode_0		cle_SM0;cle_SM1		// 方式0,同步移位串行方式;移位寄存器	波特率时sysclk/12
#define UART0_mode_1		cle_SM0;set_SM1		// 方式1,8位UART,波特率可变			((2^SMOD)/32)x(定时器1的溢出率)
#define UART0_mode_2		set_SM0;cle_SM1		// 方式2,9位UART						((2^SMOD)/64)xSYSclk系统工作时钟频率)
#define UART0_mode_3		set_SM0;set_SM1		// 方式3,9位UART, 波特率可变			((2^SMOD)/32)x(定时器1的溢出率)
// -----------------------------------
//	sfr P2		= 0xA0;			// Port 2
sbit P20 = P2^0;
# define 	set_P20		P20=1
# define	cle_P20		P20=0
# define	git_P20		P20
sbit P21 = P2^1;
# define 	set_P21		P21=1
# define	cle_P21		P21=0
# define	git_P21		P21
sbit P22 = P2^2;
# define 	set_P22		P22=1
# define	cle_P22		P22=0
# define	git_P22		P22
sbit P23 = P2^3;
# define 	set_P23		P23=1
# define	cle_P23		P23=0
# define	git_P23		P23
sbit P24 = P2^4;
# define 	set_P24		P24=1
# define	cle_P24		P24=0
# define	git_P24		P24
sbit P25 = P2^5;
# define 	set_P25		P25=1
# define	cle_P25		P25=0
# define	git_P25		P25
sbit P26 = P2^6;
# define 	set_P26		P26=1
# define	cle_P26		P26=0
# define	git_P26		P26
sbit P27 = P2^7;
# define 	set_P27		P27=1
# define	cle_P27		P27=0
# define	git_P27		P27
// -----------------------------------
// 此系列单片机有两个16-bit数据指针,DPTR0,DPTR1,当 DPS 选择位为0时,选择DPTR0,当 DPS 选择位为1时,选择DPTR1.
// AUXR1 特殊功能寄存器,位于A2H单元,其中的位不可用布尔指针快速访问,但由于DPS位位于bit0,故对AUXR1寄存器用INC指令,DPS位便会翻转,由0变成1或由1变成0,即可实现双数据指针的快速切换。
// sfr AUXR1	= 0xA2;			// 辅助寄存器 双数据指针功能寄存器
// DPS DPTR 寄存器选择	
# define set_DPS			(AUXR1|Bit0)			// DPTR0 被选择
# define cle_DPS			(AUXR1&(~Bit0))			// DPTR1 被选择
# define git_DPS			(Bit0 == (AUXR1&Bit0))
// GF2: 通用工作标志位,用户可以任意使用。
# define set_GF2			(AUXR1|Bit3)
# define cle_GF2			(AUXR1&(~Bit3))
# define git_GF2			(Bit3 == (AUXR1&Bit3))
// -----------------------------------
//	sfr IE		= 0xA8;			// 中断允许控制寄存器
// 外部中断0中断允许位。
sbit EX0  = IE^0;
# define set_EX0	EX0=1	// 允许中断 
# define cle_EX0 	EX0=0	// 禁止中断
# define git_EX0 	EX0
// T0的溢出中断允许位。
sbit ET0  = IE^1;
# define set_ET0	ET0=1	// 允许T0中断
# define cle_ET0 	ET0=0	// 禁止T0中断
# define git_ET0 	ET0
// 外部中断1中断允许位。
sbit EX1  = IE^2;
# define set_EX1	EX1=1	// 允许外部中断1中断
# define cle_EX1 	EX1=0	// 禁止外部中断1中断
# define git_EX1 	EX1
// 定时/计数器 T1 的溢出中断允许位。
sbit ET1  = IE^3;
# define set_ET1	ET1=1	// 允许T1中断
# define cle_ET1 	ET1=0	// 禁止T1中断
# define git_ET1 	ET1
// 串行口1中断允许位。
sbit ES   = IE^4;
# define set_ES		ES=1	// 允许串行口1中断
# define cle_ES 	ES=0	// 禁止串行口1中断
# define git_ES 	ES
// 定时/计数器 T2 的溢出中断允许位。
sbit ET2  = IE^5;
# define set_ET2	ET2=1	// 允许T2中断
# define cle_ET2 	ET2=0	// 禁止T2中断
# define git_ET2 	ET2
// 低压检测中断
sbit EC   = IE^6;
# define set_EC		EC=1	
# define cle_EC 	EC=0
# define git_EC 	EC
// CPU的总中断允许控制位,
sbit EA   = IE^7;
# define set_EA		EA=1	// CPU 开放中断
# define cle_EA		EA=0	// CPU屏蔽所有中断申请。
# define git_EA		EA
// -----------------------------------
//	sfr P3		= 0xB0;			// Port 3
sbit P30 = P3^0;	// P30 
# define set_P30	P30=1
# define cle_P30 	P30=0
# define git_P30 	P30
sbit RxD = P3^0;		// 串口1接收引脚
# define set_P30 	P30=1
# define cle_P30 	P30=0
# define git_P30 	P30
sbit P31 = P3^1;	// P31
# define set_P31	P31=1
# define cle_P31	P31=0
# define git_P31 	P31
sbit TxD =P3^1;		// 串口1发送引脚
# define set_P31 	P31=1
# define cle_P31	P31=0
# define git_P31 	P31
sbit P32 = P3^2;	// P32
# define set_P32	P32=1
# define cle_P32 	P32=0
# define git_P32 	P32
sbit INT0 = P3^2;	// INT0:外部中断0,下降沿中断或低电平中断
# define set_INT0	INT0=1
# define cle_INT0 	INT0=0
# define git_INT0	INT0
sbit P33 = P3^3;	// P33
# define set_P33	P33=1
# define cle_P33 	P33=0
# define git_P33 	P33
sbit INT1 = P3^3;	// INT0:外部中断1,下降沿中断或低电平中断
# define set_INT1	INT1=1
# define cle_INT1 	INT1=0
# define git_INT1 	INT1
sbit P34 = P3^4;	// P34
# define set_P34	P34=1
# define cle_P34 	P34=0
# define git_P34 	P34
sbit T0 = P3^4;		// 定时器/计数器 0 的外部输入
# define set_T0		T0=1
# define cle_T0 	T0=0
# define git_T0		T0
sbit P35 = P3^5;	// P35
# define set_P35	P35=1
# define cle_P35 	P35=0
# define git_P35 	P35
sbit T1 = P3^5;		// 定时器/计数器 1 的外部输入
# define set_T1		T1=1
# define cle_T1 	T1=0
# define git_T1 	T1
sbit P36 = P3^6;	// P36
# define set_P36 	P36=1
# define cle_P36 	P36=0
# define git_P36 	P36
sbit WR = P3^6;		// 外部数据存储写脉冲
# define set_WR		WR=1
# define cle_WR 	WR=0
# define git_WR 	WR
sbit P37 = P3^7;	// P37
# define set_P37	P37=1
# define cle_P37 	P37=0
# define git_P37
sbit RD = P3^7;		// 外部数据存储器读脉冲
# define set_RD		RD=1
# define cle_RD 	RD=0
# define git_RD 	RD
// -----------------------------------
//	sfr IPH		= 0xB7;			// 中断优先级寄存器(高)
// PT0H:外部中断0优先级配置位(高)
# define set_PX0H		(IPH |Bit0)
# define cle_PX0H		(IPH &(~Bit0))
# define git_PX0H		(Bit0 == (IPH&Bit0))
// PX0H:计数器0优先级配置位(高)
# define set_PT0H		(IPH |Bit1)
# define cle_PT0H		(IPH &(~Bit1))
# define git_PT0H		(Bit1 == (IPH&Bit1))
// PT1H:外部中断1优先级配置位(高)
# define set_PX1H		(IPH |Bit2)
# define cle_PX1H		(IPH &(~Bit2))
# define git_PX1H		(Bit2 == (IPH&Bit2))
// PX1H:计数器1优先级配置位(高)
# define set_PT1H		(IPH |Bit3)
# define cle_PT1H		(IPH &(~Bit3))
# define git_PT1H		(Bit3 == (IPH&Bit3))
// PSH:串口优先级配置位(高)
# define set_PSH		(IPH |Bit4)
# define cle_PSH		(IPH &(~Bit4))
# define git_PSH		(Bit4 == (IPH&Bit4))
// PT2H:定时器2中断优先级控制位(高)
# define set_PT2H		(IPH |Bit5)
# define cle_PT2H		(IPH &(~Bit5))
# define git_PT2H 		(Bit5 == (IPH&Bit5))
// PX2H:外部中断2优先级控制位(高)
# define set_PX2H		(IPH |Bit6)
# define cle_PX2H		(IPH |(~Bit6))
# define git_PX2H		(Bit6 == (IPH&Bit6))
// PX3H:外部中断3优先级控制位(高)
# define set_PX3H		(IPH |Bit7)
# define cle_PX3H		(IPH &(~Bit7))
# define git_PX3H		(Bit7 == (IPH&Bit7))
// -----------------------------------
//	sfr IP		= 0xB8;			// 中断优先级寄存器(低)
sbit PX0  = IP^0;	// 外部中断0优先级控制位(低)
# define set_PX0	PX0=1
# define cle_PX0 	PX0=0
# define git_PX0 	PX0
sbit PT0  = IP^1;	// 定时器0中断优先级控制位(低)
# define set_PT0	PT0=1
# define cle_PT0 	PT0=0
# define git_PT0 	PT0
sbit PX1  = IP^2;	// 外部中断1优先级控制位(低)
# define set_PX1	PX1=1
# define cle_PX1 	PX1=0
# define git_PX1 	PX1
sbit PT1  = IP^3;	// 定时器1中断优先级控制位(低)
# define set_PX1	PX1=1
# define cle_PX1 	PX1=0
# define git_PX1 	PX1
sbit PS   = IP^4;	// 串口优先级配置位(低)
# define set_PS		PS=1
# define cle_PS 	PS=0
# define git_PS 	PS
sbit PT2  = IP^5;	// 定时器2中断优先级控制位(低)
# define set_PT2	PT2=1
# define cle_PT2 	PT2=0
# define git_PT2 	PT2
// -----------------------------------
//	sfr XICON	= 0xC0;			// Auxiliary Interrupt Control
// IT2:外部中断2中断源类型选择位。IT2=0,(~INT2)/P4.3 引脚上的低电平可触发外部中断2。IT2=1,外部中断2为下降沿触发方式。
# define set_IT2	IT2=1
# define cle_IT2 	IT2=0
# define git_IT2 	IT2
// IE2:外部中断2中断申请标志位,中断条件成立后,IE2=1,可由硬件自动复位。
# define set_IE2	IE2=1
# define cle_IE2	IE2=0
# define git_IE2 	IE2
// EX2:如被设置成1,允许外部中断2中断;如被清成0,禁止外部中断2中断。
# define set_EX2	EX2=1
# define cle_EX2	EX2=0
# define git_EX2 	EX2
// PX2:置位表明外部中断2的优先级为高,优先级最终由[PX2H,PX2]=[0,0],[0,1],[1,0],[1,1]来表决。
# define set_PX2	PX2=1
# define cle_PX2 	PX2=0
# define git_PX2 	PX2
// IT3:外部中断3中断请求标志位。IT3=0,(~INT3)/P4.2引脚上的低电平可触发外部中断3。IT3=1,外部中断3为下降沿触发方式。
# define set_IT3	IT3=1
# define cle_IT3	IT3=0
# define git_IT3 	IT3
// IE3:外部中断3中断源请求标志位,中断条件成立后,IE3=1,可由硬件自动清零。
# define set_IE3	IE3=1
# define cle_IE3 	IE3=0
# define git_IE3	IE3
// EX3:如被设置成1,允许外部中断3中断;如被清零,禁止外部中断2中断。
# define set_EX3	EX3=1
# define cle_EX3	EX3=0
# define git_EX3 	EX3
// PX3:置位表明外部中断3的优先级为高,优先级最终由[PX3H,PX3]=[0,0],[0,1],[1,0],[1,1]来决定。
# define set_PX3	PX3=1
# define cle_PX3 	PX3=0
# define git_PX3	PX3
// -----------------------------------
//	sfr T2CON	= 0xC8;			// Timer/Counter 2 Mode
// CP/(~RL2):捕获/从装标志。置位:EXEN=1时,T2EX的负跳变产生捕获。清零:EXEN2=0时,定时器2溢出或T2EX的负跳变都可使定时器自动重装。当RCLK=1或TCLK=1时,该位无效且定时器强制为溢出时自动重装。
sbit CP_RL2= T2CON^0;
# define set_CP_RL2		CP_RL2=1
# define cle_CP_RL2 	CP_RL2=0
# define git_CP_RL2 	CP_RL2
// C/T2:定时器/计数器选择。(定时器2)
sbit C_T2  = T2CON^1;	
# define set_C_T2		C_T2=1		// 外部事件计数器(下降沿触发)
# define cle_C_T2 		C_T2=0		// 内部定时器(OSC/12或OSC/6)
# define git_C_T2 		C_T2
// TR2:定时器2启动/停止控制位。置1时启动定时器。
sbit TR2   = T2CON^2;
# define set_TR2		TR2=1
# define cle_TR2		TR2=0
# define git_TR2 		TR2
// EXEN2:定时器2外部使能标志。当其置位且定时器2未作为串口时钟时,允许T2EX的负跳变产生捕获或重装。EXEN2=0时,T2EX的跳变对定时器2无效。
sbit EXEN2 = T2CON^3;
# define set_EXEN2		EXEN2=1
# define cle_EXEN2 		EXEN2=0
# define git_EXEN2 		EXEN2
// TCLK:发送时钟标志。TCLK置位时,定时器2的溢出脉冲作为串行口模式1和模式3的发送时钟。TCLK=0时,将定时器1的溢出脉冲作为发送时钟。
sbit TCLK  = T2CON^4;
# define set_TCLK 		TCLK=1
# define cle_TCLK 		TCLK=0
# define git_TCLK 		TCLK
// RCLK:接收时钟标志。RCLK置位时,定时器2的溢出脉冲作为串行口模式1和模式3的接收时钟。TCLK=0时,将定时器1的溢出脉冲作为接收时钟。
sbit RCLK  = T2CON^5;
# define set_RCLK		RCLK=1
# define cle_RCLK 		RCLK=0
# define git_RCLK 		RCLK
// EXF2:定时器2外部中断标志。当EXNE2=1且T2EX的负跳变产生捕获或重装时,EXF2置位。定时器2中断使能时,EXF2=1将使CPU从中断向量处执行定时器2中断子程序。EXF2位必须用软件清零在递增/递减计数器模式(DCEN=1)中,EXF2不会引起中断。
sbit EXF2  = T2CON^6;
# define set_EXF2		EXF2=1
# define cle_EXF2 		EXF2=0
# define git_EXF2 		EXF2
// TF2:定时器2溢出标志。定时器2溢出时置位,必须由软件清零。当RCLK或TCLK=1时,TF2将不会置位。
sbit TF2   = T2CON^7;
# define set_TF2		TF2=1
# define cle_TF2 		TF2=0
# define git_TF2		TF2
// -----------------------------------
//	sfr T2MOD	= 0xC9;			// Timer/Counter 2 Mode
// DECN:向下计数使能位。定时器2 可配置成向上/向下计数器。(用户勿将其置1。这些位在将来80C51系列产品中用来实现新特性。在这种情况下,以后用到保留位,复位时或有效状态时,它的值应为0;而这些位有效状态时,它的值为1。从保留位读到的值是不确定的。)
# define set_DECN		(T2MOD|Bit0)
# define cle_DECN		(T2MOD&(~Bit0))
# define git_DECN 		(Bit0 == (T2MOD&Bit0))
// T2OE:定时器2输出使能位。
# define set_T2OE		(T2MOD|Bit1)
# define cle_T2OE		(T2MOD&(~Bit1))
# define git_T2OE 		(Bit1 == (T2MOD&Bit1))
// -----------------------------------
//	sfr PSW		= 0xD0;			// 程序状态寄存器
// 奇偶标志位。该标志位始终体现累加器ACC中1的个数的奇偶性。如果累加器ACC中1的个数位奇数,则P置1;当累加器ACC中的个数为偶数(包括0个)时,P位为0
sbit P    = PSW^0;
# define set_P 		P=1
# define cle_P 		P=0
# define git_P 		P
// F1:用户标志位1。
sbit F1   = PSW^1;
# define set_F1		F1=1
# define cle_F1		F1=0
# define git_F1 	F1
// OV:溢出标志位
sbit OV   = PSW^2;
# define set_OV		OV=1
# define cle_OV 	OV=0
# define git_OV 	OV
// 工作寄存器组的选择位(低)
sbit RS0  = PSW^3;
# define set_RS0	RS0=1
# define cle_RS0 	RS0=0
# define git_RS0	RS0
// 工作寄存器组的选择位(高)
sbit RS1  = PSW^4;
# define set_SM1	SM1=1
# define cle_SM1 	SM1=0
# define git_SM1 	SM1
// 寄存器工作组
# define Register_bank_mode_0	cle_SM1;cle_SM0
# define Register_bank_mode_1	cle_SM1;set_RS0
# define Register_bank_mode_2	set_SM1;cle_SM0
# define Register_bank_mode_3	set_SM1;set_RS0
// 用户标志位0
sbit F0   = PSW^5;
# define set_F0		F0=1
# define cle_F0 	F0=0
# define git_F0 	F0
// 进位辅助位置。进行加法计算时,当B3位由进位,或执行减法运算最高位有借位时,AC为1;反之位0.设置辅助进位标志AC的目的是为了便于BCD码加法、减法运算的调整。
sbit AC   = PSW^6;
# define set_AC		AC=1
# define cle_AC 	AC=0
# define git_AC 	AC
// 标志位。进行加法运算时,当最高位即B7位有进位,或执行减法运算最高位有借位时,CY为1;反之位0
sbit CY   = PSW^7;
# define set_CY		CY=1
# define cle_CY 	CY=0
# define git_CY		CY
// -----------------------------------
//	sfr WDT_CONTR = 0xe1;		// 看门狗控制寄存器
// PS0:看门狗预分频系数(低位)
# define set_PS0_WDT		(WDT_CONTR|Bit0)
# define cle_PS0_WDT		(WDT_CONTR&(~Bit0))
# define git_PS0_WDT		(Bit0 == (WDT_CONTR&Bit0))
// PS1:看门狗预分频系数(中位)
# define set_PS1_WDT		(WDT_CONTR|Bit1)
# define cle_PS1_WDT		(WDT_CONTR&(~Bit1))
# define git_PS1_WDT 		(Bit1 == (WDT_CONTR&Bit1))
// PS2:看门狗预分频系数(高位)
# define set_PS2_WDT		(WDT_CONTR|Bit2)
# define cle_PS2_WDT		(WDT_CONTR&(~Bit2))
# define git_PS2 _WDT		(Bit1 == (WDT_CONTR&Bit2))
// 看门狗定时器分频值
# define WDT_Sub_mode_2		cle_PS2_WDT;cle_PS1_WDT;cle_PS0_WDT
# define WDT_Sub_mode_4		cle_PS2_WDT;cle_PS1_WDT;set_PS0_WDT
# define WDT_Sub_mode_8		cle_PS2_WDT;set_PS1_WDT;cle_PS0_WDT
# define WDT_Sub_mode_16	cle_PS2_WDT;set_PS1_WDT;set_PS0_WDT
# define WDT_Sub_mode_32	set_PS2_WDT;cle_PS1_WDT;cle_PS0_WDT
# define WDT_Sub_mode_64	set_PS2_WDT;cle_PS1_WDT;set_PS0_WDT
# define WDT_Sub_mode_128	set_PS2_WDT;set_PS1_WDT;cle_PS0_WDT
# define WDT_Sub_mode_256	set_PS2_WDT;set_PS1_WDT;set_PS0_WDT
// IDLE_WDT:看门狗“IDLE”模式位,当设置为“1”,看门狗定时器在“空闲模式”计数当清“0”该位时,看门狗定时器在“空闲模式”时不计数。
# define set_IDLE_WDT 		(WDT_CONTR|Bit3)			// 看门狗在“空闲模式”时计数。
# define cle_IDLE_WDT		(WDT_CONTR&(~Bit3))			// 看门狗在“空闲模式”时不计数。
# define git_IDLE_WDT 		(Bit3 == (IDLE_WDT&Bit3))
// CLR_WDT:看门狗计数自动清零使能
# define set_CLR_WDT		(WDT_CONTR | Bit4)			// 清空看门狗重置
# define cle_CLR_WDT		(WDT_CONTR &(~Bit4))
# define git_CLR_WDT		(Bit4 == (WDT_CONTR&Bit4))
// EN_WDT:看门狗允许位
# define set_EN_WDT			(WDT_CONTR |Bit5)			// 启动看门狗(启动后不可关闭)
# define cle_EN_WDT			(WDT_CONTR &(~Bit5))		// 默认关闭
# define git_EN_WDT			(Bit5 == (WDT_CONTR&Bit5))
// -----------------------------------
//	sfr ISP_CMD   = 0xe5;		// ISP/IAP 命令寄存器
// MS0:
# define set_ISP_IAP_MS0	(ISP_CMD |Bit0)
# define cle_ISP_IAP_MS0	(ISP_CMD &(~Bit0))
// MS1:
# define set_ISP_IAP_MS1	(ISP_CMD |Bit1)
# define cle_ISP_IAP_MS1	(ISP_CMD &(~Bit1))
// MS2:
# define set_ISP_IAP_MS2	(ISP_CMD |Bit2)
# define cle_ISP_IAP_MS2	(ISP_CMD &(~Bit2))
// ISP/IAP mode set
# define ISP_IAP_NO_mode		cle_ISP_IAP_MS1;cle_ISP_IAP_MS0		// 待机模式,无操作
# define ISP_IAP_Byte_read		cle_ISP_IAP_MS1;set_ISP_IAP_MS0		// 从用户的应用程序区对"data flash / eeprom" 进行字节读
# define ISP_IAP_Byte_write		set_ISP_IAP_MS1;cle_ISP_IAP_MS0		// 从用户的应用程序区对"data flash / eeprom" 进行字节写
# define ISP_IAP_Sector_erase	set_ISP_IAP_MS1;set_ISP_IAP_MS0		// 从用户的应用程序区对"data flash / eeprom" 进行扇区删除
// -----------------------------------
//	sfr ISP_CONTR = 0xe7;		// ISP/IAP 控制寄存器
// WT0:
# define set_ISP_CONTR_WT0		(ISP_CONTR|Bit0)
# define cle_ISP_CONTR_WT0		(ISP_CONTR|(~Bit0))
// WT1:
# define set_ISP_CONTR_WT1		(ISP_CONTR|Bit1)
# define cle_ISP_CONTR_WT1		(ISP_CONTR&(~Bit1))
// WI2:
# define set_ISP_CONTR_WT2		(ISP_CONTR|Bit2)
# define cle_ISP_CONTR_WT2		(ISP_CONTR&(~Bit2))
// 设置ISP/IAP操作的等待时间
# define ISP_CONTR_Time_mode0	cle_ISP_CONTR_WT2;cle_ISP_CONTR_WT1;cle_ISP_CONTR_WT0		// 默认 0
# define ISP_CONTR_Time_mode1	cle_ISP_CONTR_WT2;cle_ISP_CONTR_WT1;set_ISP_CONTR_WT0
# define ISP_CONTR_Time_mode2	cle_ISP_CONTR_WT2;set_ISP_CONTR_WT1;cle_ISP_CONTR_WT0
# define ISP_CONTR_Time_mode3	cle_ISP_CONTR_WT2;set_ISP_CONTR_WT1;set_ISP_CONTR_WT0
// SWRST:产生软件复位
# define set_ISP_CONTR_SWRST	(ISP_CONTR|Bit5)		// 产生软件系统复位,硬件自动复位。
# define cle_ISP_CONTR_SWRST	(ISP_CONTR&(~Bit5))		// 不操作
// SWBS:SWRST产生软件复位后启动位置
# define set_ISP_CONTR_SWBS		(ISP_CONTR|Bit6)		// SWRST产生软件复位后启动位置(从系统ISP监控程序)
# define cle_ISP_CONTR_SWRS		(ISP_CONTR&(~Bit6))		// SWRST产生软件复位后启动位置(从应用程序区启动)
// ISPEN:ISP/IAP 功能允许位
# define set_ISP_CONTR_ISPEN	(ISP_CONTR|Bit7)		// 允许 ISP/IAP 读写擦除 data flash/eeprm
# define cle_ISP_CONTR_ISPEN	(ISP_CONTR&(~Bit7))		// 禁止 ISP/IAP 读写擦除 data flash/eeprm
// -----------------------------------
//	sfr P4		= 0xe8;			// Port 4
sbit P40 = P4^0;		// P40
# define set_P40 	P40=1
# define cle_P40	P40=0
# define git_P40 	P40
sbit P41 = P4^1;		// P41
# define set_P41 	P41=1
# define cle_P41	P41=0
# define git_P41 	P41
sbit P42 = P4^2;		// P42
# define set_P42 	P42=1
# define cle_P42	P42=0
# define git_P42 	P42
sbit INT3 = P4^2;		// (~INT3)外部中断3,下降沿中断或低电平中断
# define set_INT3 	INT3=1
# define cle_INT3	INT3=0
# define git_INT3 	INT3
sbit P43 = P4^3;		// P43
# define set_P43 	P43=1
# define cle_P43	P43=0
# define git_P43 	P43
sbit INT2 = P4^3;		// (~INT2)外部中断3,下降沿中断或低电平中断
# define set_INT2 	INT2=1
# define cle_INT2	INT2=0
# define git_INT2 	INT2
sbit P44 = P4^4;		// P44
# define set_P44 	P44=1
# define cle_P44	P44=0
# define git_P44 	P44
sbit PSEN = P4^4;		// 外部程序储存器选通信号输入引脚
# define set_PSEN 	PSEN=1
# define cle_PSEN	PSEN=0
# define git_PSEN 	PSEN
sbit P45 = P4^5;	// ISP下载需勾选"ALE脚用作P4.5口"
# define set_P45 	P45=1
# define cle_P45	P45=0
# define git_P45 	P45
sbit ALE = P4^5;	// ALE
# define set_ALE 	ALE=1
# define cle_ALE 	ALE=0
# define git_ALE 	ALE
sbit P46 = P4^6;	// P46
# define set_P46 	P46=1
# define cle_P46	P46=0
# define git_P46 	P46
sbit EEA= P4^6;		// 外部存储器选择引脚 External storage
# define set_EEA 	EEA=1
# define cle_EEA	EEA=0
# define git_EEA 	EEA

#endif

  

 

posted @ 2020-10-10 22:47  极客先锋  阅读(666)  评论(0编辑  收藏  举报