STC5A60S2_时钟输出

合集下载

STC12C5A60S2定时器,STC12C5A60S2定时器程序

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 系列单片机器件手册 说明书

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编程

ADC#include<STC12C5A60S2.H>#include<intrins.h>//51基本运算(包括_nop_空函数)#include"ad.h"#include"uart.h"unsigned char code dispcode[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};void AD_Configurate (uchar ChannelNum){uchar AD_FLAG=0; //存储A/D转换标志ChannelNum &= 0x0f; //选择ADC的个接口中的一个(0111 清高位)ADC_CONTR = 0x40; //ADC转换的速度(XX0 0000 其中XX控制速度,请根据数据手册设置)_nop_();ADC_CONTR |= ChannelNum; //选择A/D当前通道_nop_();ADC_CONTR |= 0x80; //启动A/D电源delay(1); //使输入电压达到稳定(ms即可)}unsigned int ReadADV alue (void){unsigned char AD_FLAG=0; //存储A/D转换标志ADC_CONTR |= 0x08; //启动A/D转换(1000 令ADCS = 1)_nop_();_nop_();_nop_();_nop_();while (AD_FLAG ==0)//等待A/D转换结束{AD_FLAG = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否}ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 关闭A/D转换,return(ADC_RES*4+ADC_RESL);//返回A/D转换结果(位ADC数据高位在ADC_RES中,低位在ADC_RESL中)}void DigitalTube(unsigned long number){P2=0xef; //1110 1111P0=dispcode[number%10]; //显示number的个位delay(7);P2=0xdf; //1101 1111P0=(dispcode[number/10%10]); //显示number的十位delay(7);P2=0xbf; //1011 1111P0=(dispcode[number/100%10]); //显示number的百位delay(7);P2=0x7f; //1011 1111P0=(dispcode[number/1000]); //显示number的千位delay(7);}void delay (unsigned int a ){unsigned int i;while (--a != 0){for (i = 0; i < 600; i++);}}void GPIO_init (void){P2M0 = 0x0F; //0000 1111 //I/O接口的设置P2M1 = 0x00; //0000 0000 //I/O接口的设置P1M1 = 0x01; //P1.0作为ad功能}PWM#include<STC12C5A60S2.H>#include"pwm.h"#include"uart.h"unsigned int xdata FirstData=0; //上升沿捕捉数据unsigned int xdata SeconedData=0; //下降沿捕捉数据高电平时间=SeconedData-FirstData unsigned int xdata HighLevel=0; // 保存被测波形高电平时间对于测方波即使半个周期//采用半个周期的测法主要是提高可被测波形的频率范围unsigned int xdata Frequency=0; // 保存频率的变量bit Capture_over = 0; //捕获完成标志位void pwm_init(void){CMOD=0x80; //0000 0010 PCA工作模式寄存器系统时钟/12 计数器溢出中断CF CCAP0H =(CCAP0L = 254); //PCA捕捉/比较寄存器127 高低点CCAPM0=0x42; //0100 0010// CCAP1H =(CCAP1L = 0x7f);// CCAPM1=0x42;CCAPM1 = 0x21;//16位捕获模式,上升沿触打开捕获中断CCF1CCAP1L = 0x00;CCAP1H = 0x00;EA = 1;CCON=0x40; //0100 0000 PCA控制寄存器CR=1 启动PCA计数器阵列计数}void SetPwm0DutyCycle(unsigned int x) //占空比设置函数{unsigned int h=0,l=0;l=x&0xff;h=x>>8;CCAP0L=l;CCAP0H=h; //设置比较值}void PCA_Interrupt(void) interrupt 7{if (CCF1) //PCA模块中断{CCF1 = 0;if(FirstData == 0) // 上升沿中断{FirstData = CCAP1H; //获得捕捉数据的高位//高位<<8+低位构成位整数FirstData = (FirstData << 8) + CCAP1L;CCAPM1 = 0x11;// 下降沿捕获}else// 下降沿中断{CCF1 = 0; // 清CCF中断标志SeconedData = CCAP1H; //获得捕捉数据的高位//高位<<8+低位构成位整数SeconedData = (SeconedData << 8) + CCAP1L;HighLevel = SeconedData - FirstData; //计数值单位为usFrequency = (long)456000/ HighLevel; // 得到周期CR = 0;//停止PCA计数器计数CCAPM1 = 0x10;//停止捕获中断CCF0产生FirstData=0; // 为下一次捕捉设定初始条件CCAP1L = 0x00;//清零CCAP1H = 0x00;CL = 0x00; //清PCA计数器CH = 0x00;CCAPM1 = 0x21;Capture_over = 1;//捕获完成标志位}}// if(CF == 1) //PCA溢出中断// {// USART_Send_Str(" ;;;;;;;");// CF = 0; //清PCA溢出中断标志// CCAPM1 = 0x21;// FirstData=0; // 为下一次捕捉设定初始条件// CCAP1L = 0x00;//清零// CCAP1H = 0x00;// }}UART#include<STC12C5A60S2.H>#include<stdio.h>#include<string.h>#include"uart.h"//void uartinit(void)//{//// SCON = 0x50; //REN=1允许串行接受状态,串口工作模式// TMOD|= 0x20; //定时器工作方式// PCON|= 0x80;// //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位、停止位。

