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
STC12C5A16S2 NTC热敏电阻 温度定时控制
{
LEDshow[4] = Rtime/60;
//剩余分钟
LEDshow[5] = Rtime%60/10; //剩余秒数
LEDshow[6] = Rtime%60%10;
switch(LEDnumber)
{
case 4:A0=0;A1=0;A2=1;LEDnumber++;P3=LEDdata[LEDshow[4]];break;
unsigned char LEDshow[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //LED 消影 unsigned char LEDnumber=0; //动态扫描索引
sfr ADC_CONTR = 0xBC; sfr ADC_RES = 0xBD; sfr ADC_LOW2 = 0xBE; sfr P1ASF = 0x9D;
case 2:
if((uiTimeCnt>=const_time_level)&&(temp>=-45 && temp <= -35)) //时间到,同时再次确认低温 温度范围 {
ET0=0; //禁止定时中断 uiTimeCnt=0; //时间计数器清零 ET0=1; //开启定时中断 RLY_dr=1; //让 RLY 开 ucRLYStep=4; //切换到下一个步骤 } break;
initial_peripheral(); while(1) { RLY_Control(); } }
void RLY_Control() // RLY_Control 应用程序 { switch(ucRLYStep) {
case 5: {
STC12C5A60S2
STC12C5A60S2
现代化进程加快,越来越多的改成建筑拔地而起,电梯成了人们主要的上楼代步工具,电梯安全就尤为重要,我们应该重视电梯安全来有效保障我们的生命财产安全。
目前我们的电梯上配备的保护装置有限速系统、行程极限系统、缓冲器系统、制动器系统。
文章是通过加速度传感器和红外测距传感器,计算和测量出电梯的加速度和速度,通过两个指标监测电梯的运行状态,在发生故障时通过电机控制液压系统使电梯制动,有效保障乘客的生命财产安全。
系统的总体框图如图1 所示,系统以STC12C5A60S2-351 单片机作为控制器,红外测距传感器和加速传感器将测得数据发送到单片机中,红外测距传感器测量电梯的速度,通过单片机进行AD 转换后,根据时间差算出电梯此时的速度,加速度传感器可以测量电梯此时的重力加速度,单片机判断轿厢加速度和速度是否超过预设值,假设超过预设值,单片机会通过L9110 电机模块来控制电机的正反转,从而控制液压系统转达到制动效果。
图1 系统总体框图。
STC 12C5A60S2芯片的实验板报告
目录第一章实习的目的及意义 (1)1.1生产实习的目的 (1)1.2生产实习的意义 (1)1.3生产实习的重要性 (1)第二章单片机的最小系统 (2)2.1部分芯片介绍 (2)2.1.1 AT89S52芯片 (2)2.1.2 MAX232芯片 (3)2.1.3 LCD1602液晶显示器 (4)2.1.4 DS12887芯片 (5)2.1.5 74HC573 (7)第三章单片机电路板焊接 (8)3.1 单片机焊接 (8)3.2焊接元件清单 (8)3.3 焊接注意事项 (10)第四章 C51语言的应用程序 (12)4.1 Keil uVision的使用 (12)4.2 流水灯程序 (12)4.3 流水灯高地位循环闪烁 (13)4.4 AD转换测温度 (15)4.5 按键控制1602 (21)4.6 调试中出现的问题 (28)第五章单片机开发板的应用 (29)5.1 应用程序 (29)第六章实习体会 (33)第一章实习的目的及意义1.1生产实习的目的此次生产实习的目的是在理论学习的基础上,通过完成一个设计51单片机的多种资源应用并具有综合功能的最小系统目标板的设计与编程应用。
1.2生产实习的意义将理论知识与实际应用相结合,从实际出发分析问题、研究问题和解决问题,将单片机的知识系统化,并能对电子电路、电子元器件、印制电路板等方面的知识有进一步的加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机的应用系统的开发设计打下一定基础。
1.3生产实习的重要性生产实习是电子信息工程专业教学计划的一个重要部分,是培养学生理论学习与实践相结合的重要实践性教学环节。
通过生产实习使学生了解实习单位的工作方式和工作流程;对以后大单片机课程设计,帝业设计做基础,了解一个开发板的开发制作的整个过程以及元器件的采购;对生产现场、生产过程中的电子信息设备、计算机设备的应用状况有较为深刻的认识,掌握常规电子信息设备的使用维护方法;在实践中进一步加强专业教育,了解本专业工程技术岗位和生产劳动岗位的工作情况和工作内容,培养团队精神和吃苦耐劳的精神;同时可以使学生学到企业的管理经验和工人师傅的艰苦创业精神,激励学生奋发向上的开拓精神。
单片机STC12C5A60S2知识讲解
单片机STC12C5A60S2在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH工艺的,如STC12C5A60S2单片机内部就自带高达60K FLASH ROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。
而且STC系列单片机支持串口程序烧写。
显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。
写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。
重要的一点STC12C5A60S2目前的售价与传统51差不多,市场供应也很充足。
是一款高性价比的单片机STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
1.增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051;2.工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机);3.工作频率范围:0 - 35MHz,相当于普通8051的 0~420MHz;4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K 字节;5.片上集成1280字节RAM;6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma;7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM);9. 看门狗;10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);11.外部掉电检测电路:在P4.6口有一个低压门槛比较器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%;12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内) 1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V单片机为:11MHz~15.5MHz,3.3V 单片机为:8MHz~12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准;13.共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器再加上2路PCA模块可再实现2个16位定时器;14. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟;15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ), CCP1/P1.4 (也可通过寄存器设置到P4.3);16. PWM(2路)/PCA(可编程计数器阵列,2路):——也可用来当2路D/A使用——也可用来再实现2个定时器——也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);17.A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口;19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3);20.工作温度范围:-40 - +85℃(工业级) / 0 - 75℃(商业级)21.封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接74HC164/165/595(均可级联)来扩展I/O口, 还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。
STC12单片机精确定时
STC12C5A60S2单片机软件延时分类全部都是本人通过示波器反复测量得到1~255倍内精确延时。
误差绝对不会超过5%。
仅限STC12系列的单片机,如需传统51单片机软件延时,请自己计算。
本延时仅限运用在stc12系列单片机上,仅限11.0592mhz。
100us以上的延时可以根据晶振的倍数扩大或缩小循环倍数,以得到相应的延时。
100us以下需改动需要重新测算。
void delay1s(unsigned char n){unsigned char i,j,k;for(;n>0;n--)for(i=83;i>0;i--)for(j=202;j>0;j--)for(k=162;k>0;k--);}void delay500ms(unsigned char n){unsigned char i,j,k;for(;n>0;n--)for(i=83;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}void delay100ms(unsigned char n){unsigned char i,j,k;for(;n>0;n--)for(i=83;i>0;i--)for(j=40;j>0;j--)for(k=82;k>0;k--);}void delay10ms(unsigned char n){unsigned char i,k;for(;n>0;n--)for(i=169;i>0;i--)for(k=162;k>0;k--);}void delay1ms(unsigned char n) {unsigned char i,k;for(;n>0;n--)for(i=167;i>0;i--)for(k=15;k>0;k--);}void delay140us(unsigned char n) {unsigned char i,k;for(;n>0;n--)for(i=17;i>0;i--)for(k=21;k>0;k--);}void delay100us(unsigned char n) {unsigned char i,k;for(;n>0;n--)for(i=17;i>0;i--)for(k=15;k>0;k--);}void delay10us(){unsigned char i;for(i=23;i>0;i--);}void delay5us(){unsigned char i;for(i=9;i>0;i--);}#define delay1us(); {_nop_();_nop_();_nop_();_nop_();};。
STC12C5A60S2头文件函数程序
//--------------------------------------------------------------------------------//新一代1T 8051系列单片机内核特殊功能寄存器C51 Core SFRs// 7 6 5 4 3 2 1 0 Reset Valuesfr ACC = 0xE0; //Accumulator 0000,0000sfr B = 0xF0; //B Register 0000,0000sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OV F1 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 2 1 0 Reset Valuesfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000// 辅助寄存器7 6 5 4 3 2 1 0 Reset Valuesfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM 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。
STC12C5A60S2内部PWM模块程序
//新一代1T 8051系列单片机PCA/PWM特殊功能寄存器
// 7 6 5 4 3 2 1 0 Reset Value
sfr CCON = 0xD8; //PCA控制寄存器。CF CR - - - - CCF1 CCF0 00xx,xx00
//-----------------------
STC12C5A60S2内部PWM模块程序
/**************************************************************
*******************************
说明:单片机的PCA_PWM使用,60S2只有两个PWM输出,分别是1.3
// 1 1 1 0 0 1 1 0x73 PWM输出由低变高或由高变低都可产生中断
//-----------------------
sfrCCAP0L=0xEA;//PCA模块0的捕捉/比较寄存器低8位。0的捕捉/比较寄存器高8位。
0000,0000
sfrCCAP1L=0xEB;//PCA模块1的捕捉/比较寄存器低8位。
0000,0000
sfrCCAP1H=0xFB;//PCA模块1的捕捉/比较寄存器高8位。
0000,0000
//-----------------------
// 7 6 5 4 3 2 1 0 Reset Value
sfrPCA_PWM0=0xF2;//PCA模块0PWM寄存器。------EPC0H
EPC0L xxxx,xx00
sfrPCA_PWM1=0xF3;//PCA模块1PWM寄存器。------EPC1H
STC12C5A60S2初始化KEILC程序
STC12C5A60S2初始化KEILC程序STC12C5A60S2初始化KEIL C 程序//独立频率输出,PCA定时器串口独立波特率串口接收,发送// ICL7135 AD中断测量;void MCU_INT(void) //初始化{// 定时器0 icl7135 AD 外部中断0TMOD = 0x29; // 定时器T1工作于模式1 ,定时器T0工作于模式1 由INT0控制定时器T0的启停TR0=1; //;启动定时器T0IT0=1; //下沿INT0中断EX0=1; //外部中断0允许TR1=1;EA = 1;// t1独立输出频率AUXR=0x40; //定时器1为8051的12倍WAKE_CLKO=0x22; //t1独立输出频率TH1=0xfa; // 1T clkout1=(fosc/2)/(256-TH0) 3m/2/6=250k // //PCA定时器寄存器值,50ms,6MCCON=0x00;//CL=0x00;CH=0x00; // Reset PCA base timerCMOD= 0x10;//中断使能系统时钟fosc/12//time(sec) * Fosc / 12, for 50ms @ 3MHz, T_Value = 0.05 * 3000000 / 12 = 12500T_Value0=12500;T_PCA0 = T_Value0;CCAP0L = T_PCA0;CCAP0H = T_PCA0 >> 8; //Initial PCA module-0T_PCA0 += T_Value0;CCAPM0=0x49; //软件定时器,使能中断,pca模块0CR=1; //启动pca// 串口1 独立波特率发生器BRTSCON=0x50;PCON=0X80;BRT= 0XF3;AUXR|=0x11; // 允许独立波特率独立波特率发生器作为串口1 //说明书49页ES=1;//看门独WDT_CONTR=0x3c; //说明书95页fosc=3M 32*393216/3000000 = 4.19s}void Init0 (void ) interrupt 0 using 1 //外部中断0 //定时器0中断{uchar i;if(ADOVER==0){ i++;TR0 = 0; //定时器0关EX0 = 0; //关中断if(i>2){ADHWHEEL=TH0;ADLWHEEL=TL0;ADOVER=1;i=0;}TMOD = 0x29;TR0=1; //;启动定时器T1IT0=1; //下沿INT0中断EX0=1; //外部中断0允许TH0=0;TL0=0;}}void PCA_INT (void ) interrupt 7 using 2 //PCA 定时器50ms {CCF0=0;CCAP0L = T_PCA0;CCAP0H = T_PCA0 >> 8;T_PCA0 += T_Value0;led2=~led2;}void Send_UART(uchar senddata) //独立波特率发生{ES=0;TI=0;SBUF=senddata;while(TI==0);TI=0;ES=1;}void UART_INT(void) interrupt 4 using 3 //串口接收中断{ uchar i;if(RI==1){i=SBUF;Send_UART(i);RI=0;} }。
高性能单时钟指令周期STC12C5A60S2系列单片机简介
高性能单时钟指令周期STC12C5A60S2系列单片机简介高性能单时钟指令周期STC12C5A60S2系列单片机简介STC12C5A60S2/AD/PWM系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,即25万次/秒),针对电机控制,强干扰场合。
1.增强型8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统80512.工作电压:STC12C5A60S2系列工作电压:5.5V - 3.5V (5V单片机)STC12LE5A60S2系列工作电压:3.6V - 2.2V (3V单片机)3.工作频率范围:0~35MHz,相当于普通8051的0~420MHz4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K 字节......5.片上集成1280字节RAM6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA7. ISP (在系统可编程)/ IAP (在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM)9.看门狗10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地)11.外部掉电检测电路:在P4. 6口有一个低压门槛比较器5V单片机为1.33V,误差为±5%,3.3V单片机为1.31V,误差为±3%12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为±5%到±10%以内)用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟常温下内部R/C振荡器频率为:5. 0V单片机为:11MHz~17MHz3. 3V单片机为:8MHz~12MHz 精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准13.共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器14. 3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由n的溢出在P3. 5/T1输出时钟,独立波特率发生器可以在P1. 0口输出时钟15.夕卜部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3 (也可通过寄存器设置到P4. 2), CCP1/P1.4他可通过寄存器设置到P4. 3)16. PWM(2路)/ PCA (可编程计数器阵列,2路)---也可用来当2路D/A使用 ---也可用来再实现2个定时器---也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持)17. A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3 (可通过寄存器设置到P4.3)20.工作温度范围:-40 ~ +85 °C (工业级)/ 0 ~ 75 °C (商业级)21.封装:LQFP-48, LQFP-44, PDIP-40, PLCC-44, QFN-40I/O 口不够时,可用2到3根普通I/O 口线外接74HC164/165/595 (均可级联)来扩展I/O 口,还可用A/D做按键扫描来节省I/O 口,或用双CPU,三线通信,还多了串口。
STC12C5A60S2单片机
STC12C5A60S2单片机寄存器头文件STC12C5A.H内容**************** 8051内核特殊功能寄存器******************/sfr ACC=0xE0;累//加器sfr B =0xF0;//B寄存器sfr PSW = 0xD0;//程序状态字寄存器sbit CY = PSW^7;//进位标志位sbit AC = PSW^6;//辅助进位标志位sbit F0 = PSW^5;//用户标志位 0sbit RS1 = PSW^4;//工作寄存器组选择控制位sbit RS0 = PSW^3;//工作寄存器组选择控制位sbit OV = PSW^2;//溢出标志位sbit F1 = PSW^1;//用户标志位 1sbit P=PSW^0;//奇偶标志位sfr SP= 0x81;//堆栈指针寄存器sfr DPL=0x82;//数据指针 0 低字节sfr DPH=0x83;//数据指针0 高字节/****************系统管理特殊功能寄存器******************/sfr PCON = 0x87;//电源控制寄存器sfr AUXR = 0x8E;辅//助寄存器sfr AUXR1 = 0xA2;//辅助寄存器 1sfr WAKE_CLKO = 0x8F;时//钟输出和唤醒控制寄存器sfr CLK_DIV = 0x97;//时钟分频控制寄存器sfr BUS_SPEED = 0xA1;总//线速度控制寄存器/****************中断控制特殊功能寄存器******************/sfr IE=0xA8;//中断允许寄存器sbit EA=IE^7;//总中断允许位sbit ELVD = IE^6;//低电压检测中断控制位sbit EADC = IE^5;//ADC中断允许控制位sbit ES=IE^4;//串口 1 中断允许位sbit ET1= IE^3;//定时器 1溢出中断允许位sbit EX1=IE^2;//外部中断 1 允许位sbit ET0= IE^1;//定时器 0溢出中断允许位sbit EX0 =IE^0;//外部中断 0允许位sfr IE2=0xAF;//中断允许寄存器 2sfr IP=0xB8;//中断优先级寄存器sbit PPCA = IP^7;//PCA中断优先级控制位sbit PLVD= IP^6;//低电压检测中断优先级控制位sbit PADC = IP^5;// ADC中断优先级控制位sbit PS= IP^4;//串口 1 中断优先级控制位sbit PT1= IP^3;//定时器 1中断优先级控制位sbit PX1= IP^2;//外部中断 1 优先级控制位sbit PT0 =IP^1;//定时器 0中断优先级控制位sbit PX0=IP^0;//外部中断0 优先级控制位sfr IPH =0xB7;//中断优先级高位寄存器sfr IP2=0xB5;//第二中断优先级寄存器低字节sfr IPH2 =0xB6;//第二中断优先级寄存器高字节/**************** I/O口特殊功能寄存器 ******************/sfr P0=0x80;//P0口寄存器sfr P0M1=0x93;//P0口工作模式寄存器1sfr P0M0=0x94;//P0口工作模式寄存器0sfr P1=0x90;//P1口寄存器sfr P1M1=0x91;//P1口工作模式寄存器1sfr P1M0=0x92;//P1口工作模式寄存器0sfr P1ASF = 0x9D;//P1口模拟量功能设置寄存器sfr P2=0xA0;//P2口寄存器sfr P2M1=0x95;//P2口工作模式寄存器1sfr P2M0=0x96;//P2口工作模式寄存器0sfr P3=0xB0;//P3口寄存器sbit T1= P3^5;//定时器 1 外部输入sbit T0 =P3^4;//定时器 0外部输入sbit INT1=P3^3;//外部中断 1sbit INT0=P3^2;//外部中断 0sbit TXD=P3^1;//串行输入通道sbit RXD=P3^0;//串行输出通道sfr P3M1 = 0XB1;//P3口工作模式寄存器1sfr P3M0 = 0xB2;//P3口工作模式寄存器0sfr P4=0xC0;//P4口寄存器sfr P4M1 = 0xB3;//P4口工作模式寄存器1sfr P4M0 = 0xB4;//P4口工作模式寄存器0sfr P4SW = 0xBB;//P4口功能切换寄存器sfr P5=0xC8;//P5口(只有 P5.3、P5.2、 P5.1、P5.0)sfr P5M1 = 0xC9;//P5口工作模式寄存器1sfr P5M0 = 0xCA;//P5口工作模式寄存器0/****************定时器特殊功能寄存器 ******************/sfr TCON= 0x88;//定时 / 计数控制寄存器sbit TF1 = TCON^7;//定时器 1 溢出中断标志sbit TR1 = TCON^6;//定时器 1 运行控制位sbit TF0 = TCON^5;//定时器 0 溢出中断标志sbit TR0 = TCON^4;//定时器 0 运行控制位sbit IE1=TCON^3;//外部中断 1 请求标志sbit IT1=TCON^2;//选择外部中断请求 1 为边沿触发方式的控制位sbit IE0= TCON^1;//外部中断 0 请求标志sbit IT0= TCON^0;//选择外部中断请求 0 为边沿触发方式的控制位sfr TMOD= 0x89;//定时 / 计数模式控制寄存器sfr TL0 =0x8A;//定时 / 计数器 0 低字节sfr TH0=0x8C;//定时 / 计数器 0 高字节sfr TL1=0x8B;//定时 / 计数器 1 低字节sfr TH1=0x8D;//定时 / 计数器 1 高字节/****************串行口特殊功能寄存器 ******************/sfr SCON = 0x98;//串行口控制寄存器sbit SM0 = SCON^7;//串行口工作方式设定控制位0(与 FE 功能复用)sbit FE = SCON^7;sbit SM1 = SCON^6;//串行口工作方式设定控制位1sbit SM2 = SCON^5;//UART的 SM2 设定sbit REN = SCON^4;//接收允许位sbit TB8 = SCON^3;//发送数据的第九位sbit RB8 = SCON^2;//接收数据的第九位sbit TI=SCON^1;//发送中断标志sbit RI= SCON^0;//接收中断标志sfr SBUF= 0x99;//串口数据缓冲器sfr SADEN = 0xB9;//从机地址掩码寄存器sfr SADDR = 0xA9;//从机地址寄存器sfr S2CON = 0x9A;//串行口 2 控制寄存器sfr S2BUF=0x9B;//串行口 2 数据缓冲器sfr BRT =0x9C;独//立波特率定时器/****************看门狗定时器寄存器 ******************/sfr WDT_CONTR = 0xC1; //看门狗定时器控制寄存器/******************** PCA寄存器 **********************/sfr CCON = 0xD8;//PCA控制寄存器sbit CF = CCON^7;//PCA计数器溢出( CH, CL由 FFFF变为 0000H)标志sbit CR = CCON^6;//PCA计数器计数允许控制位sbit CCF1 = CCON^1; //PCA模块 1 中断标志sbit CCF0 = CCON^0; //PCA模块 0 中断标志sfr CMOD =0xD9;//PCA工作模式寄存器sfr CL =0xE9;//PCA计数器低8 位sfr CH =0xF9;//PCA计数器高8 位sfr CCAPM0 = 0xDA;//PCA模块 0 的工作模式寄存器sfr CCAPM1 = 0xDB;//PCA模块 1 的工作模式寄存器sfr CCAP0L = 0xEA;//PCA模块 0 捕捉 / 比较寄存器低8 位sfr CCAP0H = 0xFA;//PCA模块 0 捕捉 / 比较寄存器高8 位sfr CCAP1L = 0xEB;//PCA模块 1 捕捉 / 比较寄存器低8 位sfr CCAP1H = 0xFB;//PCA模块 1 捕捉 / 比较寄存器高8 位sfr PCA_PWM0 = 0xF2;//PCA模块 0 PWM 寄存器sfr PCA_PWM1 = 0xF3;//PCA模块 1 PWM 寄存器/******************** ADC寄存器 **********************/sfr ADC_CONTR = 0xBC;//ADC控制寄存器,本寄存器不支持位操作sfr ADC_RES = 0xBD;//ADC转换结果高8位寄存器sfr ADC_RESL = 0xBE;//ADC转换结果低 2 位寄存器/******************** SPI寄存器**********************/sfr SPSTAT = 0xCD;//SPI状态寄存器,本寄存器不支持位操作sfr SPCTL = 0xCE;//SPI控制寄存器sfr SPDAT = 0xCF;//SPI数据寄存器/***************** ISP_IAR_EEPROM寄存器*******************/ sfr IAP_DATA = 0xC2;//ISP/IAP Flash数据寄存器sfr IAP_ADDRH = 0xC3;// ISP/IAP Flash地址高字节sfr IAP_ADDRL = 0xC4;// ISP/IAP Flash地址低字节sfr IAP_CMD = 0xC5;// ISP/IAP Flash命令寄存器sfr IAP_TRIG = 0xC6;// ISP/IAP Flash命令触发器sfr IAP_CONTR = 0xC7;//ISP/IAR控制寄存器。
- 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