📄 stc12c5410.h
字号:
//-------------STC12C5410系列单片机内核特殊功能寄存器-------------
sfr ACC = 0xE0; //累加器(可按位寻址)
sfr B = 0xF0; //B寄存器(可按位寻址)
sfr PSW = 0xD0; //程序状态字(可按位寻址)
sbit CY = PSW ^ 7; //进位标志位 有进位 CY=1 没有进位CY=0
sbit AC = PSW ^ 6; //半进位标志位 当D3位向D4位进位/借位时,AC=1
sbit F0 = PSW ^ 5; //用户自定义标志位,由编程人员自行决定
sbit RS1 = PSW ^ 4;
sbit RS0 = PSW ^ 3; //RS1,RS0工作寄存器组选择位
// RS1 RS0 工作寄存器组
// 0 0 0组(00-07H)
// 0 1 1组(08-0FH)
// 1 0 2组(10-17H)
// 1 1 3组(18-1FH)
sbit 0V = PSW ^ 2; //溢出标志位
sbit F1 = PSW ^ 1;
sbit P = PSW ^ 0; //奇偶校验位 每次运算后ACC中 二进制数“1”的个数为奇数,P=1 否则P=0
sfr SP = 0x81; //堆栈指针
sfr DPL = 0x82; //数据指针低字节
sfr DPH = 0x83; //数据指针高字节
//-------------STC12C5410系列单片机系统管理特殊功能寄存器-----------
sfr PCON = 0x87; //电源控制寄存器(该寄存器不能按位寻址)
/*
PCON寄存器:SMOD SMOD0 LVDF POF GF1 GF0 PD IDL
SMOD波特率倍增位,在串行通讯是用 0:用户选用的通信波特率 1:用户选用的通信波特率提高一倍
SM0D0
LVDF
POF:上点复位标志(判断单片机是上电复位(POF=1),还是外部复位信号产生复位/内部看门狗复位(POF=0))
GF1、GF0:通用标志位,供用户使用
PD:掉电方式位 0:正常方式 1:掉电方式
IDL:待机方式位 0:正常方式 1:待机方式
*/
sfr AUXR = 0x8E; //定时/计数辅助控制器 (只读控制器,只能直接写各位,而不能采用含读操作的“与”“或”进行操作)
sbit T0x12 = AUXR ^ 7; //位T0x12控制定时器0的速度 0:定时器0是传统8051速度,12分频
//1:定时器0的速度传统8051的12倍,不分频
sbit T1x12 = AUXR ^ 6; //位T1x12控制定时器1的速度 0:定时器1是传统8051速度,12分频
//1:定时器0的速度传统8051的12倍,不分频
//如果UART串口用定时器1做波特率发生器,T1x12位
//可以控制UZRT串口是12T,还是1T
sbit UART_M0x6 = AUXR ^ 5; //0:UART串口的模式0是传统12T的8051速度,12分频
//1:UART串口的模式0的速度是传统12T的8051的6倍,2分频
//STC12C54xxAD系列是1T单片机,为兼容传统8051,UART串口复位后是兼容传统8051的
sbit EADCI = AUXR ^ 4; //0:禁止A/D中断 1:允许A/D中断
sbit ESPI = AUXR ^ 3; //0:禁止SPI中断 1:允许SPI中断
sbit ELVDI = AUXR ^ 2; //0:禁止低压中断 1:允许电压中断(STC12C5410AD系列没有低压中断功能)
sfr CLK_DIV = 0xC7; //时钟分频寄存器
/*
sbit CLKS2 = CLK_DIV ^ 2;
sbit CLKS1 = CLK_DIV ^ 1;
sbit CLKS0 = CLK_DIV ^ 0;
CLK_DIV寄存器 CLKS2 CLKS1 CLKS0
0 0 0 系统时钟(或者外部时钟)
0 0 1 系统时钟/2
0 1 0 系统时钟/4
0 1 1 系统时钟/8
1 0 0 系统时钟/16
1 0 1 系统时钟/32
1 1 0 系统时钟/64
1 1 1 系统时钟/128
*/
//------------ STC12C5410系列单片机I/O特殊功能寄存器---------------
sfr P0 = 0x80; //定义P0地址
sfr P0M0 = 0x93;
sfr P0M1 = 0x94; //I/O口模式选择
// P0M0 P0M1 I/O口模式
// 0 0 准双向口(传统8051 I/O口模式)
// 0 1 推挽输出(强上拉输出)
// 1 0 仅为输入
// 1 1 开漏
sbit P0.3 = P0 ^ 3; //定义P0.3地址
sbit P0.2 = P0 ^ 2; //定义P0.2地址
sbit P0.1 = P0 ^ 1; //定义P0.1地址
sbit P0.0 = P0 ^ 0; //定义P0.0地址
sfr P1 = 0x90; //定义P1口地址
sfr P1M0 = 0x91;
sfr P1M1 = 0x92; //P1口模式选择
// P1M0 P1M1 I/O口模式
// 0 0 准双向口(传统8051 I/O口模式)
// 0 1 推挽输出(强上拉输出)
// 1 0 仅为输入,如果该I/O口需作为A/D使用,可选此模式
// 1 1 开漏,如果该I/O口需作为A/D使用,可选此模式
sbit P1.7 = P1 ^ 7; //定义P1.7地址
sbit P1.6 = P1 ^ 6; //定义P0.6地址
sbit P1.5 = P1 ^ 5; //定义P1.5地址
sbit P1.4 = P1 ^ 4; //定义P1.4地址
sbit P1.3 = P1 ^ 3; //定义P1.3地址
sbit P1.2 = P1 ^ 2; //定义P1.2地址
sbit P1.1 = P1 ^ 1; //定义P1.1地址
sbit P1.0 = P1 ^ 0; //定义P1.0地址
sfr P2 = 0xA0; //定义P2口地址
sfr P2M0 = 0x95;
sfr P2M1 = 0x96; //P2口模式选择
// P2M0 P2M1 I/O口模式
// 0 0 准双向口(传统8051 I/O口模式)
// 0 1 推挽输出(强上拉输出)
// 1 0 仅为输入
// 1 1 开漏
sbit P2.7 = P2 ^ 7; //定义P2.7地址
sbit P2.6 = P2 ^ 6; //定义P2.6地址
sbit P2.5 = P2 ^ 5; //定义P2.5地址
sbit P2.4 = P2 ^ 4; //定义P2.4地址
sbit P2.3 = P2 ^ 3; //定义P2.3地址
sbit P2.2 = P2 ^ 2; //定义P2.2地址
sbit P2.1 = P2 ^ 1; //定义P2.1地址
sbit P2.0 = P2 ^ 0; //定义P2.0地址
sfr P3 = 0xB0; // 定义P3口地址
sfr P3M0 = 0xB1;
sfr P3M1 = 0xB2; //P3口模式选择
// P3M0 P3M1 I/O口模式
// 0 0 准双向口(传统8051 I/O口模式)
// 0 1 推挽输出(强上拉输出)
// 1 0 仅为输入
// 1 1 开漏
sbit P3.7 = P3 ^ 7; //定义P3.7地址
sbit P3.5 = P3 ^ 5; //定义P3.5地址
sbit P3.4 = P3 ^ 4; //定义P3.4地址
sbit P3.3 = P3 ^ 3; //定义P3.3地址
sbit P3.2 = P3 ^ 2; //定义P3.2地址
sbit P3.1 = P3 ^ 1; //定义P3.1地址
sbit P3.0 = P3 ^ 0; //定义P3.0地址
//---------------STC12C5410系列单片机 定时器 特殊功能寄存器------------------
sfr TCON = 0x88; //定时控制寄存器(可按位寻址)
sbit TF1 = TCON ^ 7; //定时器/计数器1溢出标志位 当T1被允许计数后,T1从初值开始加1计数,
//最高位产生溢出时,置TF1=1,并向CPU请求中断,当CPU响应时,由硬件置TF1=0
sbit TR1 = TCON ^ 6; //定时器T1的运行控制位 该位由软件置位和清零当GATE(TMOD.7)=0,TR1=1时就允许T1开始计数,TR1=0时禁止计数
//当GATE(TMOD.7)=1,TR1=1且~INT1输入高电平时,才允许T1计数
sbit TF0 = TCON ^ 5; //定时器/计数器0溢出标志位 当T0被允许计数后,T0从初值开始加1计数,
//最高位产生溢出时,置TF0=1,并向CPU请求中断,当CPU响应时,由硬件置TF0=0
sbit TR0 = TCON ^ 4; //定时器T0的运行控制位 该位由软件置位和清零当GATE(TMOD.3)=0,TR0=1时就允许T0开始计数,TR0=0时禁止计数
//当GATE(TMOD.3)=1,TR0=1且~INT0输入高电平时,才允许T1计数
sbit IE1 = TCON ^ 3; //外部中断1请求标志位 当主机响应中断转向该中断服务程序时,由内部硬件自动将IE1位清0
sbit IT1 = TCON ^ 2; //外部中断1触发方式控制位 IT1=0时,外部中断1为低电平触发 当~INT1(P3.3)输入低电平时,置位IE1.采用低电平触发方式时,
//外部中断源(输入到~INT1)必须保持低电平有效,直到该中断被CPU响应,同时在中断服务程序执行完之前,外部中断源必须
//被清除(P3.3要变高),否则将产生另一次中断。当IT1=1时,则外部中断1(~INT1)端口由“1”—>"0"下降沿跳变,激活中断
//请求标志位IE1,向主机请求中断处理
sbit IE0 = TCON ^ 1; //外部中断0请求标志位 当主机响应中断转向该中断服务程序时,由内部硬件自动将IE0位清0
sbit IT0 = TCON ^ 0; //外部中断0触发方式控制位 IT0=0时,外部中断0为低电平触发 当~INT0(P3.2)输入低电平时,置位IE0.采用低电平触发方式时,
//外部中断源(输入到~INT0)必须保持低电平有效,直到该中断被CPU响应,同时在中断服务程序执行完之前,外部中断源必须
//被清除(P3.2要变高),否则将产生另一次中断。当IT0=1时,则外部中断1(~INT1)端口由“1”—>"0"下降沿跳变,激活中断
//请求标志位IE0,向主机请求中断处理
sfr TMOD = 0x89; //定时器/计数器方式控制(不可按位寻址)
/*
定时器1 定时器0
TM0D定时器/计数器方式控制 GATE C/~T M1 M0 GATE C/~T M1 M0
TM0D.7 GATE TM0D.7控制定时器1,置1时只有在~INT1脚为高及TR1控制未知1时才可打开定时器/计数器1
TM0D.3 GATE TM0D.3控制定时器0,置1时只有在~INT1脚为高及TR1控制未知1时才可打开定时器/计数器0
TM0D.6 C/~T TM0D.6控制定时器1用作定时器或计数器,0:用作定时器(内部系统时钟输入) 1:用作计数器(从T1/P3.5脚输入)
TM0D.2 C/~T TM0D.2控制定时器0用作定时器或计数器,0:用作定时器(内部系统时钟输入) 1:用作计数器(从T0/P3.4脚输入)
TM0D.5/TM0D.4 M1 M0 定时器/计数器1模式选择
0 0 13位定时器/计数器,兼容8048定时器模式,TL1只用低5位参与分频,TH1整个8位全用
0 1 16位 定时器/计数器,TL1,TH1全用
1 0 8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1
1 1 定时器/计数器1此时无效(停止计数)
TM0D.1/TM0D.0 M1 M0 定时器/计数器0模式选择
0 0 13位定时器/计数器,兼容8048定时器模式,TL0只用低5位参与分频,TH0整个8位全用
0 1 16位 定时器/计数器,TL0,TH0全用
1 0 8位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0
1 1 定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制
TH0仅作为一个8位定时器,由定时器1的控制位控制
*/
sfr TL0 = 0x8A; //定时器/计数器0数据寄存器低8位
sfr TH0 = 0x8C; //定时器/计数器0数据寄存器高8位
sfr TL1 = 0x8B; //定时器/计数器1数据寄存器低8位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -