STC8F头文件
stc8f手册
stc8f手册一、概述STC8F系列单片机是STC公司推出的一款高性能、低功耗的8051系列单片机。
该系列单片机采用高速、高精度的ADC和PWM模块,具有丰富的外设接口和强大的抗干扰能力,广泛应用于各种工业控制、智能家居、电机控制等领域。
二、硬件特性1. 核心处理器:8051系列处理器,最高主频可达40MHz。
2. 存储器:Flash存储器容量可达256KB,SRAM为8KB,EEPROM为4KB。
3. 电源:2.2V-3.8V供电电压,低功耗设计。
4. 定时器/计数器:3个16位定时器/计数器,具有捕获/比较功能。
5. ADC:12位高速ADC,最高采样率可达1MSPS。
6. PWM:2路16位PWM模块,可实现电机控制、音频处理等功能。
7. 串口通信:2个UART接口,可实现串行通信。
8. 外部接口:SPI、I2C、CAN等接口,方便与其他外设或控制器进行通信。
9. 抗干扰能力:通过多种抗干扰设计,提高了系统的稳定性和可靠性。
三、软件特性1. 开发环境:支持Keil、STC-ISP等开发环境。
2. 编程语言:支持C/C++语言编程。
3. 调试方式:支持串口、JTAG等多种调试方式。
4. 软件库:提供丰富的软件库函数,方便用户快速开发。
5. 在线编程:支持在线编程功能,可实时更新程序。
四、使用注意事项1. 在使用STC8F系列单片机时,请遵循相关的安全操作规范和电气规范,以保证系统的稳定性和可靠性。
2. 请勿随意更改单片机的工作电压和电流参数,以免损坏器件或影响其正常工作。
3. 在进行硬件连接时,请确保连接正确、紧固,避免出现接触不良或短路等问题。
4. 在进行软件编程时,请遵循良好的编程习惯和规范,以保证程序的正确性和可维护性。
STC库函数使用参考
STC库函数使用参考STC(世纪天成)是国内广泛应用的一款单片机系列,具有价格低廉、易学易用的优势,被广泛应用于各种电子设备中。
STC单片机的编程则需要使用STC库函数进行。
```#include <reg52.h>#include <intrins.h>```其中,<reg52.h>是STC系列单片机的寄存器头文件,<intrins.h>是STC提供的一些特殊函数的头文件。
接下来,我们需要定义一些常用的寄存器,这些寄存器是我们在编程中经常会用到的,格式如下:```sbit LED = P1^0;```这里以LED灯为例,sbit是STC库函数中用来定义一个位的关键字,P1代表P1口,^0表示P1的第0位。
接下来,我们可以利用STC库函数提供的函数进行一些常用操作,如读取或设置寄存器的值、延时等。
```//设置P1口为输出口void Set_P1_OutputP1 = 0xff;``````//点亮LED灯void Light_LEDLED=0;```这是一个点亮LED灯的函数,LED=0即表示将LED口的值设置为0,即点亮LED灯。
```//延时函数void Delay(unsigned int t)while(t--);```这是一个延时函数,通过while循环来实现延时,t为延时时间。
除了这些基本的操作之外,STC库函数还提供了更多的功能,如串口通信、定时器和PWM等功能。
我们可以通过调用相应的库函数来实现这些功能。
下面是一个使用定时器的例子:```//定时器初始化函数void Timer_InitTMOD=0x01;//设置定时器1为模式1 TH0 = 0xfe; // 设置初始值TL0=0x00;TR0=1;//启动定时器1//定时器中断函数void Timer_ISR( interrupt 1TH0 = 0xfe; // 设置初始值TL0=0x00;//定时器中断处理代码//主函数void mainTimer_Init(; // 初始化定时器EA=1;//开启总中断while(1);```在上面的例子中,首先通过Timer_Init函数初始化定时器,然后通过定时器中断函数处理定时器中断,最后通过开启总中断来启动定时器。
stc8 bootloader 例程
stc8 bootloader 例程摘要:一、引言二、STC8 Bootloader简介1.背景介绍2.功能概述3.优点三、STC8 Bootloader例程详解1.代码结构2.关键功能模块分析3.功能实现过程四、如何使用STC8 Bootloader1.硬件准备2.软件配置3.下载与调试五、注意事项与建议六、总结正文:一、引言随着嵌入式系统应用的不断普及,bootloader 在嵌入式开发中扮演着越来越重要的角色。
本文将为大家介绍一款名为STC8 的Bootloader 例程,并通过详细解析其代码,帮助大家更好地理解和使用这款实用的工具。
二、STC8 Bootloader 简介1.背景介绍STC8 是一款由STMicroelectronics 推出的8 位单片机,广泛应用于各种嵌入式系统中。
为了方便用户进行编程和调试,STC8 提供了一款功能强大的Bootloader 例程。
2.功能概述STC8 Bootloader 具有以下功能:(1)支持串口通信:可通过串口与上位机进行通信,实现程序的下载、调试等功能。
(2)支持多种编程模式:支持ISP(在系统编程)和IAP(在应用编程)两种模式。
(3)自适应波特率:根据上位机的波特率自动调整,实现顺畅的通信。
(4)加密功能:可对下载的程序进行加密,保护用户代码的安全性。
3.优点STC8 Bootloader 具有以下优点:(1)稳定性高:经过长时间的使用和验证,稳定性得到充分保障。
(2)兼容性强:支持多种单片机型号,满足不同用户的需求。
(3)易于使用:简洁的代码结构,便于用户上手和二次开发。
三、STC8 Bootloader 例程详解1.代码结构STC8 Bootloader 代码分为以下几个部分:(1)初始化模块:对单片机硬件进行初始化,包括时钟、串口等。
(2)通信模块:实现与上位机的通信,包括数据的接收与发送。
(3)加密模块:对下载的数据进行加密和解密。
STC8G 系列单片机技术参考手册说明书
STC micro TM宏晶科技STC8G 系列单片机技术参考手册资料更新日期:2019/10/22目录1概述 (1)2特性及价格 (2)2.1 STC8G1K08系列特性及价格 (2)3管脚及说明 (4)3.1 管脚图 (4)3.1.1 STC8G1K08系列管脚图 (4)3.2 管脚说明 (6)3.2.1 STC8G1K08系列管脚说明 (6)3.3 功能脚切换 (9)3.3.1 功能脚切换相关寄存器 (9)3.4 范例程序 (10)3.4.1 串口1切换 (10)3.4.2 串口2切换 (11)3.4.3 SPI切换 (12)3.4.4 PCA/CCP/PWM切换 (13)3.4.5 I2C切换 (15)3.4.6 比较器输出切换 (16)3.4.7 主时钟输出切换 (17)4封装尺寸图 (19)4.1 TSSOP20封装尺寸图 (19)4.2 QFN20封装尺寸图(3mm*3mm) (20)4.3 SOP16封装尺寸图 (21)4.4 SOP8封装尺寸图 (22)4.5 STC8系列单片机命名规则 (23)5ISP下载及典型应用线路图 (24)5.1 STC8G系列ISP下载应用线路图 (24)5.1.1 使用RS-232转换器下载 (24)5.1.2 使用PL2303-SA下载 (25)5.1.3 使用PL2303-GL下载 (26)5.1.4 使用U8-Mini工具下载 (27)5.1.5 使用U8W工具下载 (28)5.1.6 USB直接ISP下载 (29)6时钟、复位与电源管理 (30)6.1 系统时钟控制 (30)6.2 STC8G系列内部IRC频率调整 (33)6.3 系统复位 (35)6.4 系统电源管理 (37)6.5 范例程序 (38)6.5.1 选择系统时钟源 (38)6.5.2 主时钟分频输出 (40)6.5.3 看门狗定时器应用 (41)6.5.4 软复位实现自定义下载 (42)6.5.5 低压检测 (44)6.5.6 省电模式 (45)6.5.7 使用INT0/INT1/INT2/INT3/INT4中断唤醒MCU (47)6.5.8 使用T0/T1/T2/T3/T4中断唤醒MCU (50)6.5.9 使用RxD/RxD2中断唤醒MCU (54)6.5.10 使用LVD中断唤醒MCU (56)6.5.11 使用CCP0/CCP1/CCP2中断唤醒MCU (58)6.5.12 CMP中断唤醒MCU (60)6.5.13 使用LVD功能检测工作电压(电池电压) (62)7存储器 (67)7.1 程序存储器 (67)7.2 数据存储器 (68)7.2.1 内部RAM (68)7.2.2 内部扩展RAM (69)7.3 存储器中的特殊参数 (70)7.3.1 读取Bandgap电压值(从ROM中读取) (71)7.3.2 读取Bandgap电压值(从RAM中读取) (74)7.3.3 读取全球唯一ID号(从ROM中读取) (76)7.3.4 读取全球唯一ID号(从RAM中读取) (79)7.3.5 读取32K掉电唤醒定时器的频率(从ROM中读取) (82)7.3.6 读取32K掉电唤醒定时器的频率(从RAM中读取) (84)7.3.7 用户自定义内部IRC频率(从ROM中读取) (87)7.3.8 用户自定义内部IRC频率(从RAM中读取) (89)8特殊功能寄存器 (91)8.1 STC8G1K08系列 (91)8.2 特殊功能寄存器列表 (92)9I/O口 (95)9.1 I/O口相关寄存器 (95)9.2 配置I/O口 (98)9.3 I/O的结构图 (99)9.3.1 准双向口(弱上拉) (99)9.3.2 推挽输出 (99)9.3.3 高阻输入 (99)9.3.4 开漏输出 (100)9.4 范例程序 (101)9.4.1 端口模式设置 (101)9.4.2 双向口读写操作 (102)9.4.3 用STC系列MCU的I/O口直接驱动段码LCD (103)10指令系统 (123)11中断系统 (127)11.1 STC8G系列中断源 (127)11.2 STC8中断结构图 (129)11.3 STC8系列中断列表 (130)11.4 中断相关寄存器 (132)11.4.1 中断使能寄存器(中断允许位) (132)11.4.2 中断请求寄存器(中断标志位) (135)11.4.3 中断优先级寄存器 (136)11.5 范例程序 (139)11.5.1 INT0中断(上升沿和下降沿) (139)11.5.2 INT0中断(下降沿) (140)11.5.3 INT1中断(上升沿和下降沿) (141)11.5.4 INT1中断(下降沿) (143)11.5.5 INT2中断(下降沿) (144)11.5.6 INT3中断(下降沿) (146)11.5.7 INT4中断(下降沿) (147)11.5.8 定时器0中断 (148)11.5.9 定时器1中断 (150)11.5.10 定时器2中断 (151)11.5.11 UART1中断 (153)11.5.12 UART2中断 (155)11.5.13 ADC中断 (157)11.5.14 LVD中断 (159)11.5.15 PCA中断 (160)11.5.16 SPI中断 (163)11.5.17 CMP中断 (164)11.5.18 I2C中断 (166)12定时器/计数器 (169)12.1 定时器的相关寄存器 (169)12.2 定时器0/1 (170)12.3 定时器2 (173)12.4 掉电唤醒定时器 (174)12.5 范例程序 (175)12.5.1 定时器0(模式0-16位自动重载) (175)12.5.2 定时器0(模式1-16位不自动重载) (176)12.5.3 定时器0(模式2-8位自动重载) (178)12.5.4 定时器0(模式3-16位自动重载不可屏蔽中断) (179)12.5.5 定时器0(外部计数-扩展T0为外部下降沿中断) (180)12.5.6 定时器0(测量脉宽-INT0高电平宽度) (182)12.5.7 定时器0(时钟分频输出) (183)12.5.8 定时器1(模式0-16位自动重载) (185)12.5.9 定时器1(模式1-16位不自动重载) (186)12.5.10 定时器1(模式2-8位自动重载) (187)12.5.11 定时器1(外部计数-扩展T1为外部下降沿中断) (189)12.5.12 定时器1(测量脉宽-INT1高电平宽度) (190)12.5.13 定时器1(时钟分频输出) (192)12.5.14 定时器1(模式0)做串口1波特率发生器 (193)12.5.15 定时器1(模式2)做串口1波特率发生器 (197)12.5.16 定时器2(16位自动重载) (200)12.5.17 定时器2(外部计数-扩展T2为外部下降沿中断) (202)12.5.18 定时器2(时钟分频输出) (203)12.5.19 定时器2做串口1波特率发生器 (205)12.5.20 定时器2做串口2波特率发生器 (208)13串口通信 (213)13.1 串口相关寄存器 (213)13.2 串口1 (214)13.2.1 串口1模式0 (215)13.2.2 串口1模式1 (216)13.2.3 串口1模式2 (219)13.2.4 串口1模式3 (219)13.2.5 自动地址识别 (220)13.3 串口2 (222)13.3.1 串口2模式0 (222)13.3.2 串口2模式1 (223)13.4 串口注意事项 (225)13.5 范例程序 (226)13.5.1 串口1使用定时器2做波特率发生器 (226)13.5.2 串口1使用定时器1(模式0)做波特率发生器 (229)13.5.3 串口1使用定时器1(模式2)做波特率发生器 (232)13.5.4 串口2使用定时器2做波特率发生器 (236)14比较器,掉电检测,内部固定比较电压 (240)14.1 比较器内部结构图 (240)14.2 比较器相关的寄存器 (241)14.3 范例程序 (243)14.3.1 比较器的使用(中断方式) (243)14.3.2 比较器的使用(查询方式) (245)14.3.3 比较器作外部掉电检测 (247)14.3.4 比较器检测工作电压(电池电压) (249)15IAP/EEPROM (253)15.1 EEPROM相关的寄存器 (253)15.2 EEPROM大小及地址 (255)15.3 范例程序 (257)15.3.1 EEPROM基本操作 (257)15.3.2 使用MOVC读取EEPROM (260)15.3.3 使用串口送出EEPROM数据 (263)16ADC模数转换 (268)16.1 ADC相关的寄存器 (268)16.2 范例程序 (271)16.2.1 ADC基本操作(查询方式) (271)16.2.2 ADC基本操作(中断方式) (272)16.2.3 格式化ADC转换结果 (274)16.2.4 利用ADC第16通道测量外部电压或电池电压 (276)17PCA/CCP/PWM应用 (279)17.1 PCA相关的寄存器 (279)17.2 PCA工作模式 (282)17.2.1 捕获模式 (282)17.2.2 软件定时器模式 (282)17.2.3 高速脉冲输出模式 (283)17.2.4 PWM脉宽调制模式 (283)17.3 范例程序 (287)17.3.1 PCA输出PWM(6/7/8/10位) (287)17.3.2 PCA捕获测量脉冲宽度 (289)17.3.3 PCA实现16位软件定时 (292)17.3.4 PCA输出高速脉冲 (295)17.3.5 PCA扩展外部中断 (298)18同步串行外设接口SPI (301)18.1 SPI相关的寄存器 (301)18.2 SPI通信方式 (303)18.2.1 单主单从 (303)18.2.2 互为主从 (303)18.2.3 单主多从 (304)18.3 配置SPI (305)18.4 数据模式 (307)18.5 范例程序 (308)18.5.1 SPI单主单从系统主机程序(中断方式) (308)18.5.2 SPI单主单从系统从机程序(中断方式) (310)18.5.3 SPI单主单从系统主机程序(查询方式) (311)18.5.4 SPI单主单从系统从机程序(查询方式) (313)18.5.5 SPI互为主从系统程序(中断方式) (315)18.5.6 SPI互为主从系统程序(查询方式) (317)19I2C总线 (320)19.1 I2C相关的寄存器 (320)19.2 I2C主机模式 (321)19.3 I2C从机模式 (324)19.4 范例程序 (327)19.4.1 I2C主机模式访问AT24C256(中断方式) (327)19.4.2 I2C主机模式访问AT24C256(查询方式) (332)19.4.3 I2C主机模式访问PCF8563 (338)19.4.4 I2C从机模式(中断方式) (343)19.4.5 I2C从机模式(查询方式) (347)19.4.6 测试I2C从机模式代码的主机代码 (351)20增强型双数据指针 (357)20.1 范例程序 (359)20.1.1 示例代码1 (359)20.1.2 示例代码2 (359)附录A无 (361)附录B无 (366)附录C使用第三方MCU对STC8G系列单片机进行ISP下载范例程序 (429)附录D电气特性 (437)附录E应用注意事项 (439)附录F STC8G系列头文件 (440)附录G更新记录 (444)1概述STC8G系列单片机是不需要外部晶振和外部复位的单片机,是以超强抗干扰/超低价/高速/低功耗为目标的8051单片机,在相同的工作频率下,STC8G系列单片机比传统的8051约快12倍(速度快11.2~13.2倍),依次按顺序执行完全部的111条指令,STC8G系列单片机仅需147个时钟,而传统8051则需要1944个时钟。
STC单片机STC系列汇编头文件STCWKS
(STC单片机STC系列汇编头文件)STCWKS;-------------------------------------------------------------------;STC15系列汇编语言头文件STC15W4K60S4.INC;如提示重复定义,说明软件已经将51寄存器加载,在其前面加上“;”屏蔽即可。
;-------------------------------------------------------------------$SAVE$NOLIST;; Byte Registers;P0 DATA 80H ; Port 0SP DATA 81H ; Stack PointerDPL DATA 82H ; Data Pointer Low ByteDP0L DATA 82H ; Alternate DefinitionDPH DATA 83H ; Data Pointer High ByteDP0H DATA 83H ; Alternate DefinitionDP1L DATA 84H ; Data Pointer 1 Low ByteS4CON DATA 84HDP1H DATA 85H ; Data Pointer 1 High ByteS4BUF DATA 85HSPDR DATA 86H ; SPI Data RegisterPCON DATA 87H ; Power Control Register;TCON DATA 88H ; Timer Control RegisterTMOD DATA 89H ; Timer Mode Control RegisterTL0 DATA 8AH ; Timer 0 Low ByteTL1 DATA 8BH ; Timer 1 Low ByteTH0 DATA 8CH ; Timer 0 High ByteTH1 DATA 8DH ; Timer 1 High ByteAUXR DATA 8EHAUXR2 DATA 8FHINT_CLKO DATA 8FH;P1 DATA 90H ; Port 1P1M1 DATA 91HP1M0 DATA 92HP0M1 DATA 93HP0M0 DATA 94HP2M1 DATA 95HP2M0 DATA 96HWMCON DATA 96H ; Watchdog and Memory Control Register CLK_DIV DATA 97HPCON2 DATA 97HSCON DATA 98H ; Serial Port ControlSBUF DATA 99H ; Serial Port BufferS2CON DATA 9AHS2BUF DATA 9BHP1ASF DATA 9DH;P2 DATA 0A0H ; Port 2BUS_SPEED DATA 0A1HAUXR1 DATA 0A2HP_SW1 DATA 0A2HIE DATA 0A8H ; Interrupt Enable Register 0SADDR DATA 0A9HSPSR DATA 0AAH ; SPI Status RegisterWKTCL DATA 0AAHWKTCL_CNT DATA 0AAHWKTCH DATA 0ABHWKTCH_CNT DATA 0ABHS3CON DATA 0ACHS3BUF DATA 0ADHIE2 DATA 0AFH;P3 DATA 0B0H ; Port 3P3M1 DATA 0B1HP3M0 DATA 0B2HP4M1 DATA 0B3HP4M0 DATA 0B4HIP2 DATA 0B5HIP DATA 0B8H ; Interrupt Priority RegisterSADEN DATA 0B9HP_SW2 DATA 0BAHADC_CONTR DATA 0BCHADC_RES DATA 0BDHADC_RESL D ATA 0BEHP4 DATA 0C0HWDT_CONTR DATA 0C1HIAP_ADDRH DATA 0C3HIAP_ADDRL DATA 0C4HIAP_CMD DATA 0C5HIAP_TRIG DATA 0C6HIAP_CONTR DATA 0C7H;P5 DATA 0C8HP5M1 DATA 0C9HP5M0 DATA 0CAHP6M1 DATA 0CBHP6M0 DATA 0CCHSPSTAT DATA 0CDHSPCTL DATA 0CEHSPDAT DATA 0CFH;PSW DATA 0D0H ; Program Status Word T4T3M DATA 0D1HT4H DATA 0D2HT4L DATA 0D3HT3H DATA 0D4HSPCR DATA 0D5H ; SPI Control Register T3L DATA 0D5HT2H DATA 0D6HT2L DATA 0D7HCCON DATA 0D8HCMOD DATA 0D9HCCAPM0 DATA 0DAHCCAPM1 DATA 0DBHCCAPM2 DATA 0DCHACC DATA 0E0H ; AccumulatorP7M1 DATA 0E1HP7M0 DATA 0E2HP6 DATA 0E8HCL DATA 0E9HCCAP0L DATA 0EAHCCAP1L DATA 0EBHB DATA 0F0H ; B RegisterPCA_PWM0 DATA 0F2HPCA_PWM1 DATA 0F3HPCA_PWM2 DATA 0F4HP7 DATA 0F8HCH DATA 0F9HCCAP0H DATA0FAHCCAP1H DATA 0FBHCCAP2H DATA 0FCH;;; Bit Registers;P0_0 BIT 80HP0_1 BIT 81HP0_2 BIT 82HP0_3 BIT 83HP0_4 BIT 84HP0_5 BIT 85HP0_6 BIT 86HP0_7 BIT 87H;;TCON (88H) Bit RegistersIT0 BIT 88H ; Interrupt 0 Type Control Bit IE0 BIT 89H ; Interrupt 0 Edge FlagIT1 BIT 8AH ; Interrupt 1 Type Control Bit IE1 BIT 8BH ; Interrupt 1 Edge FlagTR0 BIT 8CH ; Timer 0 Run Control Bit TF0 BIT 8DH ; Timer 0 Overflow FlagTR1 BIT 8EH ; Timer 1 Run Control Bit TF1 BIT 8FH ; Timer 1 Overflow Flag;;P1 (90H) Bit RegistersP1_0 BIT 90HP1_1 BIT 91HP1_2 BIT 92HP1_3 BIT 93HP1_4 BIT 94HP1_5 BIT 95HP1_6 BIT 96HP1_7 BIT 97H;;; SCON (98H) Bit RegistersRI BIT 98H ; Receive Interrupt FlagTI BIT 99H ; Transmit Interrupt FlagRB8 BIT 9AH ; 9th data bit receivedTB8 BIT 9BH ; 9th data bit to be transmitted in modes 2 & 3 REN BIT 9CH ; Receive EnableSM2 BIT 9DH ; Serial Port Mode Bit 2SM1 BIT 9EH ; Serial Port Mode Bit 1SM0 BIT 9FH ; Serial Port Mode Bit 0FE BIT 9FH;; P2 (A0H) Bit RegistersP2_0 BIT 0A0HP2_1 BIT 0A1HP2_2 BIT 0A2HP2_3 BIT 0A3HP2_4 BIT 0A4HP2_5 BIT 0A5HP2_6 BIT 0A6HP2_7 BIT 0A7H;; IE (A8H) Bit RegistersEX0 BIT 0A8H ; External Interrupt 0 Enable: 1=EnabledET0 BIT 0A9H ; Timer 0 Interrupt Enable: 1=EnabledEX1 BIT 0AAH ; External Interrupt 1 Enable: 1=EnabledET1 BIT 0ABH ; Timer 1 Interrupt Enable: 1=EnabledES BIT 0ACH ; SPI and UART Interrupt Enable: 1=Enabled EADC BIT 0ADH ;ELVD BIT 0ACHEA BIT 0AFH ; Global Interrupt Enable: 0=Disable all interrupts ;; P3 (B0H) Bit Registers (Mnemonics & Ports)P3_0 BIT 0B0HP3_1 BIT 0B1HP3_2 BIT 0B2HP3_3 BIT 0B3HP3_4 BIT 0B4HP3_5 BIT 0B5HP3_6 BIT 0B6HP3_7 BIT 0B7H;;; IP (B8H) Bit RegistersPX0 BIT 0B8H ; External Interrupt 0 Priority Bit PT0 BIT 0B9H ; Timer 0 Interrupt Priority Bit PX1 BIT 0BAH ; External Interrupt 1 Priority Bit PT1 BIT 0BBH ; Timer 1 Interrupt Priority Bit PS BIT 0BCH ; Serial Port Interrupt Priority Bit PADC BIT 0BDHPLVD B IT 0BEHPPCA BIT 0BFH;; P4 (C0H) Bit Registers (Mnemonics & Ports)P4_0 BIT 0C0HP4_1 BIT 0C1HP4_2 BIT 0C2HP4_3 BIT 0C3HP4_4 BIT 0C4HP4_5 BIT 0C5HP4_6 BIT 0C6HP4_7 BIT 0C7H;;P5 (C8H) Bit RegistersP5_0 BIT 0C8HP5_1 BIT 0C9HP5_2 BIT 0CAHP5_3 BIT 0CBHP5_4 BIT 0CCHP5_5 BIT 0CDHP5_6 BIT 0CEHP5_7 BIT 0CFH;;PSW (D0H) Bit RegistersP BIT 0D0H ; Parity FlagFL BIT 0D1H ; User FlagOV BIT 0D2H ; Overflow FlagRS0 BIT 0D3H ; Register Bank Select Bit 0RS1 BIT 0D4H ; Register Bank Select Bit 1F0 BIT 0D5H ; User Flag 0AC BIT 0D6H ; Auxiliary Carry Flag CY BIT 0D7H ; Carry Flag;;CCON(D8H) Bit RegistersCCF0 BIT 0D8HCCF1 BIT 0D9HCCF2 BIT 0DAHCCF3 BIT 0DBHCR BIT 0DEHCF BIT 0DFH$RESTORE。
STC单片机在KEIL编译器中的头文件
STC单片机在KEIL编译器中的头文件
STC单片机在KEIL编译器中的头文件
STC 单片机在keil 编译器里找不到头文件如何处理。
首先在网络上找到一个关于STC 单片机的升级包。
安装上去以后,就可以看到有STC 型号的单片机可以选择了。
但是此时,它的头文件却无法调用。
也没有在keil 的安装文件下找到这个升级包应该附带的STC 单片机头文件。
解决办法就是打开一个AT89S52 的头文件,在此头文件的基础上假如STC 独有的一些SFR 声明,然后把文件名改为STC89S52.H,然后放入工程所在文件夹,就可以进行正常调用了。
STC 的特殊SFR 声明如下:
/* After is STC additional SFR */
/* sfr AUXR = 0x8e; */
/* sfr AUXR1 = 0xa2; */
/* sfr IPH = 0xb7; */
sfr P4 = 0xe8;
sbit P43 = P4;
sbit P42 = P4 ;
sbit P41 = P4;
sbit P40 = P4;
sfr XICON = 0xc0;
sfr WDT_CONTR = 0xe1;
sfr ISP_DATA = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;。
stc8h案例程序
stc8h案例程序摘要:1.引言2.STC8H单片机简介3.案例程序一:流水灯程序a.硬件连接b.程序代码c.运行结果4.案例程序二:按键控制LED程序a.硬件连接b.程序代码c.运行结果5.案例程序三:串口通信程序a.硬件连接b.程序代码c.运行结果6.总结正文:【引言】STC8H是一款高性能、低功耗的8位单片机,广泛应用于各种嵌入式系统中。
为了帮助大家更好地了解和学习STC8H单片机,本文将通过三个案例程序,详细介绍如何使用STC8H单片机实现流水灯、按键控制LED和串口通信功能。
【STC8H单片机简介】STC8H是一款基于C51内核的8位单片机,具有高速、低功耗、高性能的特点。
内部集成了2KB到64KB的闪存和128字节到4KB的RAM,可满足不同应用场景的需求。
此外,STC8H还具备丰富的外设资源,如定时器、中断控制器、串口等,便于进行各种功能的开发。
【案例程序一:流水灯程序】流水灯程序是单片机入门学习的经典案例,通过此程序可以熟悉单片机的硬件连接和程序编写。
以下是流水灯程序的硬件连接、程序代码和运行结果。
a.硬件连接将单片机的某个I/O口与LED灯相连,共阳极连接。
b.程序代码```c#include <reg52.h>#include <intrins.h>sbit LED1 = P1^0;sbit LED2 = P1^1;sbit LED3 = P1^2;sbit LED4 = P1^3;sbit LED5 = P1^4;sbit LED6 = P1^5;sbit LED7 = P1^6;sbit LED8 = P1^7;void delay(unsigned int ms); void main(){while(1){LED1 = 0;delay(500);LED1 = 1;LED2 = 0;delay(500);LED2 = 1;LED3 = 0;delay(500);LED3 = 1;LED4 = 0;delay(500);LED4 = 1;LED5 = 0;delay(500);LED5 = 1;LED6 = 0;delay(500);LED6 = 1;LED7 = 0;delay(500);LED7 = 1;LED8 = 0;delay(500);LED8 = 1;}}void delay(unsigned int ms){unsigned int i, j;for(i = ms; i > 0; i--)for(j = 110; j > 0; j--);}```c.运行结果当程序运行时,LED灯将按照流水灯的方式顺序点亮和熄灭。
8脚51单片机介绍及头文件-STC15F104E
8脚51单片机介绍及头文件STC15F104ESTC的8脚单片机有直插和SOP两种形式的封装,其中有6个IO口,剩下2个是VCC和GND ,不需要带晶振内部自带有时钟发生电路,在此要说明这种型号的单片机有专用的烧录软件,在宏晶官网都有下载。
这6个IO口实际上是我们普通单片机上的P3口,实际编程时也是使用P3.X来实现IO口操作。
唯一的不同就是没有硬件的串口,需要用到定时器来模拟(这点不好),但是下载电路和STC的串口下载电路时一样的。
不做修改。
这个有点费解?下载时用到的是串口形式的下载电路,硬件上使用时却没有串口。
杯具啊!关于IO口的复用功能,除P3.1没有复用功能外,其他引脚均有复用功能。
分别是5个外部中断,3个时钟输出,一个复位输入。
芯片默认是不需要复位电路的,上电自复位的。
可以通过软件来选择引脚作为复位脚。
同时在烧录软件上可以选择低压复位。
手册上说的是8种。
软件上只显示了6种-不解???让人惊喜的是烧录软件上提供硬件开启看门狗功能。
还可以选择看门狗分频级数。
还是蛮方便的嘛。
程序又少了几句话。
最后要说一点的是该种单片机以E结尾的都有EEPROM喔。
例如我买的STC15F104E。
有了这种小的单片机,大家以后做点简单的玩意也不拍浪费了。
好东西。
支持一下!特附上修改过的STC15F04E 头文件/*STC15F104E单片机特殊功能寄存器头文件*/#ifndef __REG52_H__#define __REG52_H__/* BYTE Registers */sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;/*BIT5 LVDF 低压检测标记位只要VCC小于芯片门槛电压自动置1 需软件清0 同时也是低压检测中断标记位BIT1 PD 为1进入掉电模式硬件清0BIT0 IDL 为1进入空闲模式硬件清0*/sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;/* PSW */sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0; //8052 only/* TCON */sbit TF1 = TCON^7;sbit TR1 = TCON^6;sbit TF0 = TCON^5;sbit TR0 = TCON^4;sbit IE1 = TCON^3;sbit IT1 = TCON^2;sbit IE0 = TCON^1;sbit IT0 = TCON^0;/* IE */sbit EA = IE^7;sbit ELVD = IE^6; //低压检测中断sbit ET1 = IE^3;sbit EX1 = IE^2;sbit ET0 = IE^1;sbit EX0 = IE^0;/* IP */sbit PT1 = IP^3;sbit PX1 = IP^2;sbit PT0 = IP^1;sbit PX0 = IP^0;/* P3 */sbit RD = P3^7;sbit WR = P3^6;sbit T1 = P3^5;sbit T0 = P3^4;sbit INT1 = P3^3;sbit INT0 = P3^2;sbit TXD = P3^1;sbit RXD = P3^0;/*IO口的设置寄存器四种模式P3M0 P1M10 0 与普通的IO口一样0 1 设置为强推挽模式1 0 设置为高阻输入模式1 1 设置为高漏输出模式*/sfr P3M0=0XB2;sfr P3M1=0XB1;/*AUXR寄存器BIT7 T0X12 定时器0速度为传统12倍BIT6 T1X12 定时器1速度为传统12倍*/sfr AUXR=0X8E;//不可以位寻址的/*CLK_DIV时钟分频寄存器控制系统时钟的分频数。
STC8头文件
STC8INC汇编头文件$SAVE$NOLIST///////////////////////////////////////////////////STC8系列单片机:-1T8051/8K RAM/64K ROM/12位ADC/8组PWM/I2C/SPI/4串口//核特殊功能寄存器ACC DATA 0E0H; //累加器B DATA 0F0H; //B寄存器;----------------------------------------------PSW DATA 0D0H; //程序状态字寄存器CY BIT PSW.7;AC BIT PSW.6;F0 BIT PSW.5;RS1 BIT PSW.4; //-工作寄存器选择位1RS0 BIT PSW.3; //-工作寄存器选择位0OV BIT PSW.2;P BIT PSW.0;;-------------------------------------------------SP DATA 81H; //堆栈指针DPL DATA 82H; //数据指针(低字节)DPH DATA 83H; //数据指针(高字节)TA DATA 0AEH; //DPTR时序控制寄存器DPS DATA 0E3H; //DPTR指针选择器DPL1 DATA 0E4H; //第二组数据指针(低字节)DPH1 DATA 0E5H; //第二组数据指针(高字节)/////////I/O 口特殊功能寄存器/////////////////P0 DATA 80H; //P0端口P1 DATA 90H; //P1端口P2 DATA 0A0H; //P2端口P3 DATA 0B0H; //P3端口P4 DATA 0C0H; //P4端口P5 DATA 0C8H; //P5端口P6 DATA 0E8H; //P6端口P7 DATA 0F8H; //P7端口P0M0 DATA 94H; //P0口配置寄存器0P0M1 DATA 93H; //P0口配置寄存器1P1M0 DATA 92H; //P1口配置寄存器0P1M1 DATA 91H; //P1口配置寄存器1P2M0 DATA 96H; //P2口配置寄存器0P2M1 DATA 95H; //P2口配置寄存器1P3M0 DATA 0B2H; //P3口配置寄存器0P3M1 DATA 0B1H; //P3口配置寄存器1P4M0 DATA 0B4H; //P4口配置寄存器0P4M1 DATA 0B3H; //P4口配置寄存器1P5M0 DATA 0CAH; //P5口配置寄存器0P5M1 DATA 0C9H; //P5口配置寄存器1P6M0 DATA 0CCH; //P6口配置寄存器0P6M1 DATA 0CBH; //P6口配置寄存器1P7M0 DATA 0E2H; //P7口配置寄存器0P7M1 DATA 0E1H; //P7口配置寄存器1////////如下特殊功能寄存器位于扩展RAM区域////////访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写P0PU XDATA 0FE10H //P0口上拉电阻控制寄存器P1PU XDATA 0FE11H //P1口上拉电阻控制寄存器P2PU XDATA 0FE12H //P2口上拉电阻控制寄存器P3PU XDATA 0FE13H //P3口上拉电阻控制寄存器P4PU XDATA 0FE14H //P4口上拉电阻控制寄存器P5PU XDATA 0FE15H //P5口上拉电阻控制寄存器P6PU XDATA 0FE16H //P6口上拉电阻控制寄存器P7PU XDATA 0FE17H //P7口上拉电阻控制寄存器P0NCS XDATA 0FE18H //P0口施密特触发控制寄存器P1NCS XDATA 0FE19H //P1口施密特触发控制寄存器P2NCS XDATA 0FE1AH //P2口施密特触发控制寄存器P3NCS XDATA 0FE1BH //P3口施密特触发控制寄存器P4NCS XDATA 0FE1CH //P4口施密特触发控制寄存器P5NCS XDATA 0FE1DH //P5口施密特触发控制寄存器P6NCS XDATA 0FE1EH //P6口施密特触发控制寄存器P7NCS XDATA 0FE1FH //P7口施密特触发控制寄存器;-------------------------------------------------------//系统管理特殊功能寄存器PCON DATA 87H; //电源控制寄存器;SMOD EQU 80H //-串口1波特率控制位;SMOD0 EQU 40H //-帧错误检测控制位;LVDF EQU 20H //-低压检测标志位;POF EQU 10H //-上电标志位;GF1EQU 08H;GF0EQU 04H;PD EQU 02H //-掉电模式控制位;IDL EQU 01H //-IDLE(空闲)模式控制位;--------------------------------------------------------AUXR DATA 8EH //辅助寄存器;T0x12 EQU 80H //-定时器0速度控制位;T1x12 EQU 40H //定时器1速度控制位;UART_M0x6 EQU 20H //-串口1模式0的通讯速度控制位;T2R EQU 10H //-定时器2的运行控制位;T2_CT EQU 08H //-定时器0用作定时器或计数器控制位;T2x12 EQU 04H //-定时器2速度控制位;EXTRAM EQU 02H //-扩展RAM访问控制位;S1ST2 EQU 01H //-串口1波特率发射器选择位;-----------------------------------------------------------AUXR2 DATA 97H; //辅助寄存器2;TXLNRX EQU 10H //-串口1中继广播方式控制位BUS_SPEED DATA 0A1H; //总线速度控制寄存器P_SW1 DATA 0A2H; //外设端口切换寄存器1P_SW2 DATA 0BAH; //外设端口切换寄存器2;EAXFREQU 80HVOCTRL DATA 0BBH; //电压控制寄存器RSTCFG DATA 0FFH; //复位配置寄存器;------------------------------------------------------------------//如下特殊功能寄存器位于扩展RAM区域//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写CKSEL XDATA 0FE00H //时钟选择寄存器CLKDIV XDATA 0FE01H //时钟分频寄存器IRC24MCR XDATA 0FE02H //部24M振荡器控制寄存器XOSCCR XDATA 0FE03H //外部晶振控制寄存器IRC32KCR XDATA 0FE04H //部32K振荡器控制寄存器;----------------------------------------------------------------------//中断特殊功能寄存器IE DATA 0A8H; //中断允许寄存器EA BIT IE.7; //-总中断允许控制位ELVD BIT IE.6; //-低压检测中断允许位EADC BIT IE.5; //-A/D转换中断允许位ES BIT IE.4; //-串行口1中断允许位ET1 BIT IE.3; //-定时/计数器T1的溢出中断允许位EX1 BIT IE.2; //-外部中断1中断允许位ET0 BIT IE.1; //-定时/计数器T0的溢出中断允许位EX0 BIT IE.0; //-外部中断0中断允许位;-------------------------------------------------------------------IE2 DATA 0AFH; //中断允许寄存器2;ET4 EQU 40H //-定时/计数器T4的溢出中断允许位;ET3 EQU 20H //-定时/计数器T3的溢出中断允许位;ES4 EQU 10H //-串行口4中断允许位;ES3 EQU 08H //-串行口3中断允许位;ET2 EQU 04H //定时/计数器T2的溢出中断允许位;ESPI EQU 02H //SPI中断允许位;ES2 EQU 01H //串行口2中断允许位;------------------------------------------------------------------------IP DATA 0B8H; //中断优先级控制寄存器PPCA BIT IP.7; //-CCP/PCA中断优先级控制位PLVD BIT IP.6; //-低压检测中断优先级控制位PADC BIT IP.5; //-ADC中断优先级控制位PS BIT IP.4; //-串口1中断优先级控制位PT1 BIT IP.3; //-定时器1中断优先级控制位PX1 BIT IP.2; //-外部中断1中断优先级控制位PT0 BIT IP.1; //-定时器0中断优先级控制位PX0 BIT IP.0; //-外部中断0中断优先级控制位;-------------------------------------------------------IP2 DATA 0B5H; //中断优先级控制寄存器2;PI2C EQU 40H //-I2C中断优先级控制位;PCMP EQU 20H //-比较器中断优先级控制位;PX4 EQU 10H //-外部中断4中断优先级控制位;PPWMFD EQU 08H //-强型PWM异常检测中断优先级控制位;PPWM EQU 04H //-增强型PWM中断优先级控制位;PSPI EQU 02H //-SPI中断优先级控制位;PS2 EQU 01H //-串口2中断优先级控制位;----------------------------------------------------------IPH DATA 0B7H //高中断优先级控制寄存器;PPCAH EQU 80H //-CCP/PCA中断优先级控制位;PLVDH EQU 40H //-低压检测中断优先级控制位;PADCH EQU 20H //-ADC中断优先级控制位;PSH EQU 10H //-串口1中断优先级控制位;PT1H EQU 08H //-定时器1中断优先级控制位;PX1H EQU 04H //-外部中断1中断优先级控制位;PT0H EQU 02H //-定时器0中断优先级控制位;PX0H EQU 01H //-外部中断0中断优先级控制位;--------------------------------------------------------------------IP2H DATA 0B6H; //高中断优先级控制寄存器2;PI2CH EQU 40H //-I2C中断优先级控制位;PCMPH EQU 20H //-比较器中断优先级控制位;PX4H EQU 10H //-外部中断4中断优先级控制位;PPWMFDH EQU 08H //-增强型PWM异常检测中断优先级控制位;PPWMH EQU 04H //-增强型PWM中断优先级控制位;PSPIH EQU 02H //-SPI中断优先级控制位;PS2H EQU 01H //-串口2中断优先级控制位;-------------------------------------------------------------------INTCLKO DATA 8FH; //中断与时钟输出控制寄存器;EX4 EQU 40H //-外部中断4中断允许位;EX3 EQU 20H //-外部中断3中断允许位;EX2 EQU 10H //-外部中断2中断允许位;T2CLKO EQU 04H //-定时器2时钟输出控制;T1CLKO EQU 02H //-定时器1时钟输出控制;T0CLKO EQU 01H //-定时器0时钟输出控制;---------------------------------------------------------------------AUXINTIF DATA 0EFH; //扩展外部中断标志寄存器;INT4IF EQU 40H //-外部中断4中断请求标志;INT3IF EQU 20H //外部中断3中断请求标志;INT2IF EQU 10H //外部中断2中断请求标志;T4IF EQU 04H //-定时器4溢出中断标志;T3IF EQU 02H //-定时器3溢出中断标志;T2IF EQU 01H //-定时器2溢出中断标志;--------------------------------------------------------------------//定时器特殊功能寄存器TCON DATA 88H; //定时器控制寄存器TF1 BIT TCON.7; //-T1溢出中断标志TR1 BIT TCON.6; //-定时器T1的运行控制位TF0 BIT TCON.5; //-T0溢出中断标志TR0 BIT TCON.4; //-定时器T0的运行控制位IE1 BIT TCON.3; //-外部中断1请求源(INT1/P3.3)标志IT1 BIT TCON.2; //-外部中断源1触发控制位IE0 BIT TCON.1; //-外部中断0请求源(INT0/P3.2)标志IT0 BIT TCON.0; //-外部中断源0触发控制位;---------------------------------------------------------------TMOD DATA 89H; //定时器模式寄存器;T1_GATE EQU 80H //-控制定时器;T1_CT EQU 40H //-控制定时器1用作定时器或计数器;T1_M1 EQU 20H //定时器定时器/计数器1模式选择1 ;T1_M0 EQU 10H //定时器定时器/计数器1模式选择0 ;T0_GATE EQU 08H //-控制定时器0;T0_CT EQU 04H //-控制定时器0用作定时器或计数器;T0_M1 EQU 02H //定时器定时器/计数器0模式选择1 ;T0_M0 EQU 01H //定时器定时器/计数器0模式选择0 ;-----------------------------------------------------------TL0 DATA 8AH; //定时器0低8位寄存器TL1 DATA 8BH; //定时器1低8位寄存器TH0 DATA 8CH; //定时器0高8位寄存器TH1 DATA 8DH; //定时器1高8位寄存器;--------------------------------------------------------------T4T3M DATA 0D1H; //定时器4/3控制寄存器;T4R EQU 80H //-定时器4的运行控制位;T4_CT EQU 40H //-控制定时器4用作定时器或计数器;T4x12 EQU 20H //-定时器4速度控制位;T4CLKO EQU 10H //-定时器4时钟输出控制;T3R EQU 08H //-定时器3的运行控制位;T3_CT EQU 04H //-控制定时器3用作定时器或计数器;T3x12 EQU 02H //-定时器3速度控制位;T3CLKO EQU 01H //-定时器3时钟输出控制;-------------------------------------------------------------------T4H DATA 0D2H; //定时器4高字节T4L DATA 0D3H; //定时器4低字节T3H DATA 0D4H; //定时器3高字节T3L DATA 0D5H; //定时器3低字节T2H DATA 0D6H; //定时器2高字节T2L DATA 0D7H; //定时器2低字节TH4 DATA 0D2H;TL4 DATA 0D3H;TH3 DATA 0D4H;TL3 DATA 0D5H;TH2 DATA 0D6H;TL2 DATA 0D7H;;-------------------------------------------------------WKTCL DATA 0AAH; //掉电唤醒定时器低字节WKTCH DATA 0ABH; //掉电唤醒定时器高字节;WKTEN EQU 80H //-掉电唤醒定时器的使能控制位WDT_CONTR DATA 0C1H; //看门狗控制寄存器;WDT_FLAG EQU 80H //-看门狗溢出标志;EN_WDT EQU 20H //-看门狗使能位;CLR_WDT EQU 10H //-看门狗定时器清零;IDL_WDT EQU 08H //-IDLE模式时的看门狗控制位;-----------------------------------------------------------//串行口特殊功能寄存器SCON DATA 98H; //串口1控制寄存器SM0 BIT SCON.7; //-串口1的通信工作模式控制0SM1 BIT SCON.6; //-串口1的通信工作模式控制1SM2 BIT SCON.5; //-允许模式2或模式3多机通信控制位REN BIT SCON.4; //-允许/禁止串口接收控制位TB8 BIT SCON.3; //-当串口1使用模式2或模式3时,TB8为要发送的第9位数据RB8 BIT SCON.2; //-当串口1使用模式2或模式3时,RB8为接收到的第9位数据TI BIT SCON.1; //-串口1发送中断请求标志位RI BIT SCON.0; //-串口1接收中断请求标志位;-----------------------------------------------------------SBUF DATA 99H; //串口1数据寄存器;-----------------------------------------------------------S2CON DATA 9AH; //串口2控制寄存器;S2SM0 EQU 80H //-串口2的通信工作模式控制位;S2ST4 EQU 40H;S2SM2 EQU 20H //-允许串口2在模式1时允许多机通信控制位;S2REN EQU 10H //-串口2允许/禁止串口接收控制位;S2TB8 EQU 08H //-当串口2使用模式1时,S2TB8为要发送的第9位数据;S2RB8 EQU 04H //-当串口2使用模式1时,S2RB8为接收到的第9位数据;S2TI EQU 02H //-串口2发送中断请求标志位;S2RI EQU 01H //-串口2接收中断请求标志位;--------------------------------------------------------------S2BUF DATA 9BH; //串口2数据寄存器;--------------------------------------------------------------S3CON DATA 0ACH; //串口3控制寄存器;S3SM0 EQU 80H //-串口3的通信工作模式控制位;S3ST4 EQU 40H;S3SM2 EQU 20H //-允许串口3在模式1时允许多机通信控制位;S3REN EQU 10H //-串口3允许/禁止串口接收控制位;S3TB8 EQU 08H //-当串口3使用模式1时,S3TB8为要发送的第9位数据;S3RB8 EQU 04H //-当串口3使用模式1时,S3RB8为接收到的第9位数据;S3TI EQU 02H //-串口3发送中断请求标志位;S3RI EQU 01H //-串口3接收中断请求标志位;-----------------------------------------------------------------S3BUF DATA 0ADH; //串口3数据寄存器;-----------------------------------------------------------------S4CON DATA 84H; //串口4控制寄存器;S4SM0 EQU 80H //-串口4的通信工作模式控制位;S4ST4 EQU 40H //-选择串口4的波特率发生器;S4SM2 EQU 20H //-允许串口4在模式1时允许多机通信控制位;S4REN EQU 10H //-串口4允许/禁止串口接收控制位;S4TB8 EQU 08H //-当串口4使用模式1时,S3TB8为要发送的第9位数据;S4RB8 EQU 04H //-当串口4使用模式1时,S3RB8为接收到的第9位数据;S4TI EQU 02H //-串口4发送中断请求标志位;S4RI EQU 01H //-串口4接收中断请求标志位;--------------------------------------------------------------------S4BUF DATA 85H; //串口4数据寄存器SADDR DATA 0A9H; //串口1从机地址寄存器SADEN DATA 0B9H; //串口1从机地址屏蔽寄存器;--------------------------------------------//ADC 特殊功能寄存器ADC_CONTR DATA 0BCH; //ADC控制寄存器;ADC_POWER EQU 80H //-ADC电源控制位;ADC_START EQU 40H //-ADC转换启动控制位;ADC_FLAG EQU 20H //-ADC转换完成中断请求标志ADC_RES DATA 0BDH; //ADC转换结果高位寄存器ADC_RESL DATA 0BEH; //ADC转换结果低位寄存器ADCCFG DATA 0DEH; //ADC配置寄存器;ADC_RESFMT EQU 20H //-ADC转换结果格式控制位;-----------------------------------------------------------//SPI 特殊功能寄存器SPSTAT DATA 0CDH; //SPI状态寄存器;SPIF EQU 80H //-SPI中断标志位;WCOL EQU 40H //-SPI写冲突标志位SPCTL DATA 0CEH; //SPI控制寄存器;SSIG EQU 80H //-SS引脚功能控制位;SPEN EQU 40H //-SPI使能控制位;DORD EQU 20H //-SPI数据位发送/接收的顺序;MSTR EQU 10H //-器件主/从模式选择位;CPOL EQU 08H //-SPI时钟极性控制;CPHA EQU 04H //-SPI时钟相位控制SPDAT DATA 0CFH; //数据寄存器;-----------------------------------------------------------------//IAP/ISP 特殊功能寄存器IAP_DATA DATA 0C2H; //IAP数据寄存器IAP_ADDRH DATA 0C3H; //IAP高地址寄存器IAP_ADDRL DATA 0C4H; //IAP低地址寄存器IAP_CMD DATA 0C5H; //IAP命令寄存器;IAP_IDL EQU 00H //IAP_空操作;IAP_READ EQU 01H //IAP_读;IAP_WRITE EQU 02H //IAP_写;IAP_ERASE EQU 03H //IAP_擦除IAP_TRIG DATA 0C6H; //IAP触发寄存器IAP_CONTR DATA 0C7H; //IAP控制寄存器;IAPEN EQU 80H //-EEPROM操作使能控制位;SWBS EQU 40H //-软件复位选择控制位;SWRST EQU 20H //-软件复位控制位;CMD_FAIL EQU 10H //-EEPROM操作失败状态位ISP_DATA DATA 0C2H; //ISP数据寄存器ISP_ADDRH DATA 0C3H; //ISP高地址寄存器ISP_ADDRL DATA 0C4H; //ISP低地址寄存器ISP_CMD DATA 0C5H; //ISP命令寄存器ISP_TRIG DATA 0C6H; //ISP触发寄存器ISP_CONTR DATA 0C7H; //ISP控制寄存器;---------------------------------------------------------//比较器特殊功能寄存器CMPCR1 DATA 0E6H; //比较器控制寄存器1;CMPEN EQU 80H //-比较器模块使能位;CMPIF EQU 40H //-比较器中断标志位;PIE EQU 20H //-比较器上升沿中断使能位;NIE EQU 10H //-比较器下降沿中断使能位;PIS EQU 08H //-比较器的正极选择位;NIS EQU 04H //-比较器的负极选择位;CMPOE EQU 02H //-比较器结果输出控制位;CMPRES EQU 01H //-比较器的比较结果CMPCR2 DATA 0E7H; //比较器控制寄存器2;INVCMPO EQU 80H //-比较器结果输出控制;DISFLT EQU 40H //-模拟滤波功能控制;----------------------------------------------------------//PCA/PWM 特殊功能寄存器CCON DATA 0D8H; //PCA控制寄存器CF BIT CCON.7; //-PCA计数器溢出中断标志CR BIT CCON.6; //-PCA计数器允许控制位CCF3 BIT CCON.3; //-PCA模块3中断请求标志CCF2 BIT CCON.2; //-PCA模块2中断请求标志CCF1 BIT CCON.1; //-PCA模块1中断请求标志CCF0 BIT CCON.0; //-PCA模块0中断请求标志;----------------------------------------------------CMOD DATA 0D9H; //PCA模式寄存器;CIDL EQU 80H //-空闲模式下是否停止PCA计数;ECF EQU 01H //PCA计数器溢出中断允许位CL DATA 0E9H; //PCA计数器低字节CH DATA 0F9H; //PCA计数器高字节;-------------------------------------------------------CCAPM0 DATA 0DAH; //PCA模块0模式控制寄存器;ECOM0 EQU 40H //允许PCA模块0的比较功能;CCAPP0 EQU 20H //允许PCA模块0进行上升沿捕获;CCAPN0 EQU 10H //允许PCA模块0进行下降沿捕获;MAT0 EQU 08H //允许PCA模块0的匹配功能;TOG0 EQU 04H //允许PCA模块0的高速脉冲输出功能;PWM0 EQU 02H //允许PCA模块0的脉宽调制输出功能;ECCF0 EQU 01H //允许PCA模块0的匹配/捕获中断CCAPM1 DATA 0DBH; //PCA模块1模式控制寄存器;ECOM1 EQU 40H //允许PCA模块1的比较功能;CCAPP1 EQU 20H //允许PCA模块1进行上升沿捕获;CCAPN1 EQU 10H //允许PCA模块1进行下降沿捕获;MAT1 EQU 08H //允许PCA模块1的匹配功能;TOG1 EQU 04H //允许PCA模块1的高速脉冲输出功能;PWM1 EQU 02H //允许PCA模块1的脉宽调制输出功能;ECCF1 EQU 01H //允许PCA模块1的匹配/捕获中断CCAPM2 DATA 0DCH; //PCA模块2模式控制寄存器;ECOM2 EQU 40H //允许PCA模块2的比较功能;CCAPP2 EQU 20H //允许PCA模块2进行上升沿捕获;CCAPN2 EQU 10H //允许PCA模块2进行下降沿捕获;MAT2 EQU 08H //允许PCA模块2的匹配功能;TOG2 EQU 04H //允许PCA模块2的高速脉冲输出功能;PWM2 EQU 02H //允许PCA模块2的脉宽调制输出功能;ECCF2 EQU 01H //允许PCA模块2的匹配/捕获中断CCAPM3 DATA 0DDH; //PCA模块3模式控制寄存器;ECOM3 EQU 40H //-允许PCA模块3的比较功能;CCAPP3 EQU 20H //-允许PCA模块3进行上升沿捕获;CCAPN3 EQU 10H //-允许PCA模块3进行下降沿捕获;MAT3 EQU 08H //-允许PCA模块3的匹配功能;TOG3 EQU 04H //-允许PCA模块3的高速脉冲输出功能;PWM3 EQU 02H //-允许PCA模块3的脉宽调制输出功能;ECCF3 EQU 01H //-允许PCA模块3的匹配/捕获中断CCAP0L DATA 0EAH; //PCA模块0低字节CCAP1L DATA 0EBH; //PCA模块1低字节CCAP2L DATA 0ECH; //PCA模块2低字节CCAP3L DATA 0EDH; //PCA模块3低字节CCAP0H DATA 0FAH; //PCA模块0高字节CCAP1H DATA 0FBH; //PCA模块1高字节CCAP2H DATA 0FCH; //PCA模块2高字节CCAP3H DATA 0FDH; //PCA模块3高字节PCA_PWM0 DATA 0F2H; //PCA0的PWM模式寄存器PCA_PWM1 DATA 0F3H; //PCA1的PWM模式寄存器PCA_PWM2 DATA 0F4H; //PCA2的PWM模式寄存器PCA_PWM3 DATA 0F5H; //PCA3的PWM模式寄存器//增强型PWM波形发生器特殊功能寄存器PWMCFG DATA 0F1H; //PWM计数器;CBIF EQU 80H //-增强型PWM计数器中断请求标志;ETADC EQU 40H //-PWM是否与ADC关联PWMIF DATA 0F6H; //增强型PWM中断标志寄存器;C7IF EQU 80H //增强型PWM通道7中断请求标志(需要软件清零) ;C6IF EQU 40H //增强型PWM通道6中断请求标志(需要软件清零) ;C5IF EQU 20H //增强型PWM通道5中断请求标志(需要软件清零) ;C4IF EQU 10H //增强型PWM通道4中断请求标志(需要软件清零) ;C3IF EQU 08H //增强型PWM通道3中断请求标志(需要软件清零) ;C2IF EQU 04H //增强型PWM通道2中断请求标志(需要软件清零) ;C1IF EQU 02H //增强型PWM通道1中断请求标志(需要软件清零) ;C0IF EQU 01H //增强型PWM通道0中断请求标志(需要软件清零) PWMFDCR DATA 0F7H; //PWM异常检测控制寄存器;INVCMP EQU 80H //-比较器器结果异常信号处理;INVIO EQU 40H //-外部端口P3.5异常信号处理;ENFD EQU 20H //-PWM外部异常检测控制位;FLTFLIO EQU 10H //-发生PWM外部异常时对PWM输出口控制位;EFDI EQU 08H //-PWM异常检测中断使能位;FDCMP EQU 04H //-比较器输出异常检测使能位;FDIO EQU 02H //-P3.5口电平异常检测使能位;FDIF EQU 01H //-增强型PWM异常检测中断请求标志PWMCR DATA 0FEH; //PWM控制寄存器;ENPWM EQU 80H //-增强型PWM波形发生器使能位;ECBI EQU 40H //-PWM计数器归零中断使能位;------------------------------------------------------------//如下特殊功能寄存器位于扩展RAM区域//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写PWMC XDATA 0FFF0H //PWM计数器PWMCH XDATA 0FFF0H //PWM计数器高字节PWMCL XDATA 0FFF1H //PWM计数器低字节PWMCKS XDATA 0FFF2H //PWM时钟选择TADCP XDATA 0FFF3H //触发ADC计数值TADCPH XDATA 0FFF3H //触发ADC计数值高字节TADCPL XDATA 0FFF4H //触发ADC计数值低字节PWM0T1 XDATA 0FF00H //PWM0T1计数值PWM0T1H XDATA 0FF00H //PWM0T1计数值高字节PWM0T1L XDATA 0FF01H //PWM0T1计数值低字节PWM0T2 XDATA 0FF02H //PWM0T2数值PWM0T2H XDATA 0FF02H //PWM0T2数值高字节PWM0T2L XDATA 0FF03H //PWM0T2数值低字节PWM0CR XDATA 0FF04H //PWM0控制寄存器PWM0HLD XDATA 0FF05H //PWM0电平保持控制寄存器PWM1T1 XDATA 0FF10H //PWM1T1计数值PWM1T1H XDATA 0FF10H //PWM1T1计数值高字节PWM1T1L XDATA 0FF11H //PWM1T1计数值低字节PWM1T2 XDATA 0FF12H //PWM1T2数值PWM1T2H XDATA 0FF12H //PWM1T2数值高字节PWM1T2L XDATA 0FF13H //PWM1T2数值低字节PWM1CR XDATA 0FF14H //PWM1控制寄存器PWM1HLD XDATA 0FF15H //PWM1电平保持控制寄存器PWM2T1 XDATA 0FF20H //PWM2T1计数值PWM2T1H XDATA 0FF20H //PWM2T1计数值高字节PWM2T1L XDATA 0FF21H //PWM2T1计数值低字节PWM2T2 XDATA 0FF22H //PWM2T2数值PWM2T2H XDATA 0FF22H //PWM2T2数值高字节PWM2T2L XDATA 0FF23H //PWM2T2数值低字节PWM2CR XDATA 0FF24H //PWM2控制寄存器PWM2HLD XDATA 0FF25H //PWM2电平保持控制寄存器PWM3T1 XDATA 0FF30H //PWM3T1计数值PWM3T1H XDATA 0FF30H //PWM3T1计数值高字节PWM3T1L XDATA 0FF31H //PWM3T1计数值低字节PWM3T2 XDATA 0FF32H //PWM3T2数值PWM3T2H XDATA 0FF32H //PWM3T2数值高字节PWM3T2L XDATA 0FF33H //PWM3T2数值低字节PWM3CR XDATA 0FF34H //PWM3控制寄存器PWM3HLD XDATA 0FF35H //PWM3电平保持控制寄存器PWM4T1 XDATA 0FF40H //PWM4T1计数值PWM4T1H XDATA 0FF40H //PWM4T1计数值高字节PWM4T1L XDATA 0FF41H //PWM4T1计数值低字节PWM4T2 XDATA 0FF42H //PWM4T2数值PWM4T2H XDATA 0FF42H //PWM4T2数值高字节PWM4T2L XDATA 0FF43H //PWM4T2数值低字节PWM4CR XDATA 0FF44H //PWM4控制寄存器PWM4HLD XDATA 0FF45H //PWM4电平保持控制寄存器PWM5T1 XDATA 0FF50H //PWM5T1计数值PWM5T1H XDATA 0FF50H //PWM5T1计数值高字节PWM5T1L XDATA 0FF51H //PWM5T1计数值低字节PWM5T2 XDATA 0FF52H //PWM5T2数值PWM5T2H XDATA 0FF52H //PWM5T2数值高字节PWM5T2L XDATA 0FF53H //PWM5T2数值低字节PWM5CR XDATA 0FF54H //PWM5控制寄存器PWM5HLD XDATA 0FF55H //PWM5电平保持控制寄存器PWM6T1 XDATA 0FF60H //PWM6T1计数值PWM6T1H XDATA 0FF60H //PWM6T1计数值高字节PWM6T1L XDATA 0FF61H //PWM6T1计数值低字节PWM6T2 XDATA 0FF62H //PWM6T2数值PWM6T2H XDATA 0FF62H //PWM6T2数值高字节PWM6T2L XDATA 0FF63H //PWM6T2数值低字节PWM6CR XDATA 0FF64H //PWM6控制寄存器PWM6HLD XDATA 0FF65H //PWM6电平保持控制寄存器PWM7T1 XDATA 0FF70H //PWM7T1计数值PWM7T1H XDATA 0FF70H //PWM7T1计数值高字节PWM7T1L XDATA 0FF71H //PWM7T1计数值低字节PWM7T2 XDATA 0FF72H //PWM7T2数值PWM7T2H XDATA 0FF72H //PWM7T2数值高字节PWM7T2L XDATA 0FF73H //PWM7T2数值低字节PWM7CR XDATA 0FF74H //PWM7控制寄存器PWM7HLD XDATA 0FF75H //PWM7电平保持控制寄存器//I2C特殊功能寄存器//如下特殊功能寄存器位于扩展RAM区域//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写I2CCFG XDATA 0FE80H //I2C配置寄存器;ENI2C EQU 080H //-I2C功能使能控制位;MSSL EQU 040H //-I2C工作模式选择位I2CMSCR XDATA 0FE81H //I2C主机控制寄存器;EMSI EQU 80H //-I2C主机模式中断使能控制位I2CMSST XDATA 0FE82H //I2C主机状态寄存器;MSBUSY EQU 80H //-主机模式时I2C控制器状态位(只读位);MSIF EQU 40H //-主机模式的中断请求位(中断标志位);MSACKI EQU 02H //-主机模式时,发送“011”命令到I2CMSCR的MSCMD位后所接收到的ACK数据;MSACKO EQU 01H //-主机模式时,准备将要发送出去的ACK信号I2CSLCR XDATA 0FE83H //I2C从机控制寄存器;ESTAI EQU 40H //-I2C从机接收START事件中断允许位;ERXI EQU 20H //-I2C从机接收数据完成事件中断允许位;ETXI EQU 10H //-I2C从机发送数据完成事件中断允许位;ESTOI EQU 08H //-从机模式时接收到STOP信号中断允许位;SLRST EQU 01H //-复位从机模式I2CSLST XDATA 0FE84H //I2C从机状态寄存器;SLBUSY EQU 80H //-从机模式时I2C控制器状态位(只读位);STAIF EQU 40H //-从机模式时接收到START信号后的中断请求;RXIF EQU 20H //-从机模式时接收到1字节的数据后的中断请;TXIF EQU 10H //-从机模式时发送完成1字节的数据后的中断;STOIF EQU 08H //-从机模式时接收到STOP信号后的中断请求;TXING EQU 04H;SLACKI EQU 02H //-从机模式时,接收到的ACK数据;SLACKO EQU 01H //-从机模式时,准备将要发送出去的ACK信号I2CSLADR XDATA 0FE85H //I2C从机地址寄存器I2CTXD XDATA 0FE86H //I2C数据发送寄存器I2CRXD XDATA 0FE87H //I2C数据接收寄存器/////////////////////////////////////////////////$RESTORE。
关于STC15系列单片机头文件添加的问题
关于STC15系列单片机头文件添加的问题
在我们使用Keil软件编写程序时,在建立工程初期都要选择CPU型号,如:STC89C52单片机选择AT89C52型号,如图1:
图1
但有时我们使用STC15系列的单片机时,浏览所有CPU型号,并没有STC 型号的单片机,如果此时再以此芯片建立工程就会出现各种各样的问题,如STC15W408AS型号的单片机,引脚有P5口,而STC89C52是没有此IO口的。
如图2:
图2
此时,我们建立工程时就要添加必要的头文件。
下面,我们就以STC15W408AS 为例,建立工程编写程序。
第一步:打开stc-isp程序下载软件
第二步:在stc-isp软件的有上方的选择栏里有一个选项(Keil仿真设置),点击后会出现添加型号和头文件到Keil中添加STC仿真器驱动到Keil中的字样,如图3:
图 3
第三步:点击此按钮,选择你安装Keil软件时的路径下的UV4文件夹,如下图:
我安装时是
D:\keil4\Keil\UV4
选择UV4后点击确定。
添加成功后就会出现STC
MCU型号添加成功!的提
示。
添加成功后再打开Keil软件新建工程,就会出现以下界面:
点击向下的按钮会出现STC型号的选项
选择STC MCU Database就会有STC15型号的单片机了。
此后建立就和以前是一样的了。
程序编写好后再编译就没有错误了。
stc8a8k64s4a12中文资料_数据手册_参数
3.4.3 LQFP48 封装尺寸图(9mm*9mm) ................................................................................... 59
3.4.4 LQFP44 封装尺寸图(12mm*12mm) ............................................................................... 60
3.8.3 STC8F8K64S4A12 应用线路图............................................................................................ 67
3.8.4 STC8F2K64S4 应用线路图 .................................................................................................. 67
3.7 STC8 系列单片机命名规则............................................................................................................. 65
3.8 应用线路图 ....................................................................................................................................... 66
3.5 STC8 系列单片机选型价格一览表 ................................................................................................. 63
单片机stc89(STC89C52,C51)系列头文件.doc
/*------------------------------------------------*//* --- 宏晶科技STCMCU ---------------------------*//* --- Mobile: (86) -------------------*//* --- Fax: 86- ----------------------*//* --- Tel: 86- ----------------------*//* --- Web: -----------------------*//* 适用于: STC89C5xRC STC89LE5xRC --------------*//* ------- STC89C5xRD+ STC89LE5xRD+ --------------*//*------------------------------------------------*/#ifndef __STC89_H__#define __STC89_H__////////////////////////////////////////////////////////////////////////////////////////////////////////////////sfr PSW = 0xd0; //程序状态字 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述CY AC F0 RS1 RS0 OV F1 P//初始值=0000,0000 0 0 0 0 0 0 0 0sbit CY = PSW^7; //进位标志sbit AC = PSW^6; //辅助进位标志sbit F0 = PSW^5; //用户标志sbit RS1 = PSW^4; //寄存器组选择位sbit RS0 = PSW^3; //寄存器组选择位sbit OV = PSW^2; //溢出标志sbit P = PSW^0; //ACC的偶校验位/////////////////////////////////sfr ACC = 0xe0; //累加器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0sbit ACC7 = ACC^7; //累加器第位sbit ACC6 = ACC^6; //累加器第位sbit ACC5 = ACC^5; //累加器第位sbit ACC4 = ACC^4; //累加器第位sbit ACC3 = ACC^3; //累加器第位sbit ACC2 = ACC^2; //累加器第位sbit ACC1 = ACC^1; //累加器第位sbit ACC0 = ACC^0; //累加器第位/////////////////////////////////sfr B = 0xf0; //B寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr SP = 0x81; //堆栈指针 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0111 0 0 0 0 0 1 1 1/////////////////////////////////sfr DPL = 0x82; //数据指针低字节 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0sfr DPH = 0x83; //数据指针高字节 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0////////////////////////////////////////////////////////////////////////////////////////////////////////////////sfr PCON = 0x87; //电源控制寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 SMOD SMOD0 - POF GF1 GF0 PD IDL//初始值=00x1,0000 0 0 x 1 0 0 0 0#define SMOD 0x80 //串口波特率倍速位,置可使波特率快倍#define SMOD0 0x40 //FE/SM0选择位,0:为SM0 1:为FE#define POF 0x10 //上电复位标志位,上电时由硬件置,需由软件清#define GF1 0x08 //通用标志位#define GF0 0x04 //通用标志位#define PD 0x02 //掉电控制位,写可以使MCU进入PowerDown模式#define IDL 0x01 //空闲控制位,写可以使MCU进入Idle模式/////////////////////////////////sfr WDT_CONTR = 0xe1; //看门狗定时器控制器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述- - EN_WDT CLR_WDT IDL_WDT PS2 PS1 PS0//初始值=xx00,0000 x x 0 0 0 0 0 0#define EN_WDT 0x20 //软件使能看门狗,打开后不能用软件的方式关闭#define CLR_WDT 0x10 //清看门狗定时器#define IDLE_WDT 0x08 //IDLE模式下,看门狗定时器是否继续计时////////////////////////////////////////////////////////////////////////////////////////////////////////////////sfr AUXR = 0x8e; //辅助寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述- - - - - - EXTRAM S1BRS//初始值=xxxx,xx00 xx x x x x 0 0#define EXTRAM 0x02 //内部扩展RAM禁能位,0:内部扩展RAM有效1:禁用内部扩展RAM#define ALEOFF 0x01 //禁止ALE信号输出,0:使能ALE信号输出1:关闭ALE信号输出/////////////////////////////////sfr AUXR1 = 0xa2; //辅助寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述- - - - GF2 - - DPS//初始值=xxxx,0xx0 x x x x 0 x x 0#define GF2 0x08 //通用标志位#define DPS 0x01 //DPTR0/DPTR1选择位,0:DPTR01:DPTR1////////////////////////////////////////////////////////////////////////////////////////////////////////////////sfr P0 = 0x80; //I/O端口 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述//初始值=1111,1111 1 1 1 1 1 1 1 1sbit P07 = P0^7; //I/O口sbit P06 = P0^6; //I/O口sbit P05 = P0^5; //I/O口sbit P04 = P0^4; //I/O口sbit P03 = P0^3; //I/O口sbit P02 = P0^2; //I/O口sbit P01 = P0^1; //I/O口sbit P00 = P0^0; //I/O口/////////////////////////////////sfr P1 = 0x90; //I/O端口 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述//初始值=1111,1111 1 1 1 1 1 1 1 1sbit P17 = P1^7; //I/O口sbit P15 = P1^5; //I/O口sbit P14 = P1^4; //I/O口sbit P13 = P1^3; //I/O口sbit P12 = P1^2; //I/O口sbit P11 = P1^1; //I/O口sbit P10 = P1^0; //I/O口sbit T2 = P1^0; //定时器的外部信号输入口sbit T2CLKO = P1^0; //定时器定的时钟溢出脉冲输出脚sbit T2EX = P1^1; //定时器的中断控制源/////////////////////////////////sfr P2 = 0xa0; //I/O端口 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述//初始值=1111,1111 1 1 1 1 1 1 1 1sbit P27 = P2^7; //I/O口sbit P26 = P2^6; //I/O口sbit P24 = P2^4; //I/O口sbit P23 = P2^3; //I/O口sbit P22 = P2^2; //I/O口sbit P21 = P2^1; //I/O口sbit P20 = P2^0; //I/O口/////////////////////////////////sfr P3 = 0xb0; //I/O端口 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述//初始值=1111,1111 1 1 1 1 1 1 1 1sbit P37 = P3^7; //I/O口sbit P36 = P3^6; //I/O口sbit P35 = P3^5; //I/O口sbit P34 = P3^4; //I/O口sbit P33 = P3^3; //I/O口sbit P32 = P3^2; //I/O口sbit P31 = P3^1; //I/O口sbit RXD = P3^0; //串口的数据接收口sbit TXD = P3^1; //串口的数据发送口sbit INT0 = P3^2; //外部中断的信号输入口sbit INT1 = P3^3; //外部中断的信号输出口sbit T0 = P3^4; //定时器的外部信号输入口sbit T1 = P3^5; //定时器的外部信号输入口sbit WR = P3^6; //外部数据存储器的写信号sbit RD = P3^7; //外部数据存储器的读信号/////////////////////////////////sfr P4 = 0xc0; //I/O端口 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 -//初始值=xxxx,1111 xx x x 1 1 1 1sbit P43 = P4^3; //I/O口sbit P42 = P4^2; //I/O口sbit P41 = P4^1; //I/O口sbit P40 = P4^0; //I/O口////////////////////////////////////////////////////////////////////////////////////////////////////////////////sfr IE = 0xa8; //中断使能寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述EA - ET2 ES ET1 EX1 ET0 EX0//初始值=0x00,0000 0 x 0 0 0 0 0 0sbit EA = IE^7; //总中断开关sbit ET2 = IE^5; //定时器中断使能位sbit ES = IE^4; //串口中断使能位sbit ET1 = IE^3; //定时器中断使能位sbit EX1 = IE^2; //外部中断中断使能位sbit ET0 = IE^1; //定时器中断使能位sbit EX0 = IE^0; //外部中断中断使能位/////////////////////////////////sfr IPH = 0xb7; //中断优先级寄存器高位 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 PX3H PX2H PT2H PSH PT1H PX1H PT0H PX0H//初始值=0000,0000 0 0 0 0 0 0 0 0#define PX3H 0x80 //外部中断中断优先级控制高位#define PX2H 0x40 //外部中断中断优先级控制高位#define PT2H 0x20 //定时器中断优先级控制高位#define PSH 0x10 //串口中断优先级控制高位#define PT1H 0x08 //定时器中断优先级控制高位#define PX1H 0x04 //外部中断中断优先级控制高位#define PT0H 0x02 //定时器中断优先级控制高位#define PX0H 0x01 //外部中断中断优先级控制高位/////////////////////////////////sfr IP = 0xb8; //中断优先级寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述- - PT2 PS PT1 PX1 PT0 PX0//初始值=xx00,0000 x x 0 0 0 0 0 0sbit PT2 = IP^5; //定时器中断优先级控制低位sbit PS = IP^4; //串口中断优先级控制低位sbit PT1 = IP^3; //定时器中断优先级控制低位sbit PX1 = IP^2; //外部中断中断优先级控制低位sbit PT0 = IP^1; //定时器中断优先级控制低位sbit PX0 = IP^0; //外部中断中断优先级控制低位/////////////////////////////////sfr XICON = 0xe8; //辅助中断使能寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 PX3 EX3 IE3 IT3 PX2 EX2 IE2 IT2//初始值=0000,0000 0 0 0 0 0 0 0 0sbit PX3 = XICON^7; //外部中断中断优先级控制低位sbit EX3 = XICON^6; //使能外部中断sbit IE3 = XICON^5; //外部中断的中断请求位,由硬件置,可由软件清或者在中断处理程序完成后由硬件自动清sbit IT3 = XICON^4; //外部中断的触发类型,0:低电平触发外部中断1:下降沿触发外部中断sbit PX2 = XICON^3; //外部中断中断优先级控制低位sbit EX2 = XICON^2; //使能外部中断sbit IE2 = XICON^1; //外部中断的中断请求位,由硬件置,可由软件清或者在中断处理程序完成后由硬件自动清sbit IT2 = XICON^0; //外部中断的触发类型,0:低电平触发外部中断1:下降沿触发外部中断#define X0_INTNO 0 //外部中断中断号,入口地址为H#define T0_INTNO 1 //定时器中断号,入口地址为BH#define X1_INTNO 2 //外部中断中断号,入口地址为H#define T1_INTNO 3 //定时器中断号,入口地址为BH#define UART_INTNO 4 //串口中断号,入口地址为H#define T2_INTNO 5 //定时器中断号,入口地址为BH#define X2_INTNO 6 //外部中断中断号,入口地址为H#define X3_INTNO 7 //外部中断中断号,入口地址为BH////////////////////////////////////////////////////////////////////////////////////////////////////////////////sfr TCON = 0x88; //定时器/1控制寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0//初始值=0000,0000 0 0 0 0 0 0 0 0sbit TF1 = TCON^7; //定时器溢出标志,由硬件置,可由软件清或者在中断处理程序完成后由硬件自动清sbit TR1 = TCON^6; //定时器的启动控制位,1:启动定时器0:停止定时器sbit TF0 = TCON^5; //定时器溢出标志,由硬件置,可由软件清或者在中断处理程序完成后由硬件自动清sbit TR0 = TCON^4; //定时器的启动控制位,1:启动定时器0:停止定时器sbit IE1 = TCON^3; //外部中断的中断请求位,由硬件置,可由软件清或者在中断处理程序完成后由硬件自动清sbit IT1 = TCON^2; //外部中断的触发类型,0:低电平触发外部中断1:下降沿触发外部中断sbit IE0 = TCON^1; //外部中断的中断请求位,由硬件置,可由软件清或者在中断处理程序完成后由硬件自动清sbit IT0 = TCON^0; //外部中断的触发类型,0:低电平触发外部中断1:下降沿触发外部中断/////////////////////////////////sfr TMOD = 0x89; //定时器/1模式寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 GATEC/T# M1 M0 GATE C/T# M1 M0//初始值=0000,0000 0 0 0 0 0 0 0 0#define GATE1 0x80 //定时器启动控制位,0:TR1为时启动定时器1:TR1为且INT1为高电平时才启动定时器#define C_T1 0x40 //定时器/计数器选择位,0:定时器(时钟源为内部时钟) 1:计数器(时钟源为T1引脚的外部时钟)#define T1_M0 0x00 //定时器操作模式:13位定时器#define T1_M1 0x10 //定时器操作模式:16位定时器#define T1_M2 0x20 //定时器操作模式:8位自动重载定时器#define T1_M3 0x30 //定时器操作模式:定时器停止#define GATE0 0x08 //定时器启动控制位,0:TR0为时启动定时器1:TR0为且INT0为高电平时才启动定时器#define C_T0 0x04 //定时器/计数器选择位,0:定时器(时钟源为内部时钟) 1:计数器(时钟源为T0引脚的外部时钟)#define T0_M0 0x00 //定时器操作模式:13位定时器#define T0_M1 0x01 //定时器操作模式:16位定时器#define T0_M2 0x02 //定时器操作模式:8位自动重载定时器#define T0_M3 0x03 //定时器操作模式:TL0和TH0为两组独立位定时器/////////////////////////////////sfr TL0 = 0x8a; //定时器的低位计数值 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr TL1 = 0x8b; //定时器的低位计数值 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr TH0 = 0x8c; //定时器的高位计数值 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr TH1 = 0x8d; //定时器的高位计数值 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr T2CON = 0xc8; //定时器控制寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2# CP/RL#//初始值=0000,0000 0 0 0 0 0 0 0 0sbit TF2 = T2CON^7; //定时器溢出标志,由硬件置,必须由软件清sbit EXF2 = T2CON^6; //定时器的外部标志,由硬件置,必须由软件清sbit RCLK = T2CON^5; //接收时钟标志,0:使用定时器作为串口接收发生器1:使用定时器作为串口接收发生器sbit TCLK = T2CON^4; //发送时钟标志,0:使用定时器作为串口发送发生器1:使用定时器作为串口发送发生器sbit EXEN2 = T2CON^3; //定时器的外部使能标志sbit TR2 = T2CON^2; //启动定时期sbit C_T2 = T2CON^1; //定时器/计数器选择位,0:定时器(时钟源为内部时钟) 1:计数器(时钟源为T2引脚的外部时钟)sbit CP_RL2 = T2CON^0; //捕获/重载标志/////////////////////////////////sfr T2MOD = 0xc9; //定时器/1模式寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述- - - - - - T2OE DCEN//初始值=xxxx,xx00 x x x x x x 0 0#define T2OE 0x02 //定时器输出使能,输出溢出率到T2脚#define DCEN 0x01 //定时器向下计数,0:向上计数1:向下计数/////////////////////////////////sfr RCAP2L = 0xca; //定时器重载/捕获低位Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr RCAP2H = 0xcb; //定时器重载/捕获高位Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr TL2 = 0xcc; //定时器的低位计数值 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr TH2 = 0xcd; //定时器的高位计数值 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr SCON = 0x98; //串口控制寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 SM0/FESM1 SM2 REN TB8 RB8 TI Ri//初始值=0000,0000 0 0 0 0 0 0 0 0sbit FE = SCON^7; //帧错误检测位,当串口模块在接收数据时没有检测到正确的停止位时,FE被硬件置,需要由软件来清(当SMOD0为时,FE有效)sbit SM0 = SCON^7; //串口模式设置位sbit SM1 = SCON^6; //SM0/SM1=0/0:移位寄存器0/1:8位可变波特率1/0:9位固定波特率1/1:9位可变波特率sbit SM2 = SCON^5; //自动地址识别使能位sbit REN = SCON^4; //使能串口接收模块sbit TB8 = SCON^3; //发送的第位数据sbit RB8 = SCON^2; //接收的第位数据sbit TI = SCON^1; //发送完成中断标志sbit RI = SCON^0; //接收完成中断标志/////////////////////////////////sfr SBUF = 0x99; //串口接收/发送数据 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=xxxx,xxxx x x x x x x x x/////////////////////////////////sfr SADDR = 0xa9; //串口设备从地址寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr SADEN = 0xb9; //串口设备从地址屏蔽位 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0////////////////////////////////////////////////////////////////////////////////////////////////////////////////sfr ISP_DATA = 0xe2; //ISP数据寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=1111,1111 1 1 1 1 1 1 1 1/////////////////////////////////sfr ISP_ADDRH = 0xe3; //ISP地址高位寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr ISP_ADDRL = 0xe4; //ISP地址低位寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=0000,0000 0 0 0 0 0 0 0 0/////////////////////////////////sfr ISP_CMD = 0xe5; //ISP命令寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=xxxx,xx00 x x x x x 0 0 0#define ISP_IDLE 0x00 //ISP待机命令#define ISP_READ 0x01 //ISP读字节数据命令#define ISP_PROGRAM 0x02 //ISP字节编程命令#define ISP_ERASE 0x03 //ISP扇区擦除命令(每扇区字节))/////////////////////////////////sfr ISP_TRIG = 0xe6; //ISP命令触发寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//初始值=xxxx,xxxx x x x x x x x x#define ISP_TRIG0 0x46 //ISP功能触发命令#define ISP_TRIG1 0xb9 //ISP功能触发命令/////////////////////////////////sfr ISP_CONTR = 0xe7; //ISP控制寄存器 Bit7Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0//位描述 ISPEN SWBS SWRST - - WT2 WT1 WT0//初始值=000x,x000 0 0 0 x x 0 0 0#define ISPEN 0x80 //ISP使能开关#define SWBS 0x40 //软启动选择,0:从用户AP启动1:从ISP启动#define SWRST 0x20 //触发软件复位////////////////////////////////////////////////////////////////////////////////////////////////////////////////#endif。
stc头文件
//--------------------------------------------------------------------------------//新一代 1T 8051系列单片机内核特殊功能寄存器 C51 Core SFRs// 7 6 5 4 3 21 0 Reset Valuesfr ACC = 0xE0; //Accumulator 0000,0000sfr B = 0xF0; //B Register 0000,0000sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OVF1 P 0000,0000//-----------------------------------sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0;//-----------------------------------sfr SP = 0x81; //Stack Pointer 0000,0111sfr DPL = 0x82; //Data Pointer Low Byte 0000,0000sfr DPH = 0x83; //Data Pointer High Byte 0000,0000//--------------------------------------------------------------------------------//新一代 1T 8051系列单片机系统管理特殊功能寄存器// 7 6 5 4 3 21 0 Reset Valuesfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PDIDL 0001,0000// 7 6 5 4 3 21 0 Reset Valuesfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12EXTRAM S1BRS 0000,0000//-----------------------------------sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ -DPS 0000,0000/*PCA_P4:0, 缺省PCA 在P1 口1,PCA/PWM 从P1 口切换到P4 口: ECI 从P1.2 切换到P4.1 口,PCA0/PWM0 从P1.3 切换到P4.2 口PCA1/PWM1 从P1.4 切换到P4.3 口SPI_P4:0, 缺省SPI 在P1 口1,SPI 从P1 口切换到P4 口: SPICLK 从P1.7 切换到P4.3 口MISO 从P1.6 切换到P4.2 口MOSI 从P1.5 切换到P4.1 口SS 从P1.4 切换到P4.0 口S2_P4:0, 缺省UART2 在P1 口1,UART2 从P1 口切换到P4 口: TxD2 从P1.3 切换到P4.3 口RxD2 从P1.2 切换到P4.2 口GF2: 通用标志位ADRJ:0, 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器1,10 位A/D 转换结果的最高 2 位放在ADC_RES 寄存器的低 2 位, 低8 位放在ADC_RESL 寄存器DPS: 0, 使用缺省数据指针DPTR01,使用另一个数据指针DPTR1*///-----------------------------------sfr WAKE_CLKO = 0x8F; //附加的 SFR WAK1_CLKO/*7 6 5 4 3 2 1 0 Reset ValuePCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE _ T1CLKO T0CLKO 0000,0000Bb7 - PCAWAKEUP : PCA 中断可唤醒 powerdown。
STC8F头文件
#ifndef __STC8F_H_#define __STC8F_H_///////////////////////////////////////////////// 〃包含本头文件后,不用另外再包含“REG51.H"//内核特殊功能寄存器sfr ACC = 0xe0;sfr B = 0xf0;sfr PSW = 0xd0;sbit CY = PSW A7;sbit AC = PSW A6;sbit F0 = PSW A5;sbit RS1 = PSW A4;sbit RS0 = PSW”;sbit OV = PSW A2sbit P = PSW A0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr TA = 0xae;sfr DPS = 0xe3;sfr DPL1 = 0xe4;sfr DPH1 = 0xe5;//I/O 口特殊功能寄存器sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xa0;sfr P3 = 0xb0;sfr P4 = 0xc0;sfr P5 = 0xc8;sfr P6 = 0xe8;sfr P7 = 0xf8;sfr P0M0 = 0x94sfr P0M1 = 0x93sfr P1M0 = 0x92sfr P1M1 = 0x91sfr P2M0 = 0x96sfr P2M1 = 0x95sfr P3M0 = 0xb2sfr P3M1 = 0xb1sfr P5M0 =Oxca; sfr P5M1 =0xc9; sfr P6M0 =Oxcc; sfr P6M1 =Oxcb; sfr P7M0 =0xe2; sfr P7M1Oxel;=sbit POO =PO A O; sbit PO1 =PO A1; sbit P02 =P0A2; sbit PO3 =PO A3; sbit P04 =P0A4; sbit P05 =P0A5; sbit P06 =P0A6; sbit P07 =P0A7; sbit PIO =P1A O; sbit Pll =P1A1; sbit P12 =P1A2; sbit P13 =P1A3; sbit P14 =P1A4; sbit P15 =P1A5; sbit P16 =P1A6; sbit P17 =P1A7; sbit P20 =P2A0; sbit P21 =P2A1; sbit P22 =P2A2; sbit P23 =P2A3; sbit P24 =P2A4; sbit P25 二P2A5; sbit P26 =P2A6; sbit P27 =P2A7; sbit P3O =P3A O; sbit P31 =P3A1; sbit P32 =P3A2; sbit P33 =P3A3; sbit P34 =P3A4; sbit P35 =P3A5; sbit P36 =P3A6; sbit P37 =P3A7; sbit P40 =P4A0; sbit P41 =P4A1; sbit P42 =P4A2;sbit P45sbit P46= P4A5; = P4A6; sbit P47sbit P50= P4A7; =P5A0; sbit P51sbit P52= P5A1; = P5A2; sbit P53sbit P54=P5A3; = P5A4; sbit P55sbit P56= P5A5; = P5A6; sbit P57sbit P60= P5A7; = P6A0; sbit P61sbit P62= P6A1; = P6A2; sbit P63sbit P64=P6A3; = P6A4; sbit P65sbit P66= P6A5; = P6A6; sbit P67sbit P70= P6A7; = P7A0; sbit P71sbit P72= P7A1; = P7A2; sbit P73sbit P74= P7A3; = P7A4; sbit P75= P7A5; sbit P76sbit P77 = P7A6; = P7A7;〃如下特殊功能寄存器位于扩展RAM 区域 〃访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写 (*(unsigned char volatile xdata *)0xfe10) (*(unsigned char volatile xdata *)0xfe11) (*(unsigned char volatile xdata *)0xfe12) (*(unsigned char volatile xdata *)0xfe13) (*(unsigned char volatile xdata *)0xfe14) (*(unsigned char volatile xdata *)0xfe15) (*(unsigned char volatile xdata *)0xfe16) (*(unsigned char volatile xdata *)0xfe17) (*(unsigned char volatile xdata *)0xfe18) (*(unsigned char volatile xdata *)0xfe19) (*(unsigned char volatile xdata *)0xfe1a) (*(unsigned char volatile xdata *)0xfe1b)#define P0PU#define P1PU#define P2PU#define P3PU#define P4PU#define P5PU#define P6PU#define P7PU#define P0NCS#define P1NCS#define P2NCS#define P3NCS#define P4NCS(*(unsigned char volatile xdata *)0xfe1c) #define P5NCS(*(unsigned char volatile xdata *)0xfe1d) #define P6NCS(*(unsigned char volatile xdata *)0xfe1e) #define P7NCS (*(unsigned char volatile xdata *)0xfe1f) 〃系统管理特殊功能寄存器sfr PCON= 0x87; #define SMOD0x80 #define SMOD00x40 #define LVDF0x20 #define POF0x10 #define GF10x08 #define GF00x04 #define PD0x02 #define IDL0x01 sfr AUXR= 0x8e; #define T0x120x80 #define T1x120x40 #define UART_M0x60x20 #define T2R0x10 #define T2_CT0x08 #define T2x120x04 #define EXTRAM0x02 #define S1ST20x01 sfr AUXR2= 0x97; #define TXLNRX0x10 sfr BUS_SPEED =0xa1; sfr P_SW1= 0xa2; sfr P_SW2= 0xba; #define EAXFR0x80 sfr VOCTRL= 0xbb; sfr RSTCFG = 0xff;〃如下特殊功能寄存器位于扩展RAM 区域 〃访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写 (*(unsigned char volatile xdata *)0xfe00) (*(unsigned char volatile xdata *)0xfe01) (*(unsigned char volatile xdata *)0xfe02) (*(unsigned char volatile xdata *)0xfe03) (*(unsigned char volatile xdata *)0xfe04) 〃中断特殊功能寄存器sfr IE= 0xa8; sbit EA = IE A 7;#define CKSEL#define CLKDIV#define IRC24MCR#define XOSCCR#define IRC32KCRsbit ELVD = IE A6;sbit EADC = IE A5; sbit ES = IE A4; sbit ET1 = IE A3; sbit EX1 = IE A2; sbit ET0 = IE A1; sbit EX0 = IE A0; sfr IE2 = 0xaf;#define ET4 0x40#define ET3 0x20#define ES4 0x10#define ES3 0x08#define ET2 0x04#define ESPI 0x02#define ES2 0x01 sfr IP = 0xb8;sbit PPCA = IP A7; sbit PLVD = IP A6; sbit PADC = IP A5; sbit PS = IP A4; sbit PT1 = IP A3; sbit PX1 = IP A2; sbit PT0 = IP A1; sbit PX0 = IP A0;sfr IP2 = 0xb5; #define PI2C 0x40#define PCMP 0x20 #define PX4 0x10#define PPWMFD 0x08 #define PPWM 0x04#define PSPI 0x02#define PS2 0x01sfr IPH = 0xb7; #define PPCAH 0x80 #define PLVDH 0x40#define PADCH 0x20 #define PSH 0x10#define PT1H 0x08 #define PX1H 0x04#define PT0H 0x02 #define PX0H 0x01sfr IP2H = 0xb6; #define PI2CH 0x40#define PCMPH 0x20#define PX4H 0x10#define PPWMFDH 0x08#define PPWMH 0x04#define PSPIH 0x02#define PS2H 0x01sfr INTCLKO = 0x8f;#define EX4 0x40#define EX3 0x20#define EX2 0x10#define T2CLKO 0x04#define T1CLKO 0x02#define T0CLKO 0x01sfr AUXINTIF = 0xef;#define INT4IF 0x40#define INT3IF 0x20#define INT2IF 0x10#define T4IF 0x04#define T3IF 0x02#define T2IF 0x01〃定时器特殊功能寄存器sfr TCON = 0x88; sbit TF1 = TCON A7; sbit TR1 = TCON A6; sbit TF0 = TCON A5; sbit TR0 = TCON A4; sbit IE1 = TCON A3; sbit IT1 = TCON A2; sbit IE0 = TCON A1; sbit IT0 = TCON A0;sfr TMOD = 0x89;#define T1_ _GATE 0x80#define T1_ CT 0x40#define T1_ M1 0x20#define T1_ M0 0x10#define T0_ GATE 0x08#define T0_ CT 0x04#define T0_ M1 0x02#define T0_ M0 0x01 sfr TL0 = 0x8a;sfr TL1 = 0x8b;sfr TH0 = 0x8c;sfr TH1 = 0x8d;sfr T4T3M = 0xd1;#define T4R 0x80#define T4_CT 0x40#define T4x12 0x20#define T4CLKO 0x10#define T3R 0x08#define T3_CT 0x04#define T3x12 0x02#define T3CLKO 0x01sfr T4H = 0xd2;sfr T4L = 0xd3;sfr T3H = 0xd4;sfr T3L = 0xd5;sfr T2H = 0xd6;sfr T2L = 0xd7;sfr TH4 = 0xd2;sfr TL4 = 0xd3;sfr TH3 = 0xd4;sfr TL3 = 0xd5;sfr TH2 = 0xd6;sfr TL2 = 0xd7;sfr WKTCL = 0xaa; sfr WKTCH = 0xab; #define WKTEN 0x80 sfr WDT_CONTR = 0xc1; #define WDT_FLAG 0x80#define EN_WDT 0x20 #define CLR_WDT 0x10#define IDL_WDT 0x08〃串行口特殊功能寄存器sfr SCON = 0x98; sbit SM0 = SCON”sbit SM1 = SCON A6; sbit SM2 = SCON A5; sbit REN = SCON A4; sbit TB8 = SCON”;sbit RB8 = SCON A2; sbit TI SCON A1; sbit RI = SCON A0; sfr SBUF = 0x99;sfr S2CON = 0x9a; #define S2SM0 0x80#define S2ST4 0x40#define S2SM2 0x20#define S2REN 0x10#define S2TB8 0x08#define S2RB8 0x04#define S2TI 0x02#define S2RI 0x01sfr S2BUF = 0x9b;sfr S3CON = 0xac;#define S3SM0 0x80#define S3ST4 0x40#define S3SM2 0x20#define S3REN 0x10#define S3TB8 0x08#define S3RB8 0x04#define S3TI 0x02#define S3RI 0x01sfr S3BUF = 0xad;sfr S4CON = 0x84;#define S4SM0 0x80#define S4ST4 0x40#define S4SM2 0x20#define S4REN 0x10#define S4TB8 0x08#define S4RB8 0x04#define S4TI 0x02#define S4RI 0x01sfr S4BUF = 0x85;sfr SADDR = 0xa9;sfr SADEN = 0xb9;//ADC特殊功能寄存器sfr ADC_CONTR = 0xbc;#define ADC_POWER 0x80#define ADC_START 0x40#define ADC_FLAG 0x20 sfr ADC_RES= 0xbd;sfr ADC_RESL = 0xbe;sfr ADCCFG = 0xde; #define ADC_RESFMT 0x20//SPI特殊功能寄存器sfr SPSTAT = 0xcd;#define SPIF 0x80#define WCOL 0x40 sfr SPCTL = 0xce;#define SSIG 0x80 #define SPEN 0x40#define DORD 0x20 #define MSTR 0x10#define CPOL 0x08#define CPHA 0x04 sfr SPDAT = 0xcf;//IAP/ISP特殊功能寄存器sfr IAP_DATA = 0xc2; sfr IAP_ADDRH = 0xc3; sfr IAP_ADDRL = 0xc4; sfr IAP_CMD = 0xc5; #define IAP_IDL 0x00#define IAP_READ 0x01#define IAP_WRITE 0x02#define IAP_ERASE 0x03 sfr IAP_TRIG = 0xc6;sfr IAP_CONTR = 0xc7;#define IAPEN 0x80#define SWBS 0x40 #define SWRST 0x20 #define CMD_FAIL 0x10 sfr ISP_DATA = 0xc2;sfr ISP_ADDRH = 0xc3; sfr ISP_ADDRL = 0xc4; sfr ISP_CMD = 0xc5;sfr ISP_TRIG = 0xc6;sfr ISP_CONTR = 0xc7;〃比较器特殊功能寄存器sfr CMPCR1 = 0xe6;#define CMPEN 0x80 #define CMPIF 0x40#define PIE 0x20#define NIE 0x10#define PIS 0x08#define NIS 0x04#define CMPOE 0x02 #define CMPRES 0x01 sfr CMPCR2 = 0xe7;#define INVCMPO 0x80 #define DISFLT 0x40//PCA/PWM特殊功能寄存器sfr CCON = 0xd8; sbit CF = CCON A7; sbit CR = CCON A6; sbit CCF3 = CCON”; sbit CCF2 = CCON% sbit CCF1 = CCON A1; sbit CCF0 = CCON A0; sfr CMOD = 0xd9; #define CIDL 0x80#define ECF 0x01sfr CL = 0xe9; sfr CH = 0xf9;sfr CCAPM0 = 0xda; #define ECOM0 0x40 #define CCAPP0 0x20 #define CCAPN0 0x10 #define MAT0 0x08 #define TOG0 0x04 #define PWM0 0x02 #define ECCF0 0x01sfr CCAPM1 = 0xdb; #define ECOM1 0x40 #define CCAPP1 0x20 #define CCAPN1 0x10 #define MAT1 0x08 #define TOG1 0x04 #define PWM1 0x02 #define ECCF1 0x01sfr CCAPM2 = 0xdc; #define ECOM2 0x40 #define CCAPP2 0x20 #define CCAPN2 0x10 #define MAT2 0x08 #define TOG2 0x04 #define PWM2 0x02 #define ECCF2 0x01sfr CCAPM3 = 0xdd; #define ECOM3 0x40 #define CCAPP3 0x20 #define CCAPN3 0x10 #define MAT3 0x08 #define TOG3 0x04 #define PWM3 0x02#define ECCF3 0x01sfr CCAP0L = 0xea;sfr CCAP1L = 0xeb;sfr CCAP2L = 0xec;sfr CCAP3L = 0xed;sfr CCAP0H = 0xfa;sfr CCAP1H = 0xfb;sfr CCAP2H = 0xfc;sfr CCAP3H = 0xfd;sfr PCA_PWM0 = 0xf2;sfr PCA_PWM1 =0xf3;sfr PCA_PWM2 =0xf4;sfr PCA_PWM3 =0xf5;〃增强型PWM波形发生器特殊功能寄存器sfr PWMCFG =0xf1;#define CBIF 0x80#define ETADC 0x40sfr PWMIF = 0xf6;#define C7IF 0x80#define C6IF 0x40#define C5IF 0x20#define C4IF 0x10#define C3IF 0x08#define C2IF 0x04#define C1IF 0x02#define C0IF 0x01sfr PWMFDCR = 0xf7;#define INVCMP 0x80#define INVIO 0x40#define ENFD 0x20#define FLTFLIO 0x10#define EFDI 0x08#define FDCMP 0x04#define FDIO 0x02#define FDIF 0x01sfr PWMCR = 0xfe;#define ENPWM 0x80#define ECBI 0x40〃如下特殊功能寄存器位于扩展RAM区域〃访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写#define PWMC #define PWMCH (*(unsigned int volatile xdata *)0xfff0) (*(unsigned char volatile xdata *)0xfff0)(*(unsigned char volatile xdata *)0xfff1) (*(unsigned char volatile xdata *)0xfff2) (*(unsigned char volatile xdata *)0xfff3) (*(unsigned char volatile xdata *)0xfff3) (*(unsigned char volatile xdata *)0xfff4) (*(unsigned int volatile xdata *)0xff00) (*(unsigned char volatile xdata *)0xff00) (*(unsigned char volatile xdata *)0xff01) (*(unsigned int volatile xdata *)0xff02) (*(unsigned char volatile xdata *)0xff02) (*(unsigned char volatile xdata *)0xff03) (*(unsigned char volatile xdata *)0xff04) (*(unsigned char volatile xdata *)0xff05) (*(unsigned int volatile xdata *)0xff10) (*(unsigned char volatile xdata *)0xff10) (*(unsigned char volatile xdata *)0xff11) (*(unsigned int volatile xdata *)0xff12) (*(unsigned char volatile xdata *)0xff12) (*(unsigned char volatile xdata *)0xff13) (*(unsigned char volatile xdata *)0xff14) (*(unsigned char volatile xdata *)0xff15) (*(unsigned int volatile xdata *)0xff20) (*(unsigned char volatile xdata *)0xff20) (*(unsigned char volatile xdata *)0xff21) (*(unsigned int volatile xdata *)0xff22) (*(unsigned char volatile xdata *)0xff22) (*(unsigned char volatile xdata *)0xff23) (*(unsigned char volatile xdata *)0xff24) (*(unsigned char volatile xdata *)0xff25) (*(unsigned int volatile xdata *)0xff30) (*(unsigned char volatile xdata *)0xff30) (*(unsigned char volatile xdata *)0xff31) (*(unsigned int volatile xdata *)0xff32) (*(unsigned char volatile xdata *)0xff32) (*(unsigned char volatile xdata *)0xff33) (*(unsigned char volatile xdata *)0xff34) (*(unsigned char volatile xdata *)0xff35) (*(unsigned int volatile xdata *)0xff40) (*(unsigned char volatile xdata *)0xff40) (*(unsigned char volatile xdata *)0xff41) (*(unsigned int volatile xdata *)0xff42) (*(unsigned char volatile xdata *)0xff42) (*(unsigned char volatile xdata *)0xff43) (*(unsigned char volatile xdata *)0xff44)#define PWMCL#define PWMCKS#define TADCP#define TADCPH#define TADCPL#define PWM0T1#define PWM0T1H#define PWM0T1L#define PWM0T2#define PWM0T2H#define PWM0T2L#define PWM0CR#define PWM0HLD#define PWM1T1#define PWM1T1H#define PWM1T1L#define PWM1T2#define PWM1T2H#define PWM1T2L#define PWM1CR#define PWM1HLD#define PWM2T1#define PWM2T1H#define PWM2T1L#define PWM2T2#define PWM2T2H#define PWM2T2L#define PWM2CR#define PWM2HLD#define PWM3T1#define PWM3T1H#define PWM3T1L#define PWM3T2#define PWM3T2H#define PWM3T2L#define PWM3CR#define PWM3HLD#define PWM4T1#define PWM4T1H#define PWM4T1L#define PWM4T2#define PWM4T2H#define PWM4T2L#define PWM4CR(*(unsigned char volatile xdata *)0xff45) (*(unsigned int volatile xdata *)0xff50) (*(unsigned char volatile xdata *)0xff50) (*(unsigned char volatile xdata *)0xff51) (*(unsigned int volatile xdata *)0xff52) (*(unsigned char volatile xdata *)0xff52) (*(unsigned char volatile xdata *)0xff53) (*(unsigned char volatile xdata *)0xff54) (*(unsigned char volatile xdata *)0xff55) (*(unsigned int volatile xdata *)0xff60) (*(unsigned char volatile xdata *)0xff60) (*(unsigned char volatile xdata *)0xff61) (*(unsigned int volatile xdata *)0xff62) (*(unsigned char volatile xdata *)0xff62) (*(unsigned char volatile xdata *)0xff63) (*(unsigned char volatile xdata *)0xff64) (*(unsigned char volatile xdata *)0xff65) (*(unsigned int volatile xdata *)0xff70) (*(unsigned char volatile xdata *)0xff70) (*(unsigned char volatile xdata *)0xff71) (*(unsigned int volatile xdata *)0xff72) (*(unsigned char volatile xdata *)0xff72) (*(unsigned char volatile xdata *)0xff73) (*(unsigned char volatile xdata *)0xff74) (*(unsigned char volatile xdata *)0xff75) 〃I2C 特殊功能寄存器 〃如下特殊功能寄存器位于扩展RAM 区域 〃访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写 #define I2CCFG(*(unsigned char volatile xdata *)0xfe80) #define ENI2C0x80 #define MSSL0x40 #define I2CMSCR(*(unsigned char volatile xdata *)0xfe81) #define EMSI0x80 #define I2CMSST(*(unsigned char volatile xdata *)0xfe82) #define MSBUSY0x80 #define MSIF0x40 #define MSACKI0x02 #define MSACKO0x01 #define I2CSLCR(*(unsigned char volatile xdata *)0xfe83) #define ESTAI0x40 #define ERXI0x20 #define ETXI0x10 #define ESTOI 0x08#define PWM4HLD#define PWM5T1#define PWM5T1H#define PWM5T1L#define PWM5T2#define PWM5T2H#define PWM5T2L#define PWM5CR#define PWM5HLD#define PWM6T1#define PWM6T1H#define PWM6T1L#define PWM6T2#define PWM6T2H#define PWM6T2L#define PWM6CR#define PWM6HLD#define PWM7T1#define PWM7T1H#define PWM7T1L#define PWM7T2#define PWM7T2H#define PWM7T2L#define PWM7CR#define PWM7HLD#define SLRST#define I2CSLST #define SLBUSY #define STAIF#define RXIF#define TXIF#define STOIF#define TXING#define SLACKI #define SLACKO #define I2CSLADR #define I2CTXD #define I2CRXD 0x01(*(unsigned char volatile xdata *)0xfe84) 0x800x400x200x100x080x040x020x01(*(unsigned char volatile xdata *)0xfe85) (*(unsigned char volatile xdata *)0xfe86) (*(unsigned char volatile xdata *)0xfe87)///////////////////////////////////////////////// #endif。
wch ch9121的stc8的单片机c语言程序
文章主题:wch ch9121的stc8的单片机c语言程序1. 简介wch ch9121的stc8单片机是一款广泛应用于嵌入式系统和物联网设备中的微控制器芯片。
它具有丰富的外设资源,强大的性能和灵活的软件开发环境,可以满足不同应用场景的需求。
2. stc8单片机架构与特点2.1 stc8单片机采用51系列兼容的CPU核心,具有高性能和低功耗的特点。
它内置了丰富的外设资源,包括多种通信接口、定时器、PWM输出等功能模块。
2.2 stc8单片机还支持多种存储器类型,包括闪存、EEPROM和RAM,为软件开发提供了灵活的存储空间。
2.3 它还具备丰富的中断系统和低功耗模式,适合在能耗敏感的应用中使用。
3. wch ch9121的stc8的单片机c语言开发环境3.1 wch ch9121的stc8单片机的开发环境主要是基于C语言的编程。
用户可以使用Keil、IAR等常见的集成开发环境进行软件开发,还可以使用STC-ISP下载工具进行程序下载和调试。
3.2 wch ch9121的stc8单片机还提供了丰富的软件库和示例代码,方便开发人员快速上手并且进行开发。
4. 编写wch ch9121的stc8的单片机c语言程序4.1 在使用wch ch9121的stc8单片机进行C语言程序开发时,首先需要对芯片的特性和外设资源有一个清晰的认识。
根据应用需求和功能设计,选择合适的外设资源进行配置和使用。
4.2 在编写C语言程序时,需要充分利用wch ch9121的stc8单片机的丰富外设资源,合理设计程序结构和算法,并充分考虑时序和中断处理等关键问题。
4.3 为了保证程序的稳定性和可靠性,还需要进行充分的调试和验证,确保程序在不同条件下都能正常运行。
5. 个人观点和理解5.1 从事嵌入式系统开发多年,对wch ch9121的stc8的单片机有着深入的了解和丰富的开发经验。
5.2 我认为,wch ch9121的stc8的单片机具有丰富的外设资源和灵活的软件开发环境,可以满足各种复杂应用的需求,是一款非常值得推荐的单片机芯片。
STC系列8位MCU在Windows下的开发
STC系列8位MCU在Windows下的开发STC系列 MCS-51 8位MCU简介STC的8位MCU有89/90/10/11/12/15/8(A/F/G/H)这⼏个⼤系列, 都是8051衍⽣的8位单⽚机, 每个系列的特点如下STC89系列传统的8051单⽚机, 功能上和AT89系列兼容, 不同之处在于可以直接⽤串⼝烧录属于12T单⽚机, 即指令需要12个时钟周期完成Y1内核带RC/RD+后缀的型号, 有6T模式STC89LE52AD、54AD、58AD、516AD这⼏款带8通道8位ADC, 在P1⼝上STC89C51, STC89C52系列⼯作频率可以到35MHzSTC89C51RC/RD+系列⼯作频率可以到40MHzSTC90系列Y1内核STC89系列的改进型12T单⽚机STC90C54AD这些带AD后缀的, 有ADCSTC10系列Y3内核, 同内核汇编指令相同, 寄存器地址通⽤1T单⽚机, 1T是指部分指令可以在⼀个时钟周期完成开始内置R/C时钟4态IO接⼝, EEPROM等功能STC11系列在STC10基础上增加了关机模式下的唤醒时钟STC12系列Y3内核型号后缀AD的带ADC, 后缀S2的除了ADC还带双串⼝STC12系列是最后⼀个传统pin脚布局的系列, 之后的型号与AT89不再兼容STC12系列增加了硬件SPI, 8位PWM, ADC精度提⾼到10位STC15系列Y5内核有部分型号使⽤Y3内核: STC15F104E, STC5L104E, STC15F204EA, STC15L204EA内部R/C时钟基本可⽤, 在精度不⾼的场合可以使⽤内部时钟驱动, 不需外部晶振STC15系列增加了宽电压⽀持(W型号), 可以在3.3V和5V下⼯作, 不再区分⾼低电压版本STC15系列封装类型很多, 出现了8pin, 16pin等⼩封装PWM精度提⾼到15位STC8A/STC8F系列Y6内核, 性能提升明显开始出现8K字节的⼤内存版本STC8G系列Y6内核内部R/C时钟增加到2频段只有最⾼2K字节内存STC8H系列Y6内核当前最⾼端的版本内置时钟增加到4频段, 去掉了旧的PCA模块, 使⽤新的8组16位PWM为兼容STC8A8K64S4定制的型号STC8A8K64D48位8051 MCU的内存结构不管哪个系列, 8051系列的内存结构都是⼀样的. RAM 分为⽚内 RAM和⽚外 RAM⽚内 RAM标准 51 的⽚内 RAM 地址从 0x00H~0x7F 共 128 个字节,⽽现在⽤的 51 系列都带扩展⽚内 RAM,即 RAM 从 0x00 - 0xFF 共 256个字节.⽚外 RAM最⼤可以扩展到 0x0000~0xFFFF 共 64K 字节⽚内 RAM 和⽚外 RAM 的地址不是连续的,⽚内从 0x00 开始, ⽚外也是从 0x0000 开始.⽚内和⽚外的区分来⾃于早期的 51 单⽚机,分别指在芯⽚内部和芯⽚外部,但现在⼏乎所有的 51 单⽚机(包括STC89C52)芯⽚内部都集成了⽚外 RAM, 很少⽤到真正的芯⽚外扩展Keil C51 和 SDCC 中的关键字, 代表了 RAM 不同区域dataKeil C51: data, SDCC: __data⽚内RAM直接寻址区, 地址范围00 - 7F⼀个变量 a, 可以这样声明unsigned char data a=0, 在 Keil 默认设置下,data是默认的可以省略. data 区域 RAM 的访问在汇编语⾔中⽤的是直接寻址, 执⾏速度是最快的bdata⽚内RAM位寻址区, 从20 - 2F这块地址的16个字节共128个可寻址位, 位地址从00 - 7F例如unsingned char bdata sta; // 8位的数据stasbit RX_DR = sta^6; //把 8位中的第6位定义为RX_DR, 下同sbit TX_DS = sta^5;sbit MAX_RT = sta^4;idataKeil C51: idata, SDCC: __idata⽚内RAM间接寻址区, 地址范围 00-FFdata 是 idata 的⼀部分. 定义成 idata,不仅仅可以访问 data 区域,还可以访问 80-FF 的范围,访问idata的时候⽤的是通⽤寄存器间接寻址,速度较 data会慢⼀些, 平时⼤多数情况下不太希望访问 80-FF, 这块通常⽤于中断与函数调⽤的堆栈, 所以在绝⼤多数情况下, 使⽤内部 RAM 只⽤ data 就可以了pdataKeil C51: pdata, SDCC: __pdata⽚外 RAM, 地址范围 00-FF使⽤ pdata 定义的变量存到了外部 RAM 的 00-FF 的地址范围, 和 xdata 其实是重叠的, 这块地址的访问和 idata 类似, 都是⽤通⽤寄存器间接寻址xdataKeil C51: xdata, SDCC: __xdata⽚外 RAM, 地址范围 0000 - FFFFpdata 是 xdata 的⼀部分. 定义成 xdata, 可以访问更⼤的地址范围, 从 0 到 64K 的地址都可以访问到, 但是需要使⽤ 2 个字节寄存器DPTRH 和 DPTRL 来进⾏间接寻址,速度更慢STC89系列STC89是最早的⼀个系列, 同型号的差别在于Flash和RAM的⼤⼩, 例如 STC89C51 为4K⽽ STC89C52 为8K, 常见的封装是DIP40宽体双列STC89C54RC参数Flash: 8K bytesRAM: 512 bytes内置4KB EEPROM32-bit I/O看门狗定时器, MAX810复位电路3个16-bit定时器4个外部中断, ⼀个7向量4级中断结构和全双⼯串⾏⼝最⾼运作频率35MHz, 6T/12T可选VCC 5V还有规格更⾼的STC89C516DR+, 这个有62K的flash和1280byte的RAM.STC89C52的内存寻址STC89C52共有 512 字节的 RAM, 分为 256 字节的⽚内 RAM 和 256 字节的⽚外RAM.⼀般情况下使⽤ data 区域, data 不够⽤了就⽤ xdata, 如果希望程序执⾏效率尽量⾼⼀点,就使⽤ pdata 关键字来定义.晶振STC89系列内部都不带R/C时钟, 必须外接晶振, 常⽤的有11.0592MHz和12MHz晶振.采⽤11.0592MHz,或22.1184MHz,可⽅便得到串⼝通讯的标准时钟.硬件准备C51最⼩开发板⼀个USB2TTL的转接卡⽤于查看输出的LED+1K限流电阻Windows下的开发软件部分需要准备⽤于烧录的STC-ISP软件, 以及⽤于编写编译代码的Keil C51软件从下载STC-ISP软件的简化版, 当前版本是V6.88FSTC-ISP的使⽤说明从下载Keil C51 V9.59.STC-ISP安装⽤简化版(tiny结尾的那个), 这个版本不会跟你要管理权限. 解压即可不需安装, 界⾯⾮常紧凑.Keil C51安装安装时, 默认安装到与Keil MDK相同的⽬录C:\Keil_V5, 如果之前已经安装了Keil MDK, 可以使⽤同⼀⽬录, 与Keil MDK是可以共存的. 安装完之后在license⾥可以看到有C51的license记录安装STC设备库根据STC-ISP的使⽤说明, 将STC库⽂件安装到Keil C51环境中.关闭Keil MDK软件打开STC-ISP点击右侧标签⾯板中的Keil ICE Setting, 点击Add MCU type to Keil, Add STC ICE driver to Keil这个按钮然后定位到C:\Keil_v5⽬录, 完成安装检查查看C:\Keil_v5\UV4\⽬录下是否有stc.cdb⽂件, 判断是否添加完成查看C:\Keil_v5\C51\INC\⽬录下是否有STC⽬录, 这个⽬录下是STC芯⽚的头⽂件重启Keil MDK后, 在File->Device Database中选择STC MCU Database可以看到STC下的单⽚机型号列表烧录接线USB2TTL STC89C52VCC P40 VCCGND P20 GNDTX P10 RxDRX P11 TxD烧录STC单⽚机使⽤的是ISP(In System Program)烧录⽅式, 其原理是在单⽚机内部固化⼀段ISP代码, 上电时检测是否有连续的d字符, 如果检测到则进⼊ISP准备阶段, 如果超时没有收到则执⾏⽤户代码区. 若进⼊ISP准备阶段, 根据STC定义的协议接收数据帧, 最后完成程序的擦除、写⼊. 在ISP准备阶段若未收到数据帧, 则超时退出ISP, 执⾏⽤户代码区.STC-ISP的使⽤说明运⾏STC-ISP选择烧录芯⽚对应的型号STC89C52RC/LE52RC, 如果不是RC, 则选择 STC89C52如果型号选择不正确, 在Check MCU那⼀步会⼀直卡在那⾥选择USB2TTL对应的COM⼝点击Open Code File 加载烧录程序设置烧录选项点击Download/Program按钮如果之前已经连线, 此时STC-ISP的⽇志窗⼝会提⽰Checking target MCU ... , 按Reset开关不能进⼊烧录, 需要重新上电才会开始烧录. 显⽰信息如下Checking target MCU ...MCU type: STC89C52RC/LE52RCF/W version: 3.2CCurrent H/W Option:. Current clock frequency: 11.018MHz. System use 12T mode. Oscillator gain is HIGH. Any reset source can stop WatchDog if WatchDog timer is running. Internal XRAM is ENABLE . ALE pin behaves as ALE function pin. Do not detect the level of P1.0 and P1.1 next download. Do not erase user EEPROM area at next downloadMCU type: STC89C52RC/LE52RCF/W version: 3.2CRe-handshaking ... Successful [0.625"]Current Baudrate: 115200Erasing MCU flash ... OK ! [0.188"]Programming user code ... OK ! [0.953"]Programming OPTIONS ... OK ! [0.031"]H/W Option upgrade to:. Current clock frequency: 11.018MHz. System use 12T mode. Oscillator gain is HIGH. Any reset source can stop WatchDog if WatchDog timer is running. Internal XRAM is ENABLE . ALE pin behaves as ALE function pin. Do not detect the level of P1.0 and P1.1 next download. Do not erase user EEPROM area at next downloadMCU type: STC89C52RC/LE52RCF/W version: 3.2CComplete !(2021-06-30 21:54:26)如果F/W version是3.2C, 会弹出对话框, 提⽰这是⼀个翻新的芯⽚, 可以忽略. 4.2C的不会弹出此提⽰.STC12C5A60S2 系列在烧录时会显⽰MCU ID, STC89C系列不会Keil C51代码结构与STM32项⽬⽐, C51的项⽬的结构⾮常简单. 只需要添加⼀个reg52.h的头⽂件, 剩下的就是⾃⼰随意组合. 这个头⽂件也只是包含寄存器命名. STC89系列的主流开发⽅式, 还是对照着⼿册直接操作寄存器.在Keil5中创建项⽬的步骤:运⾏Keil MDK新建项⽬, 找⼀个⽬录将项⽬⽂件保存选择设备对于STC89C52, 定位到STC89C52RC Series对于STC89C516RD+, 定位到STC89C58RD+ Series对于STC12C5A56S2, 定位到STC12C5A60S2 Series这些都可以使⽤reg52.h作为头⽂件也可以使⽤对应系列的头⽂件, 例如STC12C5A60S2.H中途会提⽰你是否要保存startup.a51, 选择是新建C⽂件, 写⼊代码编译⽰例代码#include <reg52.h>typedef unsigned int u16;typedef unsigned char u8;sbit led0 = P0^0;sbit led1 = P0^1;sbit led2 = P0^2;sbit led3 = P0^3;void delay(u16 i) {while(i--);}void main() {while(1) {led0 = 0;led1 = 0;led2 = 0;led3 = 0;delay(500000);led0 = 1;led1 = 1;led2 = 1;led3 = 1;delay(500000);}}对于STC89C52RC, 可以改成#include <STC89C5xRC.H>对于STC12C5A60S2系列, 可以改成#include <STC12C5A60S2.H>常见问题SBIT 单Bit, Singl Bitsbit这个类型定义了SFR中的⼀个bit, 使⽤操作符^, 这⾥是容易引起疑惑的⼀个地⽅, 这个符号仅仅在代码变量声明的地⽅可⽤, 代表了SFR中这个bit的位置, 在程序当中, 这个符号才是标准的bit异或操作符(XOR Operator). The character ^ is used to denote the bit position in the byte address of the SFR. This syntax is only valid for Declaration code lines. If used inside the program, then the ^ operator is the standard bitwise xor operator from the standard C language (not specific to C51).//⽅式1和2: 前⾯的sfr-name/sfr-address是其基础地址, ⼀定是要可以被8整除的, 例如0xD0, 0xA8, 后⾯的bit-position取值可以是0~7sbit name = sfr-name ^ bit-position;sbit name = sfr-address ^ bit-position;//⽅式3: 必须是0x80-0xFF之间的⼀个值, 例如0xD2, 0xD7, 0xAFsbit name = sbit-address;其中name 变量名sfr-name 已经定义的SFR变量bit-position 在SFR变量中的位置sfr-address SFR的地址sbit-address 此bit的地址在8051应⽤中经常需要直接访问SFR中某⼀个位的信息, 这种情况就可以使⽤sbit. 例如:sbit EA = 0xAF;上⾯代码定义了⼀个sbit类型的变量EA, 其地址在0xAF. 在8051中这是中断开启寄存器中的enable all位的地址.注意: 使⽤sbit访问的对象存储通常认为是little endian (LSB first), 如果使⽤sbit访问标准类型的数据时要留意.注意:1. 不是所有SFR都可以按位寻址, 只有地址能被8整除的SFR才能, 即低位必须是0或8. 计算SFR的按位地址, 0xC8^6 = 0xC8 + 6 = 0xCE.2. sbit只能在函数外定义.SFR - 特殊功能寄存器(Special Function Register)sfr常⽤于定义寄存器地址, 对应⼀个8 bit volatile的值. ⽤法为sfr name = address;其中name SFR的名称address SFR的地址SFR变量的定义和其他C变量⼀样, 区别仅在于不使⽤char或者int, 例如sfr P0 = 0x80; /* Port-0, address 80h */sfr P1 = 0x90; /* Port-1, address 90h */sfr P2 = 0xA0; /* Port-2, address 0A0h */sfr P3 = 0xB0; /* Port-3, address 0B0h */P0, P1, P2 和 P3 都是SFR的声明和定义, 等号后⾯的值必须是8位数值, 8051⽀持的SFR地址通常为0x80-0xFF. ⽽NXP 80C51MX提供额外的SFR地址区间0x180-0x1FF. 注意, SFR变量不能定义在函数中, ⽽必须定义在主代码中, SFR变量永远是volatile的, 编译器不会去优化这种类型的变量的访问.sfr16 占⽤两个内存单元, 值域为 0~65535. sfr16 和 sfr ⼀样⽤于操作特殊功能寄存器, 不⼀样的是它⽤于操作占两个字节的寄存器, 例如定时器 T0 和 T1.Flash和EEPROM的区别EEPROM也叫 E2PROM, 称为电可擦可编程只读存储器, 和EEPROM类似, 写上去的东西也能擦掉重写, 但它要⽅便⼀些, 不需要光照, 只要⽤电就能擦除或者重新改写数据, ⽅便许多, ⽽且寿命也很长(⼏万到⼏⼗万次).FLASH 闪存, 属于EEPROM的改进产品, 最⼤特点是必须按块(Block)擦除(每个区块的⼤⼩不同⼚家的产品有不同的规格), ⽽EEPROM则可以⼀次只擦除⼀个字节(Byte). FLASH现在常⽤于⼤容量存储, 例如U盘.C51的变量c51编译器中int 和 short 相同,float 和 double 相同, 具体定义类型宽度取值范围unsigned char1字节0~255signed char1字节-128~+127unsigned int2字节0~65535signed int2字节-32768~+32767unsigned long4字节0~4294967295signed long4字节-2147483648~+2147483647float4字节-1.175494E-38~+3.402823E+38指针1-3字节对象的地址bit位0 或 1sfr1字节0~255sfr162字节0~65535sbit位0 或 1C51中定义⼀个变量的格式如下[存储种类] 数据类型 [存储器类型] 变量名在定义格式中除了数据类型和变量名是必要的, 其它都是可选项存储种类有四种: ⾃动(auto), 外部(extern), 静态(static)和寄存器(register). 缺省类型为auto.数据类型即变量类型存储器类型指定该变量在单⽚机硬件系统中所使⽤的存储区域, 并在编译时准确的定位. 注意在AT89c51芯⽚中RAM只有低128位, 80H-FFH的⾼128位在52芯⽚中才有⽤, 并和特殊寄存器地址重叠.把最常⽤的命令如循环计数器和队列索引放在内部数据区能显著的提⾼系统性能, 变量的存储种类与存储器类型是完全⽆关的.8051的内存结构MCS-51内部RAM有128或256个字节的⽤户数据存储, ⽤于存放执⾏的中间结果和过程数据. MCS-51的数据存储器均可读写, 部分单元还可以位寻址:1. 内部RAM共有256个单元, 这256个单元共分为两部分1. 其⼀是地址从00H—7FH单元(共128个字节)为⽤户数据RAM2. 从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元2. 00H—1FH, 共32个单元中被均匀地分为四块, 每块包含8个8位寄存器, 均以R0—R7来命名, 我们常称这些寄存器为通⽤寄存器. 这四块中的寄存器都称为R0—R7, 那么在程序中怎么区分和使⽤它们呢? INTEL⼯程师们安排了⼀个寄存器 -- 程序状态字寄存器(PSW)来管理它们, CPU只要定义这个寄存的PSW的第3和第4位(RS0和RS1), 即可选中这四组通⽤寄存器.3. 20H—2FH为位寻址区, 既可⽤字节寻址, 也可按位寻址. 位寻址区共有16个字节, 128个位, 对应的位地址为00H—7FH. CPU能直接寻址这些位, 按位进⾏操作. 我们常称MCS-51具有布尔处理功能, 布尔处理的存储空间指的就是这些按位寻址区.复位后的各寄存器初始复位后CPU状态PC: 0000H TMOD: 00HAcc: 00H TCON: 00HB: 00H TH0: 00HPSW: 00H TL0: 00HSP: 07H TH1: 00HDPTR:0000H TL1: 00HP0-P3:FFH SCON: 00HIP: ×××00000B SBUF:不定IE: 0××00000B PCON: 0×××0000B注意P0 - P3是⾼位startup.a51⽂件的作⽤80C51在电源重置(Power On Reset)后执⾏的第⼀个程序模块并不是主程序main(), ⽽是⼀个KEIL-C51标准链接库中的startup.a51程序模块. startup.a51的主要⼯作, 是把包含idata, xdata, pdata在内的内存区块清除为0, 并且初始化递归指针. 在startup.a51执⾏完成后, 接着被执⾏的仍然是⼀个KEIL-C51标准链接库中的init.a51程序模块. init.a51的主要作⽤, 是初始化具有⾮零初始值设定的变量.在完成上述的初始化之后, 80C51才会开始执⾏main()程序.参考不错的教程C51 汇编写的延时函数说明及时钟频率Very helpful SDCC C51 code examples。
stc8h库函数
stc8h库函数STC8H是一种基于哈佛结构的更复杂型号的贵州星烁的单片机系列,其中包括了很多方便易用的库函数。
下面就来逐一介绍一些常见且常用的库函数功能。
一、标准输入输出函数STC8H系列MCU有着功能强大的GPIO口,可用于作为输入输出控制的引脚。
其主要用途为模拟输入输出和数字输入输出。
STC8H的标准输入输出函数就很好的支持了这两种操作。
1、模拟输入输出在进行模拟输入输出操作时,可以使用以下这几个函数:- PWM_Init()此函数可以帮助我们对定时器和PWM模块进行初始化配置,并设置相关输入输出口的管脚和使用的模式。
- PWM_Set()该函数可以对PWM信号进行调整,其主要参数为一个给PWM模块使用的参数(范围为0到65535),不同的参数对应着不同的PWM占空比,即不同的输出功率。
- PWM_Start()此函数可以使PWM模块开始工作,开始函数需要设定一个参数,以正常工作,该参数可以是任意。
2、数字输入输出在STM8 MCU上,我们可以通过GPIO口中的Pin来控制数字输入输出。
以下两个函数可以帮助我们进行数字输入输出的相关操作:- gpio_init()此函数可以进行GPIO口的初始化,设定IO口是否为输入口、输出口以及设置输入口的上下拉是否使能工作。
- gpio_write()/gpio_read()这两个函数可以帮助我们对GPIO口的Pin进行读写操作。
gpio_write()可以写入固定电平(0或1),gpio_read()可以读取Pin 状态信息(返回值为Pin状态,0或1)。
二、定时器操作库函数STC8H系列MCU一共内置了八个独立的定时器,其中包括了多种不同的定时功能:计数器计时、PWM中断、输入捕获等。
以下列出部分可用的常用函数:- TMn_init()此函数用于定时器的初始化,其主要参数包括:时钟分频值、计时模式、是否开启计时等。
时钟分配的值越大,定时器工作的速度越慢。
stc8h库函数
stc8h库函数
STC8H库函数是一种基于STC8H系列单片机的开发工具,它提供了一系列的函数库,可以方便地进行单片机的编程和开发。
STC8H 库函数的使用可以大大提高开发效率,减少开发难度,使得单片机的开发变得更加简单和高效。
STC8H库函数包含了许多常用的函数,如GPIO控制函数、定时器控制函数、串口通信函数等。
这些函数可以直接调用,无需编写复杂的代码,从而实现单片机的各种功能。
例如,使用GPIO控制函数可以轻松地控制单片机的输入输出口,实现各种控制功能;使用定时器控制函数可以实现定时器的计时和中断功能,从而实现各种定时控制功能;使用串口通信函数可以实现单片机与外部设备的通信,实现数据的传输和接收等功能。
STC8H库函数的使用非常简单,只需要在程序中引入相应的头文件,然后调用相应的函数即可。
例如,使用GPIO控制函数可以在程序中引入“stc8h.h”头文件,然后调用相应的GPIO控制函数即可实现控制功能。
这种简单易用的开发方式,使得单片机的开发变得更加高效和便捷。
除了提供常用的函数库外,STC8H库函数还提供了丰富的开发工具和示例程序,可以帮助开发者更好地理解和使用库函数。
例如,STC8H库函数提供了一款名为“STC-ISP”的编程工具,可以方便地对单片机进行编程和调试;同时,STC8H库函数还提供了许多示例程
序,可以帮助开发者更好地理解和应用库函数。
STC8H库函数是一种非常实用的单片机开发工具,它提供了丰富的函数库和开发工具,可以大大提高单片机的开发效率和便捷性。
如果你是一名单片机开发者,那么STC8H库函数一定是你不可或缺的开发工具。
STC库函数使用参考
STC库函数使用参考版本:V10日期:2013-5-28编写:STC公司基本说明:本函数库适用于STC/IAP15F/L2K61S2系列MCU,具体的MCU的资源,请参考用户手册中对应的章节。
使用以下的库函数,都必须包含“”文件,里面包含了“”头文件。
在自己的工程中,加入库函数文件,并且在使用库函数的C文件中,包含对应的头文件。
这个文档仅仅解释各个库函数里的参数定义和取值,具体的应用例子,请参考例程。
相关功能的具体描述,请参考用户手册。
函数目录IO口初始化函数:GPIO_Inilize ---------------------------------------------------------------------------------------- 2定时器初始化函数:Timer_Inilize ------------------------------------------------------------------------------------ 3ADC初始化函数:ADC_Inilize ------------------------------------------------------------------------------------------ 4 ADC电源控制函数:ADC_PowerControl ----------------------------------------------------------------------------- 6 ADC查询转换函数:Get_ADC10bitResult --------------------------------------------------------------------------- 6通用软件延时函数:delay_ms ----------------------------------------------------------------------------------------- 7串口初始化函数:USART_Configuration ---------------------------------------------------------------------------- 7串口1写缓冲函数:TX1_write2buff -------------------------------------------------------------------------------- 9串口2写缓冲函数:TX2_write2buff ------------------------------------------------------------------------------ 10串口1写数据块函数:PrintString1 -------------------------------------------------------------------------------- 10串口2写数据块函数:PrintString2 -------------------------------------------------------------------------------- 10模拟串口字节发送函数:TxSend ----------------------------------------------------------------------------------- 10模拟串口写数据块函数:PrintString ------------------------------------------------------------------------------- 11 EEPROM多字节读函数:EEPROM_read_n ----------------------------------------------------------------------- 11 EEPROM多字节写函数:EEPROM_write_n ---------------------------------------------------------------------- 11 EEPROM扇区擦除函数:EEPROM_SectorErase ---------------------------------------------------------------- 12PCA初始化函数:PCA_Init ------------------------------------------------------------------------------------------- 12 PWM更新占空比函数:UpdatePwm ----------------------------------------------------------------------------- 15外中断初始化函数:Ext_Inilize ------------------------------------------------------------------------------------- 15GPIO_InitTypeDef的定义见于文件“”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#ifndef __STC8F_H_#define __STC8F_H_///////////////////////////////////////////////// //包含本头文件后,不用另外再包含"REG51.H"//内核特殊功能寄存器sfr ACC = 0xe0;sfr B = 0xf0;sfr PSW = 0xd0;sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr TA = 0xae;sfr DPS = 0xe3;sfr DPL1 = 0xe4;sfr DPH1 = 0xe5;//I/O 口特殊功能寄存器sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xa0;sfr P3 = 0xb0;sfr P4 = 0xc0;sfr P5 = 0xc8;sfr P6 = 0xe8;sfr P7 = 0xf8;sfr P0M0 = 0x94;sfr P0M1 = 0x93;sfr P1M0 = 0x92;sfr P1M1 = 0x91;sfr P2M0 = 0x96;sfr P2M1 = 0x95;sfr P3M0 = 0xb2;sfr P3M1 = 0xb1;sfr P4M1 = 0xb3; sfr P5M0 = 0xca; sfr P5M1 = 0xc9; sfr P6M0 = 0xcc; sfr P6M1 = 0xcb; sfr P7M0 = 0xe2; sfr P7M1 = 0xe1;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; 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 P20 = P2^0; sbit P21 = P2^1; 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 P30 = P3^0; sbit P31 = P3^1; sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5; sbit P36 = P3^6; sbit P37 = P3^7; sbit P40 = P4^0; sbit P41 = P4^1; sbit P42 = P4^2;sbit P44 = P4^4;sbit P45 = P4^5;sbit P46 = P4^6;sbit P47 = P4^7;sbit P50 = P5^0;sbit P51 = P5^1;sbit P52 = P5^2;sbit P53 = P5^3;sbit P54 = P5^4;sbit P55 = P5^5;sbit P56 = P5^6;sbit P57 = P5^7;sbit P60 = P6^0;sbit P61 = P6^1;sbit P62 = P6^2;sbit P63 = P6^3;sbit P64 = P6^4;sbit P65 = P6^5;sbit P66 = P6^6;sbit P67 = P6^7;sbit P70 = P7^0;sbit P71 = P7^1;sbit P72 = P7^2;sbit P73 = P7^3;sbit P74 = P7^4;sbit P75 = P7^5;sbit P76 = P7^6;sbit P77 = P7^7;//如下特殊功能寄存器位于扩展RAM区域//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写#define P0PU (*(unsigned char volatile xdata *)0xfe10) #define P1PU (*(unsigned char volatile xdata *)0xfe11) #define P2PU (*(unsigned char volatile xdata *)0xfe12) #define P3PU (*(unsigned char volatile xdata *)0xfe13) #define P4PU (*(unsigned char volatile xdata *)0xfe14) #define P5PU (*(unsigned char volatile xdata *)0xfe15) #define P6PU (*(unsigned char volatile xdata *)0xfe16) #define P7PU (*(unsigned char volatile xdata *)0xfe17) #define P0NCS (*(unsigned char volatile xdata *)0xfe18) #define P1NCS (*(unsigned char volatile xdata *)0xfe19) #define P2NCS (*(unsigned char volatile xdata *)0xfe1a) #define P3NCS (*(unsigned char volatile xdata *)0xfe1b)#define P4NCS (*(unsigned char volatile xdata *)0xfe1c) #define P5NCS (*(unsigned char volatile xdata *)0xfe1d) #define P6NCS (*(unsigned char volatile xdata *)0xfe1e) #define P7NCS (*(unsigned char volatile xdata *)0xfe1f)//系统管理特殊功能寄存器sfr PCON = 0x87;#define SMOD 0x80#define SMOD0 0x40#define LVDF 0x20#define POF 0x10#define GF1 0x08#define GF0 0x04#define PD 0x02#define IDL 0x01sfr AUXR = 0x8e;#define T0x12 0x80#define T1x12 0x40#define UART_M0x6 0x20#define T2R 0x10#define T2_CT 0x08#define T2x12 0x04#define EXTRAM 0x02#define S1ST2 0x01sfr AUXR2 = 0x97;#define TXLNRX 0x10sfr BUS_SPEED = 0xa1;sfr P_SW1 = 0xa2;sfr P_SW2 = 0xba;#define EAXFR 0x80sfr VOCTRL = 0xbb;sfr RSTCFG = 0xff;//如下特殊功能寄存器位于扩展RAM区域//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写#define CKSEL (*(unsigned char volatile xdata *)0xfe00) #define CLKDIV (*(unsigned char volatile xdata *)0xfe01) #define IRC24MCR (*(unsigned char volatile xdata *)0xfe02) #define XOSCCR (*(unsigned char volatile xdata *)0xfe03) #define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)//中断特殊功能寄存器sfr IE = 0xa8;sbit EA = IE^7;sbit ELVD = IE^6; sbit EADC = IE^5; sbit ES = IE^4; sbit ET1 = IE^3; sbit EX1 = IE^2; sbit ET0 = IE^1; sbit EX0 = IE^0; sfr IE2 = 0xaf; #define ET4 0x40 #define ET3 0x20 #define ES4 0x10 #define ES3 0x08 #define ET2 0x04 #define ESPI 0x02 #define ES2 0x01 sfr IP = 0xb8; sbit PPCA = IP^7; sbit PLVD = IP^6; sbit PADC = IP^5; sbit PS = IP^4; sbit PT1 = IP^3; sbit PX1 = IP^2; sbit PT0 = IP^1; sbit PX0 = IP^0; sfr IP2 = 0xb5; #define PI2C 0x40 #define PCMP 0x20 #define PX4 0x10 #define PPWMFD 0x08 #define PPWM 0x04 #define PSPI 0x02 #define PS2 0x01 sfr IPH = 0xb7; #define PPCAH 0x80 #define PLVDH 0x40 #define PADCH 0x20 #define PSH 0x10 #define PT1H 0x08 #define PX1H 0x04 #define PT0H 0x02 #define PX0H 0x01 sfr IP2H = 0xb6; #define PI2CH 0x40 #define PCMPH 0x20#define PPWMFDH 0x08#define PPWMH 0x04#define PSPIH 0x02#define PS2H 0x01sfr INTCLKO = 0x8f; #define EX4 0x40#define EX3 0x20#define EX2 0x10#define T2CLKO 0x04#define T1CLKO 0x02#define T0CLKO 0x01sfr AUXINTIF = 0xef; #define INT4IF 0x40#define INT3IF 0x20#define INT2IF 0x10#define T4IF 0x04#define T3IF 0x02#define T2IF 0x01//定时器特殊功能寄存器sfr TCON = 0x88; sbit TF1 = TCON^7; sbit TR1 = TCON^6; sbit TF0 = TCON^5; sbit TR0 = TCON^4; sbit IE1 = TCON^3; sbit IT1 = TCON^2; sbit IE0 = TCON^1; sbit IT0 = TCON^0; sfr TMOD = 0x89; #define T1_GATE 0x80#define T1_CT 0x40#define T1_M1 0x20#define T1_M0 0x10#define T0_GATE 0x08#define T0_CT 0x04#define T0_M1 0x02#define T0_M0 0x01sfr TL0 = 0x8a; sfr TL1 = 0x8b; sfr TH0 = 0x8c; sfr TH1 = 0x8d; sfr T4T3M = 0xd1;#define T4_CT 0x40#define T4x12 0x20#define T4CLKO 0x10#define T3R 0x08#define T3_CT 0x04#define T3x12 0x02#define T3CLKO 0x01sfr T4H = 0xd2; sfr T4L = 0xd3; sfr T3H = 0xd4; sfr T3L = 0xd5; sfr T2H = 0xd6; sfr T2L = 0xd7; sfr TH4 = 0xd2; sfr TL4 = 0xd3; sfr TH3 = 0xd4; sfr TL3 = 0xd5; sfr TH2 = 0xd6; sfr TL2 = 0xd7; sfr WKTCL = 0xaa; sfr WKTCH = 0xab; #define WKTEN 0x80sfr WDT_CONTR = 0xc1; #define WDT_FLAG 0x80#define EN_WDT 0x20#define CLR_WDT 0x10#define IDL_WDT 0x08//串行口特殊功能寄存器sfr SCON = 0x98; sbit SM0 = SCON^7; sbit SM1 = SCON^6; sbit SM2 = SCON^5; sbit REN = SCON^4; sbit TB8 = SCON^3; sbit RB8 = SCON^2; sbit TI = SCON^1; sbit RI = SCON^0; sfr SBUF = 0x99; sfr S2CON = 0x9a; #define S2SM0 0x80#define S2ST4 0x40#define S2SM2 0x20#define S2TB8 0x08 #define S2RB8 0x04 #define S2TI 0x02 #define S2RI 0x01 sfr S2BUF = 0x9b; sfr S3CON = 0xac; #define S3SM0 0x80 #define S3ST4 0x40 #define S3SM2 0x20 #define S3REN 0x10 #define S3TB8 0x08 #define S3RB8 0x04 #define S3TI 0x02 #define S3RI 0x01 sfr S3BUF = 0xad; sfr S4CON = 0x84; #define S4SM0 0x80 #define S4ST4 0x40 #define S4SM2 0x20 #define S4REN 0x10 #define S4TB8 0x08 #define S4RB8 0x04 #define S4TI 0x02 #define S4RI 0x01 sfr S4BUF = 0x85; sfr SADDR = 0xa9; sfr SADEN = 0xb9;//ADC 特殊功能寄存器sfr ADC_CONTR = 0xbc; #define ADC_POWER 0x80 #define ADC_START 0x40 #define ADC_FLAG 0x20 sfr ADC_RES = 0xbd; sfr ADC_RESL = 0xbe; sfr ADCCFG = 0xde; #define ADC_RESFMT 0x20//SPI 特殊功能寄存器sfr SPSTAT = 0xcd; #define SPIF 0x80 #define WCOL 0x40 sfr SPCTL = 0xce;#define SPEN 0x40 #define DORD 0x20 #define MSTR 0x10 #define CPOL 0x08 #define CPHA 0x04 sfr SPDAT = 0xcf;//IAP/ISP 特殊功能寄存器sfr IAP_DATA = 0xc2; sfr IAP_ADDRH = 0xc3; sfr IAP_ADDRL = 0xc4; sfr IAP_CMD = 0xc5; #define IAP_IDL 0x00 #define IAP_READ 0x01 #define IAP_WRITE 0x02 #define IAP_ERASE 0x03 sfr IAP_TRIG = 0xc6; sfr IAP_CONTR = 0xc7; #define IAPEN 0x80 #define SWBS 0x40 #define SWRST 0x20 #define CMD_FAIL 0x10 sfr ISP_DATA = 0xc2; sfr ISP_ADDRH = 0xc3; sfr ISP_ADDRL = 0xc4; sfr ISP_CMD = 0xc5; sfr ISP_TRIG = 0xc6; sfr ISP_CONTR = 0xc7;//比较器特殊功能寄存器sfr CMPCR1 = 0xe6; #define CMPEN 0x80 #define CMPIF 0x40 #define PIE 0x20 #define NIE 0x10 #define PIS 0x08 #define NIS 0x04 #define CMPOE 0x02 #define CMPRES 0x01 sfr CMPCR2 = 0xe7; #define INVCMPO 0x80 #define DISFLT 0x40//PCA/PWM 特殊功能寄存器sfr CCON = 0xd8; sbit CF = CCON^7; sbit CR = CCON^6; sbit CCF3 = CCON^3; sbit CCF2 = CCON^2; sbit CCF1 = CCON^1; sbit CCF0 = CCON^0; sfr CMOD = 0xd9; #define CIDL 0x80#define ECF 0x01sfr CL = 0xe9; sfr CH = 0xf9; sfr CCAPM0 = 0xda; #define ECOM0 0x40#define CCAPP0 0x20#define CCAPN0 0x10#define MAT0 0x08#define TOG0 0x04#define PWM0 0x02#define ECCF0 0x01sfr CCAPM1 = 0xdb; #define ECOM1 0x40#define CCAPP1 0x20#define CCAPN1 0x10#define MAT1 0x08#define TOG1 0x04#define PWM1 0x02#define ECCF1 0x01sfr CCAPM2 = 0xdc; #define ECOM2 0x40#define CCAPP2 0x20#define CCAPN2 0x10#define MAT2 0x08#define TOG2 0x04#define PWM2 0x02#define ECCF2 0x01sfr CCAPM3 = 0xdd; #define ECOM3 0x40#define CCAPP3 0x20#define CCAPN3 0x10#define MAT3 0x08#define TOG3 0x04#define PWM3 0x02#define ECCF3 0x01sfr CCAP0L = 0xea;sfr CCAP1L = 0xeb;sfr CCAP2L = 0xec;sfr CCAP3L = 0xed;sfr CCAP0H = 0xfa;sfr CCAP1H = 0xfb;sfr CCAP2H = 0xfc;sfr CCAP3H = 0xfd;sfr PCA_PWM0 = 0xf2;sfr PCA_PWM1 = 0xf3;sfr PCA_PWM2 = 0xf4;sfr PCA_PWM3 = 0xf5;//增强型PWM波形发生器特殊功能寄存器sfr PWMCFG = 0xf1;#define CBIF 0x80#define ETADC 0x40sfr PWMIF = 0xf6;#define C7IF 0x80#define C6IF 0x40#define C5IF 0x20#define C4IF 0x10#define C3IF 0x08#define C2IF 0x04#define C1IF 0x02#define C0IF 0x01sfr PWMFDCR = 0xf7;#define INVCMP 0x80#define INVIO 0x40#define ENFD 0x20#define FLTFLIO 0x10#define EFDI 0x08#define FDCMP 0x04#define FDIO 0x02#define FDIF 0x01sfr PWMCR = 0xfe;#define ENPWM 0x80#define ECBI 0x40//如下特殊功能寄存器位于扩展RAM区域//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写#define PWMC (*(unsigned int volatile xdata *)0xfff0) #define PWMCH (*(unsigned char volatile xdata *)0xfff0)#define PWMCKS (*(unsigned char volatile xdata *)0xfff2) #define TADCP (*(unsigned char volatile xdata *)0xfff3) #define TADCPH (*(unsigned char volatile xdata *)0xfff3) #define TADCPL (*(unsigned char volatile xdata *)0xfff4) #define PWM0T1 (*(unsigned int volatile xdata *)0xff00) #define PWM0T1H (*(unsigned char volatile xdata *)0xff00) #define PWM0T1L (*(unsigned char volatile xdata *)0xff01) #define PWM0T2 (*(unsigned int volatile xdata *)0xff02) #define PWM0T2H (*(unsigned char volatile xdata *)0xff02) #define PWM0T2L (*(unsigned char volatile xdata *)0xff03) #define PWM0CR (*(unsigned char volatile xdata *)0xff04) #define PWM0HLD (*(unsigned char volatile xdata *)0xff05) #define PWM1T1 (*(unsigned int volatile xdata *)0xff10) #define PWM1T1H (*(unsigned char volatile xdata *)0xff10) #define PWM1T1L (*(unsigned char volatile xdata *)0xff11) #define PWM1T2 (*(unsigned int volatile xdata *)0xff12) #define PWM1T2H (*(unsigned char volatile xdata *)0xff12) #define PWM1T2L (*(unsigned char volatile xdata *)0xff13) #define PWM1CR (*(unsigned char volatile xdata *)0xff14) #define PWM1HLD (*(unsigned char volatile xdata *)0xff15) #define PWM2T1 (*(unsigned int volatile xdata *)0xff20) #define PWM2T1H (*(unsigned char volatile xdata *)0xff20) #define PWM2T1L (*(unsigned char volatile xdata *)0xff21) #define PWM2T2 (*(unsigned int volatile xdata *)0xff22) #define PWM2T2H (*(unsigned char volatile xdata *)0xff22) #define PWM2T2L (*(unsigned char volatile xdata *)0xff23) #define PWM2CR (*(unsigned char volatile xdata *)0xff24) #define PWM2HLD (*(unsigned char volatile xdata *)0xff25) #define PWM3T1 (*(unsigned int volatile xdata *)0xff30) #define PWM3T1H (*(unsigned char volatile xdata *)0xff30) #define PWM3T1L (*(unsigned char volatile xdata *)0xff31) #define PWM3T2 (*(unsigned int volatile xdata *)0xff32) #define PWM3T2H (*(unsigned char volatile xdata *)0xff32) #define PWM3T2L (*(unsigned char volatile xdata *)0xff33) #define PWM3CR (*(unsigned char volatile xdata *)0xff34) #define PWM3HLD (*(unsigned char volatile xdata *)0xff35) #define PWM4T1 (*(unsigned int volatile xdata *)0xff40) #define PWM4T1H (*(unsigned char volatile xdata *)0xff40) #define PWM4T1L (*(unsigned char volatile xdata *)0xff41) #define PWM4T2 (*(unsigned int volatile xdata *)0xff42) #define PWM4T2H (*(unsigned char volatile xdata *)0xff42) #define PWM4T2L (*(unsigned char volatile xdata *)0xff43) #define PWM4CR (*(unsigned char volatile xdata *)0xff44)#define PWM5T1 (*(unsigned int volatile xdata *)0xff50) #define PWM5T1H (*(unsigned char volatile xdata *)0xff50) #define PWM5T1L (*(unsigned char volatile xdata *)0xff51) #define PWM5T2 (*(unsigned int volatile xdata *)0xff52) #define PWM5T2H (*(unsigned char volatile xdata *)0xff52) #define PWM5T2L (*(unsigned char volatile xdata *)0xff53) #define PWM5CR (*(unsigned char volatile xdata *)0xff54) #define PWM5HLD (*(unsigned char volatile xdata *)0xff55) #define PWM6T1 (*(unsigned int volatile xdata *)0xff60) #define PWM6T1H (*(unsigned char volatile xdata *)0xff60) #define PWM6T1L (*(unsigned char volatile xdata *)0xff61) #define PWM6T2 (*(unsigned int volatile xdata *)0xff62) #define PWM6T2H (*(unsigned char volatile xdata *)0xff62) #define PWM6T2L (*(unsigned char volatile xdata *)0xff63) #define PWM6CR (*(unsigned char volatile xdata *)0xff64) #define PWM6HLD (*(unsigned char volatile xdata *)0xff65) #define PWM7T1 (*(unsigned int volatile xdata *)0xff70) #define PWM7T1H (*(unsigned char volatile xdata *)0xff70) #define PWM7T1L (*(unsigned char volatile xdata *)0xff71) #define PWM7T2 (*(unsigned int volatile xdata *)0xff72) #define PWM7T2H (*(unsigned char volatile xdata *)0xff72) #define PWM7T2L (*(unsigned char volatile xdata *)0xff73) #define PWM7CR (*(unsigned char volatile xdata *)0xff74) #define PWM7HLD (*(unsigned char volatile xdata *)0xff75)//I2C特殊功能寄存器//如下特殊功能寄存器位于扩展RAM区域//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) #define ENI2C 0x80#define MSSL 0x40#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) #define EMSI 0x80#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) #define MSBUSY 0x80#define MSIF 0x40#define MSACKI 0x02#define MSACKO 0x01#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) #define ESTAI 0x40#define ERXI 0x20#define ETXI 0x10#define ESTOI 0x08#define SLRST 0x01#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) #define SLBUSY 0x80#define STAIF 0x40#define RXIF 0x20#define TXIF 0x10#define STOIF 0x08#define TXING 0x04#define SLACKI 0x02#define SLACKO 0x01#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) #define I2CTXD (*(unsigned char volatile xdata *)0xfe86) #define I2CRXD (*(unsigned char volatile xdata *)0xfe87)/////////////////////////////////////////////////#endif。