STC12C5A60S2 定时器总结

STC12C5A60S2  定时器总结

复位值
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

STC12C5A60S2单片机PWM程序

STC12C5A60S2单片机PWM程序

STC12C5A60S2单片机PWM程序两个头文件main.c#include <REG51.H>#include <intrins.h>#define U8 unsigned char#define U16 unsigned intvoid DelayMs(U8 ms);void PWM_clock(U8 clock); void PWM_start(U8 module,U8 mode);////////////////////// 延时子程序/////////////////////////////void DelayMs(U8 ms) // 在11.0592M 晶振下,stclOf 系列(单周期指令)的ms 级延时{U16 i;while(ms--){for(i = 0; i < 850; i++); }}//////////////////// 主函数入口////////////////////////////sfr CCON = 0xD8; //PCA 控制寄存器sfr CMOD = 0xD9; //PCA 模式寄存器sfr CCAPM0 = 0xDA; //PCA 模块0模式寄存器// 模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60系列)sfr CCAPM1 = 0xDB; //PCA 模块1 模式寄存器// 模块1 对应P1.4/CEX1/PCA1/PWM1(STC12C5A60系列)sfr CL = 0xE9; //PCA 定时寄存器低位sfr CH = 0xF9; //PCA 定时寄存器高位sfr CCAP0L = 0xEA; //PCA 模块0的捕获寄存器低位sfr CCAP0H = 0xFA;//PCA模块0的捕获寄存器高位sfr CCAP1L = OxEB; //PCA 模块1的捕获寄存器低位sfr CCAP1H = 0xFB; //PCA 模块1的捕获寄存器高位sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1sbit CF = 0xDF; //PCA 计数溢出标志位sbit CR = 0xDE; //PCA 计数器运行控制位sbit CCF1 = 0xD9; //PCA 模块1 中断标志sbit CCF0 = 0xD8; //PCA 模块0 中断标志//* CCAPOH = CCAPOL = 0XC0; // 模块0 输出占空因数为25%//* CCAPOH = CCAPOL = 0X80; // 模块0 输出占空因数为50%//* CCAPOH = CCAPOL = 0X40; // 模块0 输出占空因数为75%void PWM_clock(U8 clock);void PWM_start(U8 module,U8 mode);void PWM_clock(U8 clock){CMOD |= (clock<<1);CL = 0x00;CH = 0x00;void PWM_start(U8 module,U8 mode,U8 zkb) {CCAP0L = 0XC0;CCAP0H = 0XC0; // 模块 0 初始输出 占空因数为 25% CCAP1L = 0XC0; CCAP1H = 0XC0; // 模块 1 初始输出 占空因数为 25% if(module==0) {中断default: break;}}elseif(module==1){switch(mode){ switch(mode){case 0: CCAPM0 = 0X42;break; //case 1: CCAPM0 = 0X53;break; //中断case 2: CCAPM0 = 0X63;break; //中断case 3: CCAPM0 = 0X73;break; //模块0设置为8位PWM 输出,无中断 模块0设置为8位PWM 输出,下降沿产生 模块0设置为8位PWM 输出,上升沿产生case 0: CCAPM0 = CCAPM1 = 0X42;break; //出,无中断case 1: CCAPM0 = CCAPM1 = 0X53;break; //出,下降沿产生中断case 2: CCAPM0 = CCAPM1 = 0X63;break; //出,上升沿产生中断case 3: CCAPM0 = CCAPM1 = 0X73;break; //出,跳变沿产生中断default: break; case 0: CCAPM1 = 0X42;break; //case 1: CCAPM1 = 0X53;break; //中断case 2: CCAPM1 = 0X63;break; // 中断 case 3: CCAPM1 = 0X73;break; //中断default: break;}}elseif(module==2){switch(mode){模块1设置为8位PWM 输出,无中断 模块1设置为8位PWM 输出,下降沿产生 模块1设置为8位PWM 输出,上升沿产生模块0和1设置为8位PWM 输模块0和1设置为8位PWM 输 模块0和1设置为8位PWM 输 模块0和1设置为8位PWM 输}CR=1; //PCA 计数器开始计数}void PCA_Intrrpt(void) interrupt 7 {if(CCF0) CCF0=0;if(CCF1) CCF1=0; // 软件清零if(CF) CF=0; // 软件清零}void main(){TMOD|=0x02; /* timer 0 mode 2: 8-Bit reload */TH0=0xff;TR0=1;PWM_clock(2); // PCA/PWM 时钟源为定时器0 的溢出PWM_start(O,O); // 模块0,设置为PWM输出,无中断,初始占空因素为25% DelayMs(250);ITO=1; // 下降沿触发EXO=1; // 开中断OEA=1; // 开总中断while(1); // 等待中断产生,按下S15按键产生中断信号}#include "reg51.h"#define uchar unsigned char #define uint unsigned intsbit di=P3A7;uchar jishu=0x00; // 用来记录中断的次数void delay(uchar z){uchar i;for(i=0;i<z;i++);}/ """"""""""""""""""""""""""""""""""""// if n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n // 外部中断0 子函数void PWM_Select(void) interrupt 0 {U8 modjishu++; // 中断一次加1mod=jishu%3;switch(mod){case 0: CCAPM0 = 0X42;break; //0 设置为25%PW输出case 1: CCAPM0 = 0X53;break; //0 设置为50%PW输出case 2: CCAPM0 = 0X63;break; //0 设置为75%PW输出default: break;} delay(255);。

stc12c5a60s2引脚exlvd是哪个

stc12c5a60s2引脚exlvd是哪个

stc12c5a60s2 引脚exlvd 是哪个stc12c5a60s2 引脚exlvd
STC12C5A60S2 是STC 生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051 单片机,指令代码完全兼容传统8051,但速度快8-12 倍。

内部集成MAX810 专用复位电路,2 路PWM,8 路高速10 位A/D 转换,针对电机控制,强干扰场合。

stc12c5a60s2 引脚作用
P0.0~P0.7 P0:P0 口既可以作为输入/输出口,也可以作为地址/数据复用总线使用。

当P0 口作为输入/输出口时,P0 是一个8 位准双向口,内部有弱上拉电阻,无需外接上拉电阻。

当P0 作为地址/数据复用总线使用时,
是低8 位地址线A0~A7,数据线D0~D7
P1.0/ADC0/CLKOUT2 标准IO 口、ADC 输入通道0、独立波特率发生器的时钟输出。

第6章STC15F2K60S2单片机定时器及可编程时钟输出《单片机原理及应用》

第6章STC15F2K60S2单片机定时器及可编程时钟输出《单片机原理及应用》本文介绍了STC15F2K60S2单片机的定时器和可编程时钟输出功能。

单片机定时器是单片机中常用的功能模块之一,可以用于定时、计时、延时等应用。

STC15F2K60S2单片机具有多个定时器,包括定时/计时器的选择,工作模式的设置,定时器中断的配置等。

另外,该单片机还具备可编程时钟输出功能,可以用于生成各种频率的时钟信号。

一、STC15F2K60S2单片机定时器概述STC15F2K60S2是一款杰出的8051内核单片机,它具有多种功能和丰富的接口资源,适用于各种应用场景。

定时器是其中一个重要的功能模块,可以用于实现各种定时任务,例如周期性的数据采集、定时触发等。

STC15F2K60S2单片机具有4个定时器,分别为T0、T1、T2和T3。

每个定时器又分为两个独立的计时/定时模块,通常称之为T0高速定时器和T0低速定时器等。

这些定时器的工作频率由系统时钟频率决定,可以通过定时器控制寄存器来设置时钟来源和分频系数。

二、STC15F2K60S2单片机定时器的工作模式定时器有多种工作模式可供选择,常用的有定时器模式和计数器模式。

定时器模式主要用于实现定时功能,可以根据需求设置定时时长和触发条件。

计数器模式主要用于计数功能,可以将外部事件转换为内部计数脉冲,用于测量时间间隔或者脉冲频率。

STC15F2K60S2单片机定时器的工作模式可以通过相关的寄存器位进行配置。

例如,可以通过T2CON寄存器的T2M0和T2M1位来选择定时器2的工作模式,可以选择定时器模式、16位自动重载模式、13位同步计数器模式,或者外部事件计数器模式。

三、STC15F2K60S2单片机定时器中断的配置定时器中断是使用定时器功能的常用方法之一,可以在定时达到设定值时触发中断,执行相应的中断服务程序。

STC15F2K60S2单片机的定时器可以设置使能定时器中断,并通过相关的中断使能寄存器来控制定时器中断的使能和优先级。

完整word版,STC12C5A60S2程序实现0-256分之一晶振任意频率PWM输出

//头文件STC12C5A.h可在网上下载#include "STC12C5A.H"#define uint unsigned int#define uchar unsigned charuchar t=0;sbit sign=CCON^2;//此位为预留位置,开发用作表示振动片工作模式,0为一//般模式,1为ADC模式void init_T0(void);//初始化T0void init_T1(void);//初始化[T1void init_INT0(void);//初始化外部中断0void init_INT1(void);//初始化外部中断1void init_PCA(void);//初始化PCA模块void init_ADC(void);//初始化A/D转化模块void main(void){sign=0;//默认工作在固定模式P17=1;//开始时P3^0输出为高电平EA=1;//开总中断init_T0();//初始化T0init_T1();//初始化T1init_INT0();//初始化外部中断0init_INT1();//初始化外部中断1init_PCA();//初始化PCA模块CR=1; //开启PCA计数器init_ADC(); //初始化A/D转化模块while(1){if(sign==1)//工作在ADC模式{if(ADC_CONTR&ADC_FLAG!=0)//转换结束{TH0=ADC_RES; //溢出率与初值成正比TL0=ADC_RES;ADC_CONTR=ADC_CONTR & 0xE7;//将ADC_FLAG(转换结//束标志位)与ADC_START清零,其余位不变ADC_CONTR=ADC_CONTR | 0x08;//将ADC_START置1 }}else //工作在固定模式{TH0=0x30; //输出一固定频率的PWM波TL0=0x30;}}}void init_T0(void)//T0做PCA的时钟源输入{//通过改变定时器0溢出率实现可调频率的PWM输出TMOD=0x02;//定时器0工作在方式2,8位定时计数器自动重装载TH0=0x80;//设置T0定时所对应的初值TL0=0x80;//设置T0每次定时结束后重装载的值ET0=1;//允许定时器0中断TR0=1;//定时器0开始计数}void init_T1(void)//T1定时100ms,用于产生呼气吸气脉冲{TMOD=TMOD|0x10;//设置定时器1的工作方式为方式2且不改变定时器0的工作方式TH1=0x3c; //设置定时100ms的处初值TL1=0xb0;ET1=1;//允许定时器1中断TR1=1; //定时器1开始计数}void init_INT0(void){IT0=1;//由下降沿触发,输入引脚P3^2EX0=1;//开外部中断0}void init_INT1(void){IT1=1; //由下降沿触发,输入引脚P3^3EX1=1; //开外部中断1}void init_PCA(void){CMOD=0x04; //CIDL=0(D7):空闲模式下继续计数,D4~D6不用//CPS2/CPS1/CPS0(D3~D1)=010,选择T0做PCA时钟源输入//ECF(D0)=0,关PCA计数器溢出中断CCF1=0; //清零PCA模块1中断标志位CCF0=0; //清零PCA模块0中断标志位CR=0; //关闭PCA计数器CH=0;//PCA计数器高8位置零CL=0; //PCA计数器低8位置零CCAPM0=0X42;//PCA模块0的工作模式寄存器设置为0X42表示8位PWM无中断CCAP0H=0x80; //设置PWM波的占空比为0.5CCAP0L=0x80; //溢出后会将CCAP0H中值赋给CCAP0LCCAPM1=0x31; //PCA模块1扩展为上升沿下降沿均可触发的外部中断}void init_ADC(void){uint i;for(i=10000;i!=0;i--)//若晶振为6MHZ,是延时20ms等待ADC模块内部模拟电源稳定{;}ADC_CONTR=0x80;//开ADC模块电源并选择P1^0作为模拟量输入引脚P1ASF=0x01; //P1口模拟量功能设置寄存器:使用P1^0的模拟量功能AUXR1=AUXR1 & 0xfb;//ADRJ=0,ADC_RES存放A/D转换结果高8位//ADC_RESL存放A/D转换结果低8位ADC_RES=0; //检测前将其清零ADC_RESL=0;//检测前将其清零EADC=1; //开A/D转换中断}void INT0_ISR(void) interrupt 0 //外部中断0服务程序{sign=0;//工作在固定模式ADC_CONTR=ADC_CONTR&0xF7;//关闭ADC电源}void INT1_ISR(void) interrupt 2 //外部中断1服务程序{sign=1;//工作在ADC模式ADC_CONTR|=0x08; //打开ADC电源,由用户决定PWM频率}void T1_ISR(void) interrupt 3 //定时器1中断服务程序{TH1=0x3C; //工作在方式1溢出后不能自动重装载TL1=0xB0;t++;if(t==20)//2s后输出低电平P17=!P17;if(t==50){t=0;//5s为一个周期P17=!P17;}}void PCA_ISR(void) interrupt 7{if(CCF1==1)//PCA模块1中断响应{if(P14==0)//判断是上升沿触发还是下降沿触发,等于0为下降沿触发{while(t!=25); //延时0.5sCCAP0H=0x80; //设置PWM波的占空比为0.5CCAP0L=0x80;}else//上升沿触发{CCAP0H=0xFF; //PWM输出低电平CCAP0L=0xFF;}CCF1=0;elseCCF0=0;//防止干扰信号误动作}}。

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单片机pwm应用

