📄 stc12c5410.h
字号:
sfr TH1 = 0x8D; //定时器/计数器1数据寄存器高8位
sfr AUXR = 0x8E;
//-------------------STC12C5410系列单片机 串行口 特殊功能寄存器------------------
sfr SCON = 0x98; //串行口控制寄存器
sbit SM0 = SCON ^ 7;
sbit SM1 = SCON ^ 6; //SM0、SM1串行口工作模式设置位
// SM0 SM1 模式 功能 波特率
// 0 0 0 同位移位寄存器 fose/12
// 0 1 1 8位UART 可变
// 1 0 2 9位UART fose/32或fose/64
// 1 1 3 9位UART 可变
sbit SM2 = SCON ^ 5; //SM2在模式2、3中为多处理通信使能位,在模式0时要求该位为0
sbit REN = SCON ^ 4; //允许接收位 1:允许接收 0:禁止接收
sbit TB8 = SCON ^ 3; //发送数据位8 在模式2、3中是要发送的第9位
sbit RB8 = SCON ^ 2; //接收数据位8 在模式2、3中是已接收数据的第9位 该位可能是奇偶位,地址/数据标识位
//在模式0中,RB8为保留位没有使用 在模式1中,当SM2=0,RB8是已接收数据的停止位
sbit TI = SCON ^ 1; //发送中断标识位。在模式0,发送完第8位,由硬件置位。其它模式则是在发送停止位之处,由
//硬件置位。在任何模式下,TI都必须由软件来清除。表示在TI=1时(发送已完成),TI不会由硬件清除,必须由软件清除
sbit RI = SCON ^ 0; //接收中断标识位 在模式0,接收第8位结束时,由硬件置位。其它模式则是在接收停止位的半中间,
//由硬件置位。RI=1,申请中断。在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位,RI必须由软件清除
sfr SBUF = 0x99; //数据缓冲寄存器
sfr SADEN = 0xB9; //串口地址屏蔽,等于0时地址会引起中断
sfr SADDR = 0xA9; // 从机串口地址
sfr AUXR = 0x8E;
//-------------------STC12C5410系列单片机 看门狗定时器 特殊功能寄存器------------------
sfr WDT_CONTR = 0xE1; //看门狗寄存器
sbit WDT_FALG = WDT_CONTR ^ 7; //看门狗溢出标志位,溢出时,该位由硬件置位,用软件清除
sbit EN_WDT = WDT_CONTR ^ 5; //看门狗允许位,1:看门狗启动 0:看门狗关闭
sbit CLR_WDT = WDT_CONTR ^ 4; //看门狗清0位 1:看门狗重新计数 硬件自动清除此位
sbit IDIE_WDT = WDT_CONTR ^ 3; //模式位 1:看门狗定时器在“空闲模式”计数
// 0: 看门狗定时器在“空闲模式“不计数
sbit PS2 = WDT_CONTR ^ 2;
sbit PS1 = WDT_CONTR ^ 1;
sbit PS0 = WDT_CONTR ^ 0; //看门狗定时器预分频值 看门狗溢出时间=(N*Pre_scale*32768)/Oscillator frequency
// PS2 PS1 PS0 预分频(Pre_scale) Oscillator frequency(系统时钟)
// 0 0 0 2
// 0 0 1 4
// 0 1 0 8
// 0 1 1 16
// 1 0 0 32
// 1 0 1 64
// 1 1 0 128
// 1 1 1 256
//-------------------STC12C5410系列单片机 中断 特殊功能寄存器------------------
sfr IE = 0xA8; //中断允许寄存器
sbit EA = IE^7; //总中断控制位 1:开全局中断 0:关全局中断
sbit EPCA_LVD = IE^6; //低压中断控制位 1:允许PCA模块中断及低压中断 0:禁止PCA模块中断及低压中断(STC12C54xx系列没有该位)
sbit EADC_SPI = IE^5; //ADC中断允许位 1:允许ADC中断及SPI中断 0:禁止ADC中断及SPI中断
sbit ES = IE^4; //串行口中断控制位 1:开串行口中断 0:关串行口中断
sbit ET1 = IE^3; //T1中断控制位 1:开定时器1中断 0:关定时器1中断
sbit EX1 = IE^2; //外部~INT1中断控制位 1:开 0:关
sbit ET0 = IE^1; //T0中断控制位 1:开定时器0中断 0:关定时器0中断
sbit EX0 = IE^0; //外部~INT0中断控制位 1:开 0:关
sfr IP = 0xB8; //中断优先级寄存器
sbit EPCA_LVD = IE^6; //低压中断优先级控制位 1:高 0:低
sbit EADC_SPI = IE^5; //ADC、SPI中断优先级控制位 1:高 0:低
sbit PS = IP^4; //串行口中断优先级控制位 1:高 0:低
sbit PT1 = IP^3; //T1中断优先级控制位 1:高 0:低
sbit PX1 = IP^2; //外部~INT1中断优先级控制位 1:高 0:低
sbit PT0 = IP^1; //T0中断优先级控制位 1:高 0:低
sbit PX0 = IP^0; //外部~INT0中断优先级控制位 1:高 0:低
sfr IPH = 0xB7; //STC12C54xx系列新增优先级控制寄存器(可用此寄存器将优先级设为4级)
sfr TCON = 0x88;
sfr SCON = 0x98;
sfr PCON = 0x87;
sfr AUXR = 0x8E;
sfr ADC_CONTR = 0xC5;
sfr SPSTAT = 0x84; //SPI状态寄存器
//SPI状态寄存器位分配 SPIF(SPSTAT.7) WCOL(SPSTAT.6)
//SPIF:SPI传输完成标志,当一次串行传输完成时,SPIF置位,并当WSPI与EA都置位时产生中断。当SPI处于主模式且SSIG=0时,如果/SS为
// 输入并被驱动为低电平,SPI也将置位 SPIF标志通过软件向其写入“1”清零
//WCOL:SPI写冲突标志。在数据传输的过程中如果对SPI数据寄存器SPDAR执行写操作,WCOL将置位。WCOL标志通过软件向其写入“1”清零
sfr CCON = 0xD8;
sfr CMOD = 0xD9;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sfr CCAPM2 = 0xDC;
sfr CCAPM3 = 0xDD;
//-------------------STC12C5410系列单片机 PCA/PWM 特殊功能寄存器------------------
sfr CCON = 0xD8; //PCA控制寄存器
/*
CCON寄存器位描述 CF CR -- -- CCF3 CCF2 CCF1 CCF0
CF:PCA计数器阵列溢出标志 计数值翻转时该位由硬件置位,如果CMOD寄存器的ECF位置置1,CF标志可用来产生中断
CF可以通过硬件或者软件置位,但只能通过软件清零
CR:PCA计数器阵列运行控制位 该位通过软件置位,用来起动PAC计数器阵列计数 该位通过软件清零,用来关闭PCA计数器
CCF3:PCA模块3中断标志 当出现匹配或捕获时该位由软件置位,该位必须通过软件清零
CCF2:PCA模块2中断标志 当出现匹配或捕获时该位由软件置位,该位必须通过软件清零
CCF1:PCA模块1中断标志 当出现匹配或捕获时该位由软件置位,该位必须通过软件清零
CCF0:PCA模块0中断标志 当出现匹配或捕获时该位由软件置位,该位必须通过软件清零
*/
sfr CMOD = 0xD9; //PCA计数器控制位寄存器
/*
CMOD寄存器位描述 CIDL -- -- -- -- CPS1 CPS0 ECF
CIDL:计数器阵列空闲控制 CIDL=0时,空闲模式下PCA计数器继续工作
CIDL=1时,空闲模式下PCA计数器停止工作
CPS1 CPS0:PCA计数脉冲选择(时钟输入)
0 0 0,内部时钟,Fose/12
0 1 1,内部时钟,Fose/2
1 0 2,定时器0溢出,由于定时器0可以工作在1T方式,固可以达到一个时钟就溢出,所以可大大Fose,同过改变定时器0的溢出率就可以实现可调频的PWM输出
1 1 3,ECI/P3.4脚的外部时钟输入(最大速率=Fose/2)
*/
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sfr CCAPM2 = 0xDC;
sfr CCAPM3 = 0xDD; //PCA比较/捕获模块寄存器
/*
CCAPMn寄存器的位描述 -- ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn
ECOMn=1:允许比较功能
CAPPn=1:允许上升沿触发捕捉功能
CAPNn=1:允许下降沿触发捕捉功能
MATn=1: 当匹配情况发生时,允许CCON中的CCFn置位
TOGn=1: 当匹配情况发生时,CEXn将翻转
PWMn=1: 将CEXn设置为PWM输出
ECCFn=1:允许CCON中的CCFn触发中断
ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn
0 0 0 0 0 0 0 0x00 未启用任何功能
x 1 0 0 0 0 x 0x21 16位CEXn上升沿触发捕捉功能
x 0 1 0 0 0 x 0x11 16位CEXn下降沿触发捕捉功能
x 1 1 0 0 0 x 0x31 16位CEXn边沿(上下沿)触发捕捉功能
1 0 0 1 0 0 x 0x49 16位软件定时器
1 0 0 1 1 0 x 0x4D 16位高速脉冲输出
1 0 0 0 0 1 0 0x42 8位PWM
*/
sfr CL = 0xE9;
sfr CH = 0xF9;
sfr CCAP0L = 0xEA; //高速脉冲输出寄存器低位
sfr CCAP0H = 0xFA; //高速脉冲输出寄存器高位 CCAPn_Value = INT(Fose/(4*f)+0.5)
sfr CCAP1L = 0xEB; // CCAPn_Value 寄存器值 Fose主频 f要求输出频率 INT()下取整函数
sfr CCAP1H = 0xFB;
sfr CCAP2L = 0xEC;
sfr CCAP2H = 0xFC;
sfr CCAP3L = 0xED;
sfr CCAP3H = 0xFD;
sfr PCA_PWM0 = 0xF2; //PWM寄存器
sfr PCA_PWM1 = 0xF3;
sfr PCA_PWM2 = 0xF4;
sfr PCA_PWM3 = 0xF5;
//-------------------STC12C5410系列单片机 ADC 特殊功能寄存器------------------
sfr ADC_CONTR = 0xC6; //ADC转换控制寄存器
sbit ADC_POWER = ADC_CONTR ^ 7; //ADC电源控制位 1:打开A/D转换器电源 0:关闭ADC电源
sbit SPEED1 = ADC_CONTR ^ 6;
sbit SPEED0 = ADC_CONTR ^ 5; //A/D转换所需时间控制位
/*
SPEED1 SPEED0 A/D所需时间
1 1 210个时钟周期转换一次 CPU工作频率20MHz时,A/D转换速度约为100KHz
1 0 420个时钟周期转换一次
0 1 630个时钟周期转换一次
0 0 840个时钟周期转换一次
*/
sbit ADC_FLAG = ADC_CONTR ^ 4; //模数转换器转换结束标志位,当A/D转换完成后,ADC_FALG=1,要由软件清0
//不管是A/D转换完成后由该位申请产生中断,还是由软件查询该标志位A/D转换是否结束,
//当A/D转换完成后,ADC_FALG=1,一定要软件清0
sbit ADC_START = ADC_CONTR ^ 3; //模数转换器(ADC)转换启动控制位 设置为“1”时,开始转换,转换结束后为0
sbit CHS2 = ADC_CONTR ^ 2;
sbit CHS1 = ADC_CONTR ^ 1;
sbit CHS0 = ADC_CONTR ^ 0; //模拟输入通道选择
/*
CHS2 CHS1 CHS0 模拟通道选择
*/
sfr ADC_DATA = 0xC6; //ADC转换结果寄存器,高8位
sfr ADC_LOW2 = 0xBE; //ADC转换结果寄存器,低2位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -