STC12C5A60S2 定时器总结
STC12C5A60S2各模块的应用分享大家

STC12C5A60S2各模块的应用分享大家/*****************串口应用******************/ ///////////////////串口一//////////////#include"12c5a60s2.h"#include"uart.h"unsignedcharbuf[3],g;voidinitUart(){EA=1;BRT=0XFD;//独立波特率发生器9600AUXR=0X11;//启动独立波特率发生器,12分频// TMOD=0X20;//用定时器1做波特率发生器//TH1=0XFD;//TL1=0XFD;//TR1=1;REN=1;SM1=1;ES=1;g=0;}voidsendDate(unsigned char date){SBUF=date;while(!TI);TI=0;}void work(){sendDate(buf[0]); sendDate(buf[1]);}voidres()interrupt 4{buf[g++]=SBUF;if(g>;=2){g=0;work();}while(!RI);RI=0;}////////////////////串口二//////////////// #include;#include"uart2.h"#defineS2TI 0X02//不能位寻址#defineS2RI 0X01//不能位寻址unsigned charshuzhi;voidinitUART2(){BRT=0XFD;//定初值9600AUXR=0X11;//使用波特率独立发生器 12分频 9600 //AUXR=0X19;//使用波特率独立发生器 1分频 19200 EA=1;IE2=0X01;//ES2=1;S2CON=0X50;//S2REN=1;S2SM1=1;}voidsenddate(unsigned char date){S2BUF=date;//判断是否是一if(S2CON&S2TI)//清零S2CON&=~S2TI;}void uart2r()interrupt 8{if(S2CON&S2RI)//判断是否是一{S2CON&=~S2RI;//清零shuzhi=S2BUF;senddate(0x40);}}/******************AD转换*************************/#include"12c5a60s2.h"#include"12c5aad.h"#include;//寄存器地址声明,有12c5a60s2 头文件可省略//sfr ADC_CONTR =0XBC;//sfr ADC_RES =0XBD;//sfr ADC_ERSL =0XBE;//sfr P1ASF =0X9D;//宏定义#define ADC_POWER 0X80// ad电源控制位#define ADC_FLAG0x10//ad转换结束标志位#define ADC_START0x08//ad转换开始控制位#define ADC_SPEEDLL 0x00 //540 转换速率#define ADC_SPEEDL 0x20 //360 转换速率#define ADC_SPEEDH 0x40 //180 转换速率#define ADC_SPEEDHH 0x60 //90 转换速率//ad转换延时函数voiddelayad(unsignedint z){unsignedintx,y;for(x=5000;x>;0;x--)for(y=z;y>;0;y--);}//ad初始化函数voidinitad(){P1ASF=0XFF;//设置P1口为ad转换模式ADC_RES=0;//ad转换结果寄存器清零ADC_CONTR=ADC_POWER|ADC_SPEEDLL; //打开ad转换电源,最慢频率delayad(2);//延时待电源稳定提高精确性}unsignedchar getAD(unsigned char ch) //ch通道选择{ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch ; _nop_(); _nop_();_nop_();_nop_();while(!(ADC_CONTR&ADC_FLAG));//ad转换完成 FALG 为1ADC_CONTR&=~ADC_FLAG;//FALG置置零return ADC_RES;}/********************PCA/PWM*****************/ /////////////////////中断模式/////////////////////#include;#include"pcaint.h"unsigned charmiao;voidinitPCAint(void){CCON=0;CL=0;CH=0;CMOD=0X00;//禁止CF中断CCAPM0=0X11;// (CAPN0 负捕获,CAPP0 正捕获)本模块负捕获CCAPM1=0X21; // 模块一正捕获CR=1;//开计数列阵EA=1;//开总中断}voidpca()interrupt7{if(CCF0==1){CCF0=0;//清零模块中断标志位miao++;}if(CCF1==1){CCF1=0;//清零模块中断标志位miao--;}}//////////////////////////定时器模式////////////////////#include;#include"pcatime.h" unsignedint value;//数组赋值unsigned char ptime;//ptime=0xb402;50ms定时 0x2400 10ms voidinitPCATime(){CCON=0X00;//标志位清零CL=0;//pca L列阵清零CH=0;//PCA H列阵清零CMOD=0X00;//选择时钟模式CCAP1L=value;//先赋值高位CCAP1H=value>;>;8; //赋值CCAPM1=0X49;//允许比较器ECOM1,MAT1、ECCF1置位允许CCF1中断CR=1;//允许列阵EA=1;//开总中断}voidpcatime()interrupt 7//两个PCA模块都是中断7 {unsignedint i;CL=0;//清零不然是溢出时钟,定时无效 CH=0;//清零不然是溢出时钟,定时无效 CCF1=0;CCAP1L=value;CCAP1H=value>;>;8;i++;if(i>;=20){i=0;ptime++;}}///////////////////////PWM模式//////////////////////#include"12c5a60s2.h" #include"12c5apwm.h" voidinitPWM(void ){CCON=0;//关闭PCA计数及标志位清零CL=0;// 清空pca计数低位CH=0;// 清空pca计数高位CMOD=0X08;// 用系统时钟不分频//CCAP0H=CCAP0L=0x01;// 模块0复初值CCAPM0=0X42;//允许模块0比较器工作,脉宽调制模式//CCAP1H=CCAP1L=0X01;//模块1复初值CCAPM1=0X42;//允许模块1比较器工作,脉宽调制模式CR=1;//启动pca计数}void tiaoj(unsignedchar pwmH,unsigned char pwmL){CCAP0H=CCAP0L=pwmH;// 模块0复值CCAP1H=CCAP1L=pwmL;// 模块1复值}/**********************EEPROM******************** *****/#include;#include;#include"eeporm.h"#defineRdeeprom 0x01#defineWreeprom 0x02#defineERSeeprom 0x03#defineWTime0x01 // 0x02 0x03 0x00sfr ISP_DATA=0Xc2;sfr ISP_ADDRH=0Xc3;sfr ISP_ADDRL=0Xc4;sfr ISP_CMD=0Xc5;sfr ISP_TRIG=0Xc6;sfr ISP_CONTR=0Xc7;unsigned char miao,miao2,miao3;bit int0flag;void ISP_Open(void){EA=0;//关中断ISP_CONTR=ISP_CONTR&0X18;//清零ISP_CONTR=ISP_CONTR|WTime;//等待时间ISP_CONTR=ISP_CONTR|0x80;//使能ISP}void ISP_Close(void){ISP_CONTR=ISP_CONTR&0X7F; //停止ISP使能ISP_TRIG=0X00;//命令触发寄存器清零EA=1;//开中断}void ISP_Goon(void){//打开ISPISP_Open();ISP_TRIG=0x5a;//写触发命令ISP_TRIG=0xa5;//写触发命令_nop_();//等待}voidbyte_write(unsigned int add,unsigned char dat) //写某地址数据{ISP_ADDRH=(unsignedchar)(add>;>;8);//地址高位ISP_ADDRL=(unsignedchar)(add&0x00ff);//地址低位ISP_CMD=ISP_CMD&0XF8;//命令模式复位ISP_CMD=ISP_CMD|Wreeprom;//写命令ISP_DATA=dat;//读写寄存器赋值ISP_Goon();//打开、触发ISP_Close();_nop_();//关闭}voidsector(unsigned int add) {ISP_ADDRH=(unsignedchar)(add>;>;8);//地址高位ISP_ADDRL=0x00;//地址低位ISP_CMD=ISP_CMD&0XF8;//命令模式复位ISP_CMD=ISP_CMD|ERSeeprom;//删命令ISP_Goon();//打开、触发ISP_Close();_nop_();}unsignedchar byte_read(unsigned int add) {ISP_ADDRH=(unsignedchar)(add>;>;8);//地址高位ISP_ADDRL=(unsignedchar)(add&0x00ff);//地址低位ISP_CMD=ISP_CMD&0XF8;//命令模式复位ISP_CMD=ISP_CMD|Rdeeprom;//读命令ISP_Goon();//打开、触发ISP_Close();_nop_();return (ISP_DATA);}voidinitc(){IT0=1;EX0=1;EA=1;}voidint0()interrupt 0{if(int0flag==1){EA=0;sector(0x00ff); //0000h-03ffh byte_write(0X00ff,miao3);EA=1;}}///////////////////////////////////////////////// ////////写的一般,不足之处还望包涵,均测试通过,欢迎提好的建议。
STC12C5A60S2定时器,STC12C5A60S2定时器程序

STC12C5A60S2 定时器,STC12C5A60S2 定时器程序
STC12C5A60S2 单片机集成了共4 个16 位定时器,两个与传统8051 兼容的定时器/计数器,16 位定时器T0 和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2 路PCA 模块可再实现2 个16 位定时器;
1. 基本特性
STC12C5A60S2 单片机集成了两个16 位定时/计数器。
1)寄存器
1.1)TMOD 定时器工作方式控制寄存器,包括13 位寄存器、16 位寄存器、8 位寄存器等;
1.2)TCON 定时器控制寄存器,主要包括定时器启动控制位等;
1.3)AUXR 辅助寄存器,用以设置分频;默认12 分频
1.4)TH0/1:定时器高8 位寄存器
1.5)TL0/1:定时器低8 位寄存器
定时器计算
STC12C5A60S2 系列是1T 的8051 单片机,为了兼容传统的8051,定时器0 和定时器1 复位后是传统8051 的速度,既12 分频,这是为了兼容传统8051。
但也可以不进行12 分频,实现真正的1T。
编译、下载目标代码,LED 灯以1s 间隔闪烁,说明我们的代码是正确的。
现在我们修改一下代码,关闭定时器T0 的12 分频,粉色字段为新增加代码。
STC12C5A60S2 系列单片机器件手册 说明书

Tel: 0755-********Fax: 0755-********创始人/研发总监:姚永平(139********)宏晶STC 官方网站: 1STC12C5A60S2系列 1T 8051 单片机中文指南全球最大的8051单片机设计公司S T C M C U L i m i t e d .临时技术支持:139********授权代理:南通国芯微电子有限公司总机:0513-5501 2928 / 2929 / 2966传真:0513-5501 2969 / 2956 / 2947宏晶STC 单片机官方网站: Update date: 2011/3/19---高速,高可靠---低功耗,超低价---超���超���� ---�抗静电,�抗干扰---1个时钟/机器周期8051STC12C5A60S2系列单片机器件手册STC12C5A08S2, STC12C5A08ADSTC12C5A16S2, STC12C5A16ADSTC12C5A20S2, STC12C5A20ADSTC12C5A32S2, STC12C5A32ADSTC12C5A40S2, STC12C5A40ADSTC12C5A48S2, STC12C5A48ADSTC12C5A52S2, STC12C5A52ADSTC12C5A56S2, STC12C5A56ADSTC12C5A60S2, STC12C5A60AD STC12C5A62S2, STC12C5A62AD全部中国大陆本土独立自主知识产权,技术处于全球领先水平,请全体中国人民支持,您的支持是中国大陆本土企业统一全球市场的有力保证.目录第1章STC12C5A60S2系列单片机总体介绍 (8)1.1 STC12C5A60S2系列单片机简介 (8)1.2 STC12C5A60S2系列单片机的内部结构 (10)1.3 STC12C5A60S2系列单片机管脚图 (11)1.4 STC12C5A60S2系列单片机选型一览表 (13)1.5 STC12C5A60S2系列单片机最小应用系统 (15)1.6 STC12C5A60S2系列在系统可编程(ISP)典型应用线路图 (17)1.7 STC12C5A60S2系列管脚说明 (19)1.8 STC12C5A60S2系列单片机封装尺寸图 (22)1.9 STC12C5A60S2系列单片机命名规则 (27)1.10 每个单片机具有全球唯一身份证号码(ID号) (28)1.11 如何从传统8051单片机过渡到STC12C5A60S2系列单片机 (31)第2章时钟,省电模式及复位 (35)2.1 STC12C5A60S2系列单片机的时钟 (35)2.1.1 STC12C5A60S2系列单片机内部/外部工作时钟可选 (35)2.1.2 时钟分频及分频寄存器 (36)2.1.3 如何知道单片机内部R/C振荡频率(内部时钟频率) (37)2.1.4 可编程时钟输出 (40)2.2 STC12C5A60S2系列单片机的省电模式 (45)2.2.1 低速模式 (47)2.2.2 空闲模式 (48)2.2.3 掉电模式/停机模式 (48)2.3 复位 (54)2.3.1 外部RST引脚复位(第一复位功能脚) (54)2.3.2 外部低压检测复位(高可靠复位,新增第二复位功能脚RST2复位) (54)2.3.3 外部低压检测若不作第二复位功能时,可作外部低压检测中断 (56)2.3.4 软件复位 (60)2.3.5 上电复位/掉电复位 (60)2.3.6 MAX810专用复位电路 (61)2.3.7 看门狗(WDT)复位 (61)2.3.8 冷启动复位和热启动复位 (65)第3章片内存储器和特殊功能寄存器(SFRs) (66)3.1 程序存储器 (66)3.2 数据存储器(SRAM) (67)3.2.1 内部RAM (67)3.2.2 内部扩展RAM (69)3.2.3 外部扩展的64KB数据存储器(片外RAM) (77)3.3 特殊功能寄存器(SFRs) (80)第4章.STC12C5A60S2系列单片机的I/O口结构 (87)4.1 I/O口各种不同的工作模式及配置介绍 (87)4.2 STC12C5A60S2系列单片机P4/P5口的使用 (92)4.3 I/O口各种不同的工作模式结构框图 (94)4.3.1 准双向口输出配置 (94)4.3.2 强推挽输出配置 (95)4.3.3 仅为输入(高阻)配置 (95)4.3.4 开漏输出配置(若外�上拉电阻,也可读) (95)4.4 一种典型三极管控制电路 (97)4.5 典型发光二极管控制电路 (97)4.6 混合电压供电系统3V/5V器件I/O口互连 (97)4.7 如何让I/O口上电复位时为低电平 (98)4.8 PWM输出时I/O口的状态 (99)4.9 I/O口直接驱动LED数码管应用线路图 (100)4.10 I/O口直接驱动LCD应用线路图 (101)4.11 A/D做按键扫描应用线路图 (102)第5章.指令系统 (103)5.1 寻址方式 (103)5.1.1 立即寻址 (103)5.1.2 直接寻址 (103)5.1.3 间接寻址 (103)5.1.4 寄存器寻址 (104)5.1.5 相对寻址 (104)5.1.6 变址寻址 (104)5.1.7 位寻址 (104)5.2 指令系统分类总结 (105)5.3 传统8051单片机的指令定义 (110)第6章.中断系统 (147)6.1 中断结构 (149)6.2 中断寄存器 (151)6.3 中断优先级 (159)6.4 中断处理 (160)6.5 外部中断 (161)6.6 中断测试程序(C程序及汇编程序) (162)6.6.1 外部中断0(INT0)的测试程序(C程序及汇编程序) (162)6.6.2 外部中断1(INT1)的测试程序(C程序及汇编程序) (166)6.6.3 P3.4/T0/INT下降沿中断(可用于唤醒掉电模式)的测试程序 (170)6.6.4 P3.5/T1/INT下降沿中断(可用于唤醒掉电模式)的测试程序 (172)6.6.5 P3.0/RxD/INT下降沿中断(可用于唤醒掉电模式)的测试程序 (174)—— C程序及汇编程序 (174)6.6.6 低压检测LVD中断(可用于唤醒掉电模式)的测试程序 (177)6.6.7 PCA模块中断(可用于唤醒掉电模式)的测试程序 (180)第7章.定时器/计数器 (184)7.1 定时器/计数器的相关寄存器 (184)7.2 定时器/计数器0工作模式(与传统8051单片机兼容) (189)7.2.1 模式0(13位定时器/计数器) (189)7.2.2 模式1(16位定时器/计数器)及测试程序 (190)7.2.3 模式2(8位自动重装模式) (194)7.2.4 模式3(两个8位计数器) (197)7.3 定时器/计数器1工作模式(与传统8051单片机兼容) (198)7.3.1 模式0(13位定时器/计数器) (198)7.3.2 模式1(16位定时器/计数器) (199)7.3.3 模式2(8位自动重装模式) (203)7.4 可编程时钟输出及测试程序(C程序和汇编程序) (206)7.4.1 定时器0的可编程时钟输出的测试程序 (209)7.4.2 定时器1的可编程时钟输出的测试程序 (211)7.4.3 独立波特率发生器的可编程时钟输出的测试程序 (213)7.5 古老Intel 8051单片机定时器0/1的应用举例 (215)7.6 如何将定时器T0/T1的速度提高12倍 (222)第8章.串行口通信 (223)8.1 串行口1的相关寄存器 (223)8.2 串行口1工作模式 (229)8.2.1 串行口1工作模式0:同步移位寄存器 (229)8.2.2 串行口1工作模式1:8位UART,波特率可变 (231)8.2.3 串行口1工作模式2:9位UART,波特率固定 (233)8.2.4 串行口1工作模式3:9位UART,波特率可变 (235)8.3 串行通信中波特率的设置 (237)8.4 串行口1的测试程序 (242)8.5 串行口2的相关寄存器 (248)8.6 串行口2工作模式 (254)8.7 串行口2的测试程序 (256)8.8 双机通信 (262)8.9 多机通信 (273)第9章.STC12C5A60S2系列单片机的A/D转换器 (279)9.1 A/D转换器的结构 (279)9.2 与A/D转换相关的寄存器 (281)9.3 A/D转换典型应用线路 (286)9.4 A/D做按键扫描应用线路图 (287)9.5 A/D转换模块的参考电压源 (288)9.6 A/D转换测试程序(C程序和汇编程序) (289)9.6.1 A/D转换测试程序(ADC中断方式) (289)9.6.2 A/D转换测试程序(ADC查询方式) (295)第10章.STC12C5A60S2系列单片机PCA/PWM应用 (301)10.1 与PCA/PWM应用有关的特殊功能寄存器 (301)10.2 PCA/PWM模块的结构 (307)10.3 PCA模块的工作模式 (309)10.3.1 捕获模式 (309)10.3.2 16位软件定时器模式 (310)10.3.3 高速输出模式 (311)10.3.4 脉宽调节模式(PWM) (312)10.4 用PCA功能扩展外部中断的示例程序(C程序和汇编程序) (314)10.5 用PCA功能实现定时器的示例程序(C程序和汇编程序) (318)10.6 PCA输出高速脉冲的示例程序(C程序和汇编程序) (322)10.7 PCA输出PWM的示例程序(C程序和汇编程序) (326)10.8 利用PWM实现D/A功能的典型应用线路图 (330)第11章.同步串行外围接口(SPI接口) (331)11.1 与SPI功能模块相关的特殊功能寄存器 (331)11.2 SPI接口的结构 (334)11.3 SPI接口的数据通信 (335)11.3.1 SPI接口的数据通信方式 (336)11.3.2 对SPI进行配置 (338)11.3.3 作为主机/从机时的额外注意事项 (339)11.3.4 通过SS改变模式 (340)11.3.5 写冲突 (340)11.3.6 数据模式 (341)11.4 适用单主单从系统的SPI功能测试程序 (343)11.4.1 中断方式 (343)11.4.2 查询方式 (349)11.5 适用互为主从系统的SPI功能测试程序 (355)11.5.1 中断方式 (355)11.5.2 查询方式 (361)第12章.STC12C5A60S2系列单片机EEPROM的应用 (367)12.1 IAP及EEPROM新增特殊功能寄存器介绍 (367)12.2 STC12C5A60S2系列单片机EEPROM空间大小及地址 (371)12.3 IAP及EEPROM汇编简介 (373)12.4 EEPROM测试程序 (377)第13章.STC12系列单片机开发/编程工具说明 (385)13.1 在系统可编程(ISP)原理,官方演示工具使用说明 (385)13.1.1 在系统可编程(ISP)原理使用说明 (385)13.1.2 STC12C5A60S2系列在系统可编程(ISP)典型应用线路图 (386)13.1.3 电脑端的ISP控制软件界面使用说明 (388)13.1.4 宏晶科技的ISP下载编程工具硬件使用说明 (390)13.1.5 若无RS-232转换器,如何用宏晶的ISP下载板做RS-232通信转换 (391)13.2 编译器/汇编器,编程器,仿真器 (392)13.3 自定义下载演示程序(实现不停电下载) (394)7STC12C5A60S2系列 1T 8051 单片机中文指南全球最大的8051单片机设计公司S T C M C U L i m i t e d .临时技术支持:139********授权代理:南通国芯微电子有限公司总机:0513-5501 2928 / 2929 / 2966传真:0513-5501 2969 / 2956 / 2947附录A :汇编语言编程...................................398附录B :C 语言编程......................................420附录C :STC12C5A60S2系列单片机电气特性...............430附录D :内部常规256字节RAM 间接寻址测试程序...........432附录E :用串口扩展I/O 接口..............................434附录F :利用STC 单片机普通I/O 驱动LCD 显示..............437附录G :一个I/O 口驱动发光二极管并扫描按键..............444附录H :如何利用Keil C 软件减少代码长度.................445附录I :STC12系列单片机取代传统8051注意事项............446附录J :如何采购和授权分销机构.........................450J.1 如何采购 ................................................450J.2 授权分销机构 ............................................451附录K :每日更新内容的备忘录...........................453附录L :以下是各系列的选型指南. (454)L.1 STC15F828EACS 系列选型指南(2011年5月开始送样) ..........454L.2 STC15F204EA 系列选型指南 ...............................454L.3 STC12C5A60S2系列选型指南 ..............................454L.4 STC11/10xx 系列选型指南 .................................454L.5 STC12C5201AD 系列选型指南 ..............................454L.6 STC12C5620AD 系列选型指南 ..............................454L.7 STC12C5410AD 系列选型指南 ..............................454L.8 STC12C2052AD 系列选型指南 ..............................454L.9 STC89C51/STC90C51系列选型指南 . (454)8STC12C5A60S2系列 1T 8051 单片机中文指南全球最大的8051单片机设计公司临时技术支持:139********S T C M C U L i mi t e d .授权代理:南通国芯微电子有限公司总机:0513-5501 2928 / 2929 / 2966传真:0513-5501 2969 / 2956 / 2947第1章 STC12C5A60S2系列单片机总体介绍1.1.STC12C5A60S2系列单片机简介STC12C5A60S2/AD/PWM 系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超�抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12 倍。
STC12C5A60S2定时器,STC12C5A60S2定时器程序

加代码。
STC12C5A60S2单片机集成了两个16位定时/计数器。
1)寄存器
1.1)TMOD定时器工作方式控制寄存器,包括13位寄存器、16位
寄存器、8位寄存器等;
1.2)TCON定时器控制寄存器,主要包括定时器启动控制位等;
1.3)AUXR辅助寄存器,用以设置分频;默认12分频
1.4)TH0/1:定时器高8位寄存器
1.5)TL0/1:定时器低8位寄存器
定时器计算
STC12C5A60S2系列是1T的8051单片机,为了兼容传统的8051,
定时器0和定时器1复位后是传统8051的速度,既12分频,这是为了兼容
传统8051。但也可以不进行12分频,实现真正的1T。
编译、下载目标代码,LED灯以1s间隔闪烁,说明我们的代码是正
STC12C5A60S2定时器,STC12C集成了共4个16位定时器,两个与传统8051
兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特
率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个
16位定时器;
1.基本特性
深入浅出玩转单片机之探索STC12C5A60S2

//启动看门狗
for(;;)
//LED2 隔一秒闪烁
{
LED2 = 1;
Delay_1ms(1000);
LED2 = 0;
Delay_1ms(1000); } }
编译、下载目标代码,发现 LED1 常灭,LED2 常亮,这是什么原因呢?
//定义 P1 口配置寄存器
sfr P1M0 = 0x92;
ly sfr AUXR = 0x8e; mi sbit LED = P1^0; ur unsigned int Time = 0; Fo bit flag;
//定义定时器 12 分频配置寄存器
void Timer0_Init(void) {
#include <reg52.h> sfr P1M1 = 0x91; sfr P1M0 = 0x92; sbit LED = P1^0; void main()
//定义 P1 口配置寄存器
{ P1M1 &= ~(1<<0); P1M0 |= (1<<0); LED = 1; for(;;);
}
//配置 P1.0 为推挽输出
m 4. 探索 STC12C5A60S2 看门狗 ------------------------- 11 o.co 5. 探索 STC12C5A60S2 UART 串行口通信 ----------------- 15 aoba 6. 探索 STC12C5A60S2 A/D 转换 ------------------------ 24 14.t 7. 探索 STC12C5A60S2 PCA/PWM 功能 -------------------- 27 zu13 8. 探索 STC12C5A60S2 EEPROM 的应用 ------------------- 35 http://f 9. 探索 STC12C5A60S2 内部扩展 1024 字节 RAM 的使用 ----- 39
STC12C5A60S2 双串口使用程序

STC12C5A60S2 双串口使用程序(已经验证成功)#include <stc12c5a60s2.h>#include "intrins.h"#define uchar unsigned char#define S2RI 0x01 // 串口2接收中断请求标志位#define S2TI 0x02 // 串口2发送中断请求标志位//================================================// 对于将P4.4、P4.5当做I/O口使用必须添加的定义||//================================================sfr p4sw=0xbb; // 需在主函数文件中做相应设置4、5、6为1(作为I/O口使用)/*sbit button1=P4^3;sbit button2=P4^4;sbit button3=P4^5;sbit button4=P4^6;*/页脚内容1uchar code temp1[]={" 白云:“我可是个名人”"};uchar code temp2[]={" 黑土:“啥名人啊,你就是个人名”"}; uchar code temp3[]={" 小崔:“诶,大叔大妈,你俩都冷静冷静”"}; uchar code temp4[]={" 观众:“哈哈哈哈”"};/*void delay_1ms(uchar ii) // 误差-0.018084490741us{unsigned char a,b;for(; ii>0; ii--)for( b = 18; b>0; b--)for( a = 152; a>0; a--);_nop_(); //if Keil,require use intrins.h}void delay1s(void) //误差-0.000000000125us{unsigned char a,b,c;for( c = 212; c>0; c--)页脚内容2for( b = 160; b>0; b--)for( a = 80; a>0; a--);_nop_(); //if Keil,require use intrins.h_nop_(); //if Keil,require use intrins.h}*///************************ 串口通信部分******************************uchar wj_uun = '!'; // 用于存放串口1接收的字符uchar wj_uun2 = '?'; // 用于存放串口2接收的字符void bt_uart_init() // 单片机双串口初始化{//SCON=0X50; // SM0=0 SM1=1 SM2=0 REN=1SM0 = 0; // 串口工作方式1:1位起始位,8位数据位,1位停止位允许串口接收SM1 = 1;REN = 1; // 允许串口接收页脚内容3//RI=1; // 接收标志位,0:正在接收1:接收完毕(如果RI=1就一直执行串口中断)TMOD = 0X20; // 定时器T1工作方式2TH1 = 0XFD; // 9600bit/s下的定时器初值TL1 = 0XFD;TR1 = 1; // 启动定时器T1EA = 1; // 开总中断ES = 1; // 开串行口中断S2CON = 0x50; // 串口2工作在方式1 10位异步收发S2SM0=0 S2SM1=1 S2REN=1允许接收BRT = 0XFD; // 9600bit/s下的独立波特率发生器初值AUXR = 0x10; // 辅助寄存器:0001 0000 ->BRTR=1:独立波特率发生器开始计数,S2SMOD=0:波特率不加倍,BRTx12=0:独立波特率每12个时钟计数一次IE2 = 0x01; // 开串口2中断0000 0001->ES2=1// AUXR1 = 0x10; // 0001 0000->S2_P4=1:UART2从P1口(RxD2:P1.2 TxD2:P1.3)切换到P4口(RxD2:P4.2 TxD2:P4.3) 否则默认都为P1口}/************** 串口1发送函数*****************/页脚内容4void s1_send_char(uchar dat) // 发送端(发送的是字符){SBUF = dat; // 将字符送入发送缓冲寄存器while(!TI); // TI为发送状态标志位,0:发送中1:发送结束TI = 0; // 手动清零标志位}void s1_send_string(uchar *pt) // 通过调用发送字符函数来发送字符数组{while(*pt != '\0'){s1_send_char(*pt++);}}/************** 串口2发送函数*****************/void s2_send_char(uchar dat2) // 发送端(发送的是字符){页脚内容5S2BUF = dat2; // 将字符送入串口2的发送缓冲寄存器while(!(S2CON&S2TI)); // 判断发送是否结束:S2CON.bit2 = 0:发送中1:发送结束S2CON &= ~S2TI; // 手动清零标志位,令S2CON.bit2 = 0}void s2_send_string(uchar *pt2) // 通过调用发送字符函数来发送字符数组{while(*pt2!='\0'){s2_send_char(*pt2++);}}/************** 串口1中断程序*****************/void bt_serial_1() i nterrupt 4 // 中断编号4为串行口1中断{if(RI) // 接收标志位,0:正在接收1:接收完毕(如果RI=1就一直执行中断){页脚内容6RI = 0; // 同样需要手动清零wj_uun = SBUF; // 将接收缓冲器接收的字符送入变量中}}/************** 串口2中断程序*****************/void bt_serial_2() interrupt 8 // 中断编号8为串行口2中断{if(S2CON&S2RI) // 接收标志位: S2CON.bit1 = 0:正在接收1:接收完毕(如果RI=1就一直执行中断){S2CON &= ~S2RI; // 同样需要手动清零,令S2CON.bit1 = 0wj_uun2 = S2BUF; // 将串口2接收到的字符送入变量中}}页脚内容7void main(void){bt_uart_init(); // 串口初始化p4sw = 0x70; // 0111 0000 对应的4、5、6脚设置成功通用I/O口while(1){/*if(wj_uun != '!') // 串口1接收{s1_send_char(wj_uun); // 串口1发送wj_uun = '!';}*/if(wj_uun2 != '?') // 串口2接收{s2_send_char(wj_uun2); // 串口2发送wj_uun2 = '?';}}页脚内容8}页脚内容9。
STC12C5A60S2单片机各个模块程序代码

.//****************************************************************************////STC12C5A60S2 可编程时钟模块//////说明: STC12C5A60S2 单片机有三路可编程时钟输出CLKOUT0/T0/P3.4//CLKOUT1/T1/P3.5、CLKOUT2/P1.0////涉及寄存器: AUXR( 辅助寄存器 )、 WAKE_CLKO( 时钟与系统掉电唤醒控制寄存器 )//BRT( 独立波特率发生器定时器寄存器)////程序说明://本程序可选实现P3.4 输出 CLKOUT0时钟、P3.5输出CLKOUT1时钟//P1.0 输出 CLKOUT2时钟//////****************************************************************************//#include <STC12C5A60S2.H>#include <intrins.h>//#define Port_BRT//如果想测试独立波特率发生器时钟输出请打开此句//若想测试CLKOUT1和CLKOUT0请注释此句#ifdef Port_BRT/* 条件编译独立波特率发生器时钟输出*///*********************************////CLKOUT2时钟初始化////*********************************//void CLKOUT_init(void){WAKE_CLKO = 0x04; //Bit2-BRTCLKO 允许 P1.0 配置为独立波特率发生器的时钟输出//BRT 工作在 1T 模式下时的输出频率 = Sysclk/(256-BRT)/2 //BRT工作在 12T 模式下时输出频率 = Sysclk/12/(256-BRT)/2 AUXR= 0x14;//Bit4-BRTR允许独立波特率发生器运行//Bit2-BRTx12 BRT工作在1T模式下BRT= 0xff;// 更改该寄存器的值可实现对输出的时钟频率进行分频}#else/* 条件编译CLKOUT0时钟输出*///*********************************//// CLKOUT0时钟和CLKOUT1初始化////*********************************//void CLKOUT_init(void){WAKE_CLKO = 0x03;//允许将 P3.4/T0 脚配置为定时器0 的时钟输出CLKOUT0//T0 工作在 1T 模式时的输出频率= SYSclk/(256-TH0)/2//T0 工作在 12T 模式时的输出频率= SYSclk/12/(256-TH0)/2//1T 指的是每 1 个时钟加1,是普通 C51 的 12 倍//12T 指的是每 12 个时钟加 1 与普通 C51 一样//允许将 P3.5/T1 脚配置为定时器 1 的时钟输出CLKOUT1,只能工作在定时器模式 2 下//T1 工作在 1T 模式时的输出频率 = SYSclk/(256-TH0)/2 //T1 工作在 12T 模式时的输出频率 = SYSclk/12/(256-TH0)/2 //1T 指的是每 1 个时钟加 1,是普通 C51 的 12 倍 //12T 指的是每 12 个时钟加 1 与普通 C51 一样AUXR= 0xc0;//T0 定时器速度是普通8051 的 12 倍 ,即工作在1T 模式下//T1 定时器速度是普通8051 的 12 倍 ,即工作在1T 模式下TMOD= 0x22;//定时器 0 工作模式为方式2,自动装载时间常数//定时器 1 工作模式为方式2,自动装载时间常数TH0= 0xff;// 更改该寄存器的值可实现对输出的时钟频率进行分频TL0= 0xff;TH1= 0xff;// 更改该寄存器的值可实现对输出的时钟频率进行分频TL1= 0xff;TR1= 1;TR0= 1;}#endif//**********************************////主程序////**********************************//void main(){CLKOUT_init();while(1);}//****************************************************************************////STC12C5A60S2 系统时钟模块//////说明:STC12C5A60S2单片机有两个时钟源,内部R/C 振荡时钟和外部晶体时钟//出厂标准配置是使用外部晶体或时钟//////涉及寄存器:CLK_DIV(时钟分频寄存器)//由该寄存器的Bit0-2 组合可实现对时钟源进行0、 2、 4、 8、16 //32、 64、 128 分频//////程序说明://对外部时钟进行分频得到Sysclk, 然后经过P1.0 的独立波特率//时钟输出功能Sysclk/2 输出时钟频率//****************************************************************************//#include <STC12C5A60S2.h>#include <intrins.h>#define Bus_clk 12//若要修改系统时钟直接在此处修改//12为12M的 sysclk//6为6M的 sysclk//3为3M的 sysclk//1500为 1.5M的 sysclk//750为750kHz的 sysclk//375为375kHz的 sysclk//187500为187.5kHz的 sysclk//93750为93.75kHz的 sysclk//*********************************************////系统时钟初始化////*********************************************//void Sysclk_init(void){WAKE_CLKO = 0x04;// 配置 P1.0 口为频率输出AUXR= 0x14;// 允许波特率时钟工作// 工作模式为1TBRT= 0xff;#if( Bus_clk == 12 )CLK_DIV = 0x00;#elif( Bus_clk == 6 )CLK_DIV= 0x01;#elif( Bus_clk == 3 )CLK_DIV= 0x02;#elif( Bus_clk == 1500 )CLK_DIV= 0x03;#elif( Bus_clk == 750 )CLK_DIV= 0x04;#elif( Bus_clk == 375 )CLK_DIV= 0x05;#elif( Bus_clk == 187500 )CLK_DIV= 0x06;#elif( Bus_clk == 93750 )CLK_DIV= 0x07;#endif}//**********************************************////主程序////**********************************************//void main(){Sysclk_init();while(1);}//****************************************************************************////STC12C5A60S2系统省电模块//////说明:STC12C5A60S2 单片机有三种省电模式以降低功耗.空闲模式,低速模式//掉电模式//////涉及寄存器: PCON( 电源控制寄存器 )//Bit0 - IDL控制单片机进入 IDLE 空闲模式//Bit1 - PD控制单片机进入掉电模式//////程序说明:程序实现让单片机先工作一阵子(通过 P0^3 指示灯显示 )//然后进入掉电状态,利用外部中断0 口来唤醒单片机工作//唤醒后单片机将通过P0^0-3 口的灯闪烁显示开始工作////****************************************************************************/ /#include <STC12C5A60S2.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar Power_Down_Flag = 0;// 进入掉电状态标志sbit Chip_Start_LED= P0^0;//单片机开始工作指示灯sbit Power_Down_LED_INT0= P0^1;//INT0口掉电唤醒指示灯sbit N_Power_Down_LED_INT0 = P0^2;//INT0口没有唤醒指示灯sbit Normal_Work_LED= P0^3;// 正常工作指示灯sbit Power_Down_Wakeup_INT0= P3^2;//外中断唤醒输入口void Delay_ms( uint time );void Normal_work(void);void Intp_init(void);void After_Powr_Down(void);//***********************************////软件延时////***********************************//void Delay_ms( uint time ){uint t;// 延时时间= (time*1003+16)us while(time--){for( t = 0; t < 82; t++ );}}//***********************************////正常工作指示//***********************************//void Normal_work(void){Normal_Work_LED = 1;Delay_ms(500);Normal_Work_LED = 0;Delay_ms(500);}void After_Power_Down(void){uchar i ;for( i = 0; i < 100; i++ ){P0 = 0x0f;Delay_ms(500);P0 = 0x00;Delay_ms(500);}}//***********************************////中断初始化////***********************************//void Intp_init(void){IT0 = 0;// 外部中断源0 为低电平触发EX0 = 1;//允许外部中断EA = 1;//开总中断}//***********************************////主程序////***********************************//void main(){uchar j = 0;uchar wakeup_counter = 0;//记录掉电次数P0 = 0x00;Chip_Start_LED= 1;// 单片机开始工作Intp_init();// 外中断 0 初始化while(1){P2 = wakeup_counter;wakeup_counter++;for( j = 0; j < 250; j++ ){Normal_work();// 系统正常工作指示}Power_Down_Flag = 1; //系统开始进入掉电状态PCON = 0x02;_nop_();_nop_();_nop_();_nop_();After_Power_Down();// 掉电唤醒后}}//**********************************////中断服务//**********************************//void INT0_Service(void) interrupt 0{if( Power_Down_Flag )//掉电唤醒状态指示{Power_Down_Flag= 0;Power_Down_LED_INT0= 1;while( Power_Down_Wakeup_INT0 == 0 ){_nop_();//等待高电平}Power_Down_LED_INT0= 0;}else// 未掉电状态{N_Power_Down_LED_INT0 = 1;// 不是掉电唤醒指示while( Power_Down_Wakeup_INT0 == 0 ){_nop_();}N_Power_Down_LED_INT0 = 0;}}//****************************************************************************////STC12C5A60S2A/D 转换模块//////说明:STC12C5A60S2 单片机有 8 路 10位高速 AD 转换器 ,P1^0-P1^7////涉及寄存器: P1ASF( 模拟功能控制寄存器)、 ADC_CONTR(ADC控制寄存器 )//ADC_RES 、 ADC_RESL( 转换结果寄存器 )////注意 :1、初次打开内部 A/D模拟电源需适当延时等内部模拟电源稳定后,再启动A/D 转换//启动 A/D 后 ,在转换结束前不改变任何I/O 口的状态 ,有利于高精度A/D 转换//若能将定时器 /串行 /中断系统关闭更好。
STC12C5A60S2系列单片机特殊功能寄存器名称及映像

**** ****B
WT0 0000 *000B P5.0 **** 1111B
**** 0000B **** 0000B - 00** ****B SPR0 0000 0100B 0000 0000B P 0000 0000B CCF0 00** **00B ECF 0*** 0000B ECCF0 *000 0000B
IAP_ADDR H
ISP/IAP高8位地址寄存 器
C3H
IAP_ADDR L
ISP/IAP低8位地址寄存 器
C4H
IAP_CMD ISP/IAP命令寄存器 C5H -
-
-
-
-
- MS1
IAP_TRIG
ISP/IAP命令触发寄存 器
C6H
IAP_CONT R
ISP/IAP控制寄存器
C7H IAPEN
BRT
独立波特率发生器寄存 器
9CH
P1ASF P2
P1 Analog Function Configure register
Port 2
9DH
P17AS F
P16AS F
P15AS F
P14AS F
P13AS F
P12AS F
P11AS F
A0H P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1
SWBS
SWRST
CMD_F AIL
-
WT2 WT1
P5
Port 5
C8H -
-
-
- P5.3 P5.2 P5.1
P5M1 P5口模式配置寄存器1 C9H
P5M0 P5口模式配置寄存器0 CAH
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
复位值
0000 xxxx 0000 0000 xxxx xxxx 0000 0000 0000 0011 0000 0000 00xx 0xxx x000 x000 00xx 0000B xx00B 0000B 0000B xx00B xx00B 0000B 0000B 0000B 0000B 0000B 0000B xx00B 0000B 0000B 0000B 0000B
中断相关寄存器
符号 描述 地址 7 6 5 位地址及符号 4 3 2 1
ET0 ESPI PT0 PT0H PSPI PSPIH IE0 EXTRA0 PWM0 PWM1 -
0
EX0 ES2 PX0 PX0H PS2 PS2H IT0 S1BRS RI IDL T0CLKO CHS0 CCF0 ECF ECCF0 ECCF1 -
详细介绍
ELVD EADC ES ET1 EX1 ET0 EX0 1 允许低压检测 1 允许 AD 转换中 1 允许串行口 1 1 允许 T1 溢出中 1 允许外部中断 1 允许 T0 溢出中 1 允许外部中断 中断总控位 ̅̅̅̅̅̅̅,0 禁止 ̅̅̅̅̅̅̅,0 禁止 中断,0 禁止 断,0 禁止 中断,0 禁止 断,0 禁止 ������������������1 断,0 禁止 ������������������0 ESPI ES2 SPI 中断允许 串行口 2 中断允许 位,1 允许 位,1 允许 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 见(三) AUXR T0x12 T1x12 TART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS 见(二) SCON SM0/FE SM1 SM2 REN TB8 RB8 TI RI 串行口控制 与中断无关 与中断无关 与中断无关 与中断无关 与中断无关 与中断无关 发送中断标志位 接收中断标志 PCON SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 电源控制 与中断无关 与中断无关 低压请求标志位 与中断无关 与中断无关 与中断无关 与中断无关 与中断无关 WAKE_CLKO PCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE BRTCLKO T1CLKO T0CLKO ADC_CONTR ADC_power SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 ADC 转换结束标 志位,当转换完 为 1 时开始转 为 1 时打开 ADC 与中断无关 与中断无关 成后 ADC_FLAG 换,结束后自动 与中断无关 与中断无关 与中断无关 电源,为 0 关闭 =1,用户软件清 清 0. 零. CCON CF CR CCF1 CCF0 CMOD CIDL CPS2 CPS1 CPS0 ECF
PWM0 PWM1 PT0 PT0H PSPI PSPIH
ECCF0 ECCF1 PX0 PX0H PS2 PS2H
中断设计寄存器
中断源 ̅̅̅̅̅̅̅ ������������������0 T0 ̅̅̅̅̅̅̅ ������������������1 T1 UART1 ADC LVD PCA UART2 SPI 中断请求标志 IE0 TF0 IE1 TF1 RI、TI ADC_FLAG LVDF CF+CCF0+CCF1 S2T1+S2RI SPIF EADC、EA ELVD、EA ECF+ECCF0+ECCF1、EA ES2、EA ESPI、EA 中断允许控制位 EX0、EA ET0、EA EX1、EA ET1、EA 优先级 0 1 2 3 4 5 6 7 8 9 发送接收完成 触发行为 IT0=1 下降沿,0 低电平 定时器溢出 IT1=1 下降沿,0 低电平 定时器溢出 发送接收完成 A/D 转换完成 电源下降或 LVD 检测电压
备注
1 允许下降沿 1 允许下降 1 允许 PCA 置 T1 中断标 沿置 R1,也 唤醒 志,也允许 T1 允许 RXD 唤 powerdown 脚唤醒 醒 ,0 禁止 powerdown。0 powerdown 禁止
1 允许下降沿 置 T1 中断标 志,也允许 T1 脚唤醒 powerdown。0 禁止
允许将 P3.4,T0 脚 允许将 P3.5,T1 脚 配置为 T0 的时钟输 配置为 T1 的时钟输 出(T0 只能工作与 出 (T1 只能工作与模 模式 2(8 位自动重 式 2) CLKOUT1=T1 溢 装初值)) 出 率 /2,1T 模 式 时 CLKOUT1=T1 溢出率 CLKOUT1=SYSclk/(2 /2,1T 模式时 56-TH1)/2,12T 时 CLKOUT1=SYSclk/(2 CLKOUT1=SYSclk/12 56-TH1)/2,12T 时 /(256-TH1)/2. CLKOUT1=SYSclk/12 /(256-TH1)/2.
88H
7 TF1 溢出标志
6 5 4 3 2 1 T1x12 TART_M0x6 BRTR S2SMOD BRTx12 EXTRAM 是否分频 独立波特率控制位 定时器 0 工作于定时模式时是否 12 分频(8051 速度) ,1 分频,0 不分频、见上图 定时器 1 工作于定时模式时是否 12 分频(8051 速度) ,1 分频,0 不分频、见上图 当 T1 用作波特率发生器时,T1x12 决定串口是否分频即 12T 还是 1T 串口模式 0 的通信设置位、为 0,12 分频。为 1,2 分频。 独立波特率发生器控制位 0,UART2 的波特率不加倍,1 加倍 0 独立波特率发生器每 12 个时钟计数一次,1 每个时钟计数一次 内部扩展的 102 字节扩展 ram 是否允许使用,0 允许,1 禁止 0,定时器 1 作为串口 1 的波特率发生器,1,使用独立波特率发生器,T1 独立不使用。 6 5 4 3 2 1 TR1 TF0 TR0 IE1 IT1 IE0 运行控制 溢出标志 运行控制 中断标志 触发方式 中断标志 定时器控制 中断控制
定时计数器部分(包含中断触发方式(三) )
㈠
TMOD 地址 89H 定时器名 GATE ̅ C/������ 7 GATE 6 ̅ C/������ T1 5 M1 4 M0 3 GATE 2 ̅ C/������ 1 M1 0 M0 T0 ̅̅̅̅̅̅̅引脚与 TRx 相与控制定时计数器是否开始计数 当 GATE=1 时,������������������������ 计数和定时切换位,置 1 时从 Tx(T1/P3.5、T0/P3.4)计数。 功能 13 位计数器 16 位计数器 8 位自动重装模式 T1 无效(停止计数)、T0(TH0 作为 8 位定时计数器,由定时器 1 控制、TL0 作为 8 位定时计数器由定时器 0 控制)
M1、M0
M1 0 0 1 1
M0 模式 0 模式 0 1 模式 1 0 模式 2 1 模式 3
模式 0
模式 1
模式 2
模式 3
㈡
AUXR
7 T0x12
T0x12 T1x12 备注 TART_M0x6 BRTR S2SMOD 独立 BRTx12 波特 率发 EXTRAM 生器 S1BRS TCON
㈢
1 允许将 P1.0 配 置为独立波特发 生器的时钟输出 CLKOUT2,频率= BRT 溢出率/2,当 1 允许 P4.6 低 BRT 工作在 1T 模 压检测唤醒 式时,频率= CPU,0 禁止 SYSclk/(256BRT)/2,12T,时 频率=SYSclk/12/ (256-BRT)/2,12T 时。
触发方式控制 触发方式控制位, 位,等于 0 时, 等于 0 时,低电平 低电平触发(需 中断标志位。外部 ̅̅̅̅̅̅̅请求标 触发(需要持续低 要持续低电平响 中断������������������0 电平响应中断后要 应中断后要翻转 志,当中断响应后 翻转变高) ,等于 1 变高) ,等于 1 时 硬件清 0。 时下降沿引起中断 下降沿引起中断 标志位 标志位 2 BRTCLKO 时钟输出 1 T1CLKO 定时器时钟输出 时钟输出 0 T0CLKO 定时器时钟输出
EA ELVD EADC ES ET1 EX1 PPCA PLVD PADC PS PT1 PX1 PPCAH PLVDH PADCH PSH PT1H PX1H -TF1 TR1 TF0 TR0 IE1 IT1 T0x12 T1x12 TART_M0x6 BRTR S2SMOD BRTx12 SM0/FE SM1 SM2 REN TB8 RB8 SMOD SMOD0 LVDF POF GF1 GF0 PCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE BRTCLKO ADC_power SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CF CR CIDL CPS2 CPS1 ECOM0 CAPP0 CAPN0 MAT0 TOG0 ECOM1 CAPP1 CAPN1 MAT1 TOG1 SPIF WCOL -
IE 中断允许控制 A8H IE2 中断允许控制 2 AFH IP 中断优先级(低) B8H 中断 IPH 中断优先级(高) B7H 优先 IP2 2 中断优先级(低) B5H 级 IP2H 2 中断优先级(高) B6H TCON 定时计数控制 Timer 88H AUXR 辅助寄存器 Auxiliary 8EH SCON 串行口控制 Serial 98H PCON 电源控制 power 87H WAKE_CLKO 时钟输出低压唤醒 8FH ADC_CONTR ADC 控制 BCH CCON PCA 控制寄存器 D8H CMOD PCA 模式寄存器 D9H CCAPM0 PCA 模块 0 模式寄存器 DAH CCAPM1 PCA 模块 1 模式寄存器 DBH SPSTAT SPI 状态寄存器 CDH IE 中断允许寄 存器 IE2 中断允许寄 存器 2 TCON EA