1.PCA工作模式寄存器CMODPCA工作模式寄存器的格式如下:CMOD:PCA工作模式寄存器CIDL:空闲模式下是否停止PCA计数的控制位当CIDL=0时,空闲模式下PCA计数器继续工作;当CIDL=1时,空闲模式下PCA计数器停止工作;CPS2、CPS1、CPS0:PCA计数脉冲源选择控制位。

PCA计数脉冲选择如下表所示:例如,CPS2/CPS1/CPS0=1/0/0时,PCA/PWM的时钟源是SYSclk,不是定时器0,PWM 的频率为SYSclk/265如果要用系统时钟/3来作为PCA的时钟源,应让T0工作在1T模式,计数3个脉冲即产生溢出。

如果此时使用内部RC作为系统时钟(室温情况下,5V单片机为11MHZ~15.5MHZ),可以输出14K~19K频率的PWM。

用T0的溢出可对系统时钟进行1~256级分频。

ECF:PCA计数溢出中断使能位。

当ECF=0时,禁止寄存器CCON中CF位的中断;当ECF=1时,允许寄存器CCON中CF位的中断。

2. 2. PCA控制寄存器CCONPCA控制寄存器的格式如下:CCON:PAC控制寄存器CF:PCA计数阵列溢出标志位。

当PCA计数器溢出时,CF由硬件位置。

如果CMOD 寄存器的ECF位置位,则CF标志可用来产生中断。

CF位可通过硬件或软件置位,但通过软件清零。

CR:PCA计数阵列运行控制位。

该位通过软件置位,用来起动PCA计数器阵列计数。

该位通过软件清零,用来关闭PCA计数器。

CCF1:PCA模块1中断标志。

当出现匹配或捕获时该位由硬件置位。

该位必须通过软件清零。

CCF0:PCA模块0中断标志。

当出现匹配或捕获时该位由硬件置位。

该位必须通过软件清零。

3. 3.PCA比较/捕获寄存器CCAPM0和CCAPM1PCA模块0的比较/捕获寄存器的格式如下:CCAPM0:PCA模块0的比较/捕获寄存器B7:保留位将来之用。

ECOM0:允许比较器功能控制位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

@输入参数:num 波特率输出引脚选择 @输出参数:无 @备注:
定时器设置在 1T 模式,需要时可修改
*/
void CLK_OUT_Init(unsigned char num)
{ if(num==CLOCKOUT_ALL) //选择时钟输出 0 为输出端口
{ TMOD = 0X22; //T0,T1 工作在模式 2,8 位自动重装计数模式 AUXR = (AUXR | 0X80);//T0 工作在 1T 模式 AUXR = (AUXR | 0X40);//T1 工作在 1T 模式 AUXR = (AUXR | 0X04);//独立波特率发生器工作在 IT 模式
前言:在项目中,经常要涉及时钟信号输入的问题,常用的方法,一个是在硬件上焊接有源 晶振,一个是通过 MCU 输入时钟信号,到达时序匹配的目的。在学习完 51 单片机的基本 原理后,对于 51 单片机的基本功能已经有了掌握,对于 STC12C5A60S2 相对功能强大的单 片机,功能使用依旧不够熟练,故设计本次试验,学习 STC12C5A60S2 的可编程时钟输出 的功能。 实验验目的:@学习整理 STC5A60S2 单片机有关可编程时钟输出的功能的资料
@积累模块,以便日后开发调用。 实验内容: 1. 寄存器相关 AUXR:
b2,b6,b7 分别用来设置独立波特率定时器,T0,T1 的时钟模式。置 1,则为 1T 模式; b4 为独立波特率定时器计时开始控制位。置 1,则开始计数。 WAKE_CLKO:
b0,b1,b1 分别控制 CLOCKOUT0,CLOCKOUT1,CLOCKOUT2 的时钟输出允许。 2. 实验程序 /*********************************CLK_OUT.H 文件****************************/ #ifndef __CLK_OUT_H #define __CLK_OUT_H
时钟
WAKE_CLKቤተ መጻሕፍቲ ባይዱ= (WAKE_CLKO | 0X07);//允许 T0,T1,独立波特率发生器输出
TR0 = 1;//启动 T0 开始计数工作,对系统时钟进行分频输出 TR1 = 1;//启动 T1 开始计数工作,对系统时钟进行分频输出 AUXR = (AUXR | 0X10);//启动独立波特率发生器开始计数工作,对系统时钟进 行分频输出 //至此,时钟信号已经输出
//#include "SX.H"
#define CLOCKOUT0 0
#define CLOCKOUT1
1
#define CLOCKOUT2
2
#define CLOCKOUT_ALL 3
void CLK_OUT_Init(unsigned char num);
#endif
/*********************************CLK_OUT.C 文件****************************/ #include "CLK_OUT.H" #include "STC12C5A60S2.H" //#include "SX.H"
{ TMOD = 0X22; //T0,T1 工作在模式 2,8 位自动重装计数模式 AUXR = (AUXR | 0X40);//T1 工作在 1T 模式 TH1 = (256-240); //对 T0 做时钟输出的 8 位重装数 11118570/2/240=23.163KHZ WAKE_CLKO= (WAKE_CLKO | 0X02);//允许 T0,T1,独立波特率发生器输出
时钟 TR1 = 1;//启动 T1 开始计数工作,对系统时钟进行分频输出 AUXR = (AUXR | 0X10);//启动独立波特率发生器开始计数工作,对系统时钟进
行分频输出
}
if(num==CLOCKOUT2)
{ AUXR = (AUXR | 0X04);//独立波特率发生器工作在 IT 模式 BRT = (256-1); //对 BRT 独 立 波 特率 发生 定时 器送 8 位 重装 值, 输出
} if(num==CLOCKOUT0) {
TMOD = 0X22; //T0,T1 工作在模式 2,8 位自动重装计数模式 AUXR = (AUXR | 0X80);//T0 工作在 1T 模式 TH0 = (256-73); //对 T0 做时钟输出的 8 位重装数,11119570/2/74=124540.54 约 75.132KHZ WAKE_CLKO= (WAKE_CLKO | 0X01);//允许 T0,T1,独立波特率发生器输出 时钟 TR0 = 1;//启动 T0 开始计数工作,对系统时钟进行分频输出 } if(num==CLOCKOUT1)
5559.785KHZ
时钟
WAKE_CLKO= (WAKE_CLKO | 0X04);//允许 T0,T1,独立波特率发生器输出
AUXR = (AUXR | 0X10);//启动独立波特率发生器开始计数工作,对系统时钟进 行分频输出
}
后注:以上资料由 小赖 整理9
BRT = (256-1); //对 BRT 独 立 波 特率 发生 定时 器送 8 位 重装 值, 输出 5559.785KHZ
TH0 = (256-73); //对 T0 做时钟输出的 8 位重装数,11119570/2/74=124540.54 约 75.132KHZ
TH1 = (256-240); //对 T0 做时钟输出的 8 位重装数 11118570/2/240=23.163KHZ
/**********时钟输出设置函数***************************/
/*
@函数功能:设置时钟输出
@参数说明:num :时钟输出引脚选择
CLCLKOUT0
T0 定时器 1 输出时钟
CLCLKOUT1
T1 定时器 1 输出时钟
P3^4 P3^5
CLCLKOUT2
DLCLKOUT2 时钟输出 P1^0
相关文档
最新文档