




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/STC12C5A60S2可编程时钟模块/说明STC12C5A60S2单片机有三路可编程时钟输出CLKOUT0/T0/P34/CLKOUT1/T1/P35、CLKOUT2/P10/涉及寄存器AUXR辅助寄存器、WAKE_CLKO时钟与系统掉电唤醒控制寄存器/BRT独立波特率发生器定时器寄存器/程序说明/本程序可选实现P34输出CLKOUT0时钟、P35输出CLKOUT1时钟/P10输出CLKOUT2时钟/INCLUDEINCLUDE/DEFINEPORT_BRT/如果想测试独立波特率发生器时钟输出请打开此句/若想测试CLKOUT1和CLKOUT0请注释此句IFDEFPORT_BRT/条件编译独立波特率发生器时钟输出/CLKOUT2时钟初始化/VOIDCLKOUT_INITVOIDWAKE_CLKO0X04/BIT2BRTCLKO允许P10配置为独立波特率发生器的时钟输出/BRT工作在1T模式下时的输出频率SYSCLK/256BRT/2/BRT工作在12T模式下时输出频率SYSCLK/12/256BRT/2AUXR0X14/BIT4BRTR允许独立波特率发生器运行/BIT2BRTX12BRT工作在1T模式下BRT0XFF/更改该寄存器的值可实现对输出的时钟频率进行分频ELSE/条件编译CLKOUT0时钟输出/CLKOUT0时钟和CLKOUT1初始化/VOIDCLKOUT_INITVOIDWAKE_CLKO0X03/允许将P34/T0脚配置为定时器0的时钟输出CLKOUT0/T0工作在1T模式时的输出频率SYSCLK/256TH0/2/T0工作在12T模式时的输出频率SYSCLK/12/256TH0/2/1T指的是每1个时钟加1,是普通C51的12倍/12T指的是每12个时钟加1与普通C51一样/允许将P35/T1脚配置为定时器1的时钟输出CLKOUT1,只能工作在定时器模式2下/T1工作在1T模式时的输出频率SYSCLK/256TH0/2/T1工作在12T模式时的输出频率SYSCLK/12/256TH0/2/1T指的是每1个时钟加1,是普通C51的12倍/12T指的是每12个时钟加1与普通C51一样AUXR0XC0/T0定时器速度是普通8051的12倍,即工作在1T模式下/T1定时器速度是普通8051的12倍,即工作在1T模式下TMOD0X22/定时器0工作模式为方式2,自动装载时间常数/定时器1工作模式为方式2,自动装载时间常数TH00XFF/更改该寄存器的值可实现对输出的时钟频率进行分频TL00XFFTH10XFF/更改该寄存器的值可实现对输出的时钟频率进行分频TL10XFFTR11TR01ENDIF/主程序/VOIDMAINCLKOUT_INITWHILE1/STC12C5A60S2系统时钟模块/说明STC12C5A60S2单片机有两个时钟源,内部R/C振荡时钟和外部晶体时钟/出厂标准配置是使用外部晶体或时钟/涉及寄存器CLK_DIV时钟分频寄存器/由该寄存器的BIT02组合可实现对时钟源进行0、2、4、8、16/32、64、128分频/程序说明/对外部时钟进行分频得到SYSCLK,然后经过P10的独立波特率/时钟输出功能SYSCLK/2输出时钟频率/INCLUDEINCLUDEDEFINEBUS_CLK12/若要修改系统时钟直接在此处修改/12为12M的SYSCLK/6为6M的SYSCLK/3为3M的SYSCLK/1500为15M的SYSCLK/750为750KHZ的SYSCLK/375为375KHZ的SYSCLK/187500为1875KHZ的SYSCLK/93750为9375KHZ的SYSCLK/系统时钟初始化/VOIDSYSCLK_INITVOIDWAKE_CLKO0X04/配置P10口为频率输出AUXR0X14/允许波特率时钟工作/工作模式为1TBRT0XFFIFBUS_CLK12CLK_DIV0X00ELIFBUS_CLK6CLK_DIV0X01ELIFBUS_CLK3CLK_DIV0X02ELIFBUS_CLK1500CLK_DIV0X03ELIFBUS_CLK750CLK_DIV0X04ELIFBUS_CLK375CLK_DIV0X05ELIFBUS_CLK187500CLK_DIV0X06ELIFBUS_CLK93750CLK_DIV0X07ENDIF/主程序/VOIDMAINSYSCLK_INITWHILE1/STC12C5A60S2系统省电模块/说明STC12C5A60S2单片机有三种省电模式以降低功耗空闲模式,低速模式/掉电模式/涉及寄存器PCON电源控制寄存器/BIT0IDL控制单片机进入IDLE空闲模式/BIT1PD控制单片机进入掉电模式/程序说明程序实现让单片机先工作一阵子通过P03指示灯显示/然后进入掉电状态,利用外部中断0口来唤醒单片机工作/唤醒后单片机将通过P003口的灯闪烁显示开始工作/INCLUDEINCLUDEDEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINTUCHARPOWER_DOWN_FLAG0/进入掉电状态标志SBITCHIP_START_LEDP00/单片机开始工作指示灯SBITPOWER_DOWN_LED_INT0P01/INT0口掉电唤醒指示灯SBITN_POWER_DOWN_LED_INT0P02/INT0口没有唤醒指示灯SBITNORMAL_WORK_LEDP03/正常工作指示灯SBITPOWER_DOWN_WAKEUP_INT0P32/外中断唤醒输入口VOIDDELAY_MSUINTTIMEVOIDNORMAL_WORKVOIDVOIDINTP_INITVOIDVOIDAFTER_POWR_DOWNVOID/软件延时/VOIDDELAY_MSUINTTIMEUINTT/延时时间TIME100316USWHILETIMEFORT0TINCLUDEINCLUDE“LCDH“DEFINEADC_POWER0X80/AD电源控制DEFINEADC_START0X08/AD转换控制DEFINEADC_FLAG0X10/AD转换完成DEFINESPEED_00X00/540CLKDEFINESPEED_10X20/360CLKDEFINESPEED_20X40/180CLKDEFINESPEED_30X60/90CLKDEFINEADC00X00/P10DEFINEADC10X01/P11DEFINEADC20X02/P12DEFINEADC30X03/P13DEFINEADC40X04/P14DEFINEADC50X05/P15DEFINEADC60X06/P16DEFINEADC70X07/P17VOIDAD_INITVOIDDOUBLERESULT_CALCULATEVOIDVOIDSENDDATAUCHARBYTE/A/D初始化/VOIDAD_INITVOIDAUXR10X04/转换结果高2位放在ADC_RES的低2位中,低8位放在ADC_RESL中P1ASF0X01/P10口作为模拟功能A/D使用ADC_RES0X00/结果清零ADC_RESL0X00ADC_CONTRADC_POWER|SPEED_2|ADC0|ADC_START/打开电源,180CLK周期转换,选择P10作输入_NOP_NOP_NOP_NOP_NOP_NOP_NOP_NOP_EADC1/允许A/D转换中断EA1/开总中断/串口初始化/VOIDUART_INITVOIDSM00/选择串口为方式1工作SM11/8位数据波特率可变REN1BRT0XDCAUXR0X15/选择独立波特率发生器为串行/口的波特率发生器,模式为1T/转换结果计算/DOUBLERESULT_CALCULATEVOIDUINTTEMPDOUBLERESULTTEMPADC_RES256ADC_RESLRESULTTEMP494/1024RETURNRESULT/串口发送数据/VOIDSENDDATAUCHARBYTESBUFBYTEWHILETITI0/主程序/VOIDMAININIT_LCDAD_INITUART_INITWHILE1/A/D中断服务/VOIDAD_SERVICEVOIDINTERRUPT5ADC_CONTR/清标志PRINTF_DECIMALRESULT_CALCULATEADC_RES0X00ADC_RESL0X00ADC_CONTRADC_POWER|SPEED_2|ADC_START/开始下一次转换_NOP_NOP_NOP_NOP_INCLUDEINCLUDEDEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINTSBITPSBP04/串/并行接口选择1并行0串行SBITRSP07/并行数据/命令选择,串行片选0指令1数据SBITRWP06/并行读写选择0写1读串行数据口SBITEP05/并行使能,串行同步时钟VOIDDELAY_MSUINTTIME/延时UCHARBUSYVOID/读忙UCHARREAD_STATUSVOID/读状态UCHARREAD_DATEVOID/读数据VOIDWRITE_CMDUCHARCMD/写命令VOIDWRITE_DATEUCHARDATE/写数据VOIDINIT_LCDVOID/初始化LCDVOIDLOCATIONUCHARX,UCHARY/设定显示位置VOIDCLEAR_SCREENVOID/清屏VOIDWRITE_STRUCHARPVOIDPRINTF_DECIMALDOUBLENUMINCLUDE“LCDH“EXTERNVOIDSENDDATAUCHARBYTE/以下部分为LCD的驱动程序/名称DELAY_MS/功能实现软件延时/输入TIME时间参数/输出无/VOIDDELAY_MSUINTTIMEUINTT/82,延时时间TIME100316USWHILETIME/41,延时时间TIME49916USFORT0TINCLUDEDEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINT/高速模式变量更改/DEFINEFOSC12000000DEFINET100KHZFOSC/2/100000/高速脉冲输出频率计算FPCA模块的时钟源/2CCAP0L/CCAP0LPCA时钟源/2/F/定时模式变量更改/DEFINET5MS0005FOSC/定时计数值T/1/PCA的时钟源/PWM模式变量更改/DEFINEDR_500X7F/50占空比DEFINEDR_100X19/10占空比/时钟源选择/DEFINECLK_00X00/SYSCLK/12DEFINECLK_10X02/SYSCLK/2DEFINECLK_20X04/定时器0的溢出脉冲DEFINECLK_30X06/ECI/P12P41输入的外部时钟DEFINECLK_40X08/SYSCLKDEFINECLK_50X0A/SYSCLK/4DEFINECLK_60X0D/SYSCLK/6DEFINECLK_80X0E/SYSCLK/8/模式选择/DEFINEH_MODEL0X4D/高速输出模式,中断模式DEFINET_MODEL0X49/定时模式DEFINEP_MODEL0X42/无中断PWM模式DEFINEPL_MODEL0X63/由低变高可中断PWM模式DEFINEPH_MODEL0X53/由高变低可中断PWM模式DEFINEPHL_MODEL0X73/高低都可中断PWM模式DEFINECU_MODEL0X61/16位捕获,上升触发中断模式DEFINECD_MODEL0X51/16位捕获,下降触发中断模式DEFINECUD_MODEL0X71/16位捕获,跳变触发中断模式UINTVALUET100KHZ/100KHZ时的CCAP0L值UINTTIMET5MS/5MS时的CCAP0L和CCAP0H值UINTTEST0/测试用,要删除SBITLEDP17/用来观测定时模式和捕获模式的现象/定时模式时500MS闪烁,捕获模式时捕获一次时取反/函数声明/VOIDHP_INITVOID/高速模式初始化VOIDPP_INITVOID/PWM模式初始化VOIDTP_INITVOID/定时器模式初始化VOIDCD_INITVOID/捕获模式初始化/H_MODEL初始化/VOIDHP_INITVOIDCMODCLK_4/PCA时钟源为SYSCLKCCAPM0H_MODEL/高速输出模式CCAP0LVALUECCAP0HVALUE8VALUET100KHZCR1/开启PCA计数器EA1/开总中断/P_MODEL初始化/VOIDPP_INITVOIDCMODCLK_4/时钟源为SYSCLKCCAPM0P_MODEL/无中断PWM模式CCAP0LDR_50/50占空比CCAP0HDR_50/当CL值大于CCAP0L时输出为高,反之输出为低/当CL溢出时CCAP0H的值装载到CCAP0L中CR1/开启PCA计数器/当不使用定时0溢出为时钟源时,PWM输出的频率PCA的时钟源/256/使用定时器溢出的时钟源时,可设定定时器的值对输出频率的改变/分频为0256分频/T_MODEL初始化/VOIDTP_INITVOIDCMODCLK_4/时钟源为SYSCLKCCAPM0T_MODEL/定时模式CCAP0LTIME/CCAP0HTIME8/定时5MSTIMET5MSCR1EA1/CD_MODEL初始化/VOIDCD_INITVOIDCMODCLK_4CCAPM0CD_MODELCR1EA1/主程序/VOIDMAINCD_INIT/PP_INIT/HP_INIT/TP_INITWHILE1/中断服务/VOIDCD_SERVICEVOIDINTERRUPT7CCF00LEDLED/VOIDTP_SERVICEVOIDINTERRUPT7CCF00/清除PCA计数器溢出中断标志TESTIFTEST100TEST0LEDLEDCCAP0LTIMECCAP0HTIME8TIMET5MS/VOIDHP_SERVICEVOIDINTERRUPT7CCF00/清除PCA计数器溢出中断标志CCAP0LVALUECCAP0HVALUE8VALUET100KHZ/STC12C5A60S2串行通信模块/说明STC12C5A60S2单片机有2个采用UART工作方式的全双工串行通信接口/两个串口都有4种工作方式,两种波特率可变,两种波特率固定的/串口1为TXDP31引脚RXDP30引脚/串口2为当在P1口时TXD2P13引脚RXD2P12引脚/当在P4口时TXD2P43引脚RXD2P42引脚/涉及寄存器BRT独立波特率发生器AUXR辅助寄存器SCON串行控制寄存器/SBUF数据缓冲寄存器PCON电源控制寄存器IE中断控制寄存器/IP中断优先级寄存器IPHSADENSADDRWAKE_CLKO时钟唤醒寄存器/BIT1PD控制单片机进入掉电模式/程序说明程序实现从PC端发送数据到单片机,单片机将接收到的数据通过12864/显示出来/INCLUDEINCLUDEINCLUDE“LCDH“DEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINTDEFINEBTL9600/若要更改波特率直接更改此处,当波特率大于9600时需修改相应的接收程序,/可选波特率有以下否则有可能出现乱码/波特率为2400/波特率为28800/波特率为4800/波特率为38400/波特率为9600/波特率为57600/波特率为14400/波特率为115200/波特率为19200UCHARSEND_BFLAG0/正在发送标志UCHARRECEIVE_BFLAG0/正在接送标志UCHARRESBITLEDP14SBITLED1P15VOIDUART_INITVOIDVOIDDELAYUINTTIMEVOIDRECEIVEVOIDVOIDPRINTFUCHARP/串口初始化/VOIDUART_INITVOIDSM00/选择串口为方式1工作SM11/8位数据波特率可变REN1IFBTL2400BRT0X70ELIFBTL4800BRT0XB8ELIFBTL9600/波特率设置为9600BRT0XDCELIFBTL14400BRT0XE8ELIFBTL19200BRT0XEEELIFBTL28800BRT0XF4ELIFBTL38400STC12C5A60S2单片机各个模块程序代码13_STC12C5A60S2BRT0XF7ELIFBTL57600BRT0XFAELIFBTL115200BRT0XFDENDIFAUXR0X15/选择独立波特率发生器为串行/口的波特率发生器,模式为1TES1/允许串口中断IPH0X10/PSH1IP0X10/PS1串口1中断为最高优先级中断EA1/开总中断/发送一个字节数据/VOIDSEND_BYTEUCHARBYTESBUFBYTEWHILETITI0/打印字符/VOIDPRINTFUCHARPWHILEP0SEND_BYTEPP/接收函数/VOIDRECEIVEVOIDWRITE_DATESBUFREIFRE16LOCATION2,0IFRE32LOCATION3,0IFRE48LOCATION4,0IFRE66RE0CLEAR_SCREENLOCATION1,0RECEIVE_BFLAG1/主函数/VOIDMAININIT_LCDUART_INITWHILE1IFRI1RI0RECEIVEPRINTF“SUCCESS“IFTI1TI0/串口中断服务/VOIDCOM_SERVICEVOIDINTERRUPT4EA0EA1/STC12C5A60S2SPI接口模块/说明STC12C5A60S2单片机提供一种高速串行通信接口SPI接口,SPI是一种全/双工高速同步的通信总线,有两种操作模式主模式和从模式。/涉及寄存器SPCTLSPI控制寄存器、SPSTATSPI状态寄存器、SPDAT数据寄存器/AUXR1辅助寄存器/程序说明本程序为SPI的主机程序,主机通过从串口接收数据并将数据通过SPI/传输给SPI的从机。/INCLUDEINCLUDEDEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINT/对SPCTL寄存器的设置位宏定义/DEFINESSIG0X80/SS引脚忽略DEFINESPEN0X40/SPI使能位DEFINEDORD0X20/SPI数据发送LSB最先发送DEFINEMSTR0X10/主从模式选择DEFINECPOL0X08/SPICLK空闲时为高电平DEFINECPHA0X04/数据在SPICLK的前时钟沿驱动,并在后时钟沿采样DEFINESP_CLK00X00/SPI时钟频率为CPU_CLK/4DEFINESP_CLK10X01/SPI时钟频率为CPU_CLK/16DEFINESP_CLK20X02/SPI时钟频率为CPU_CLK/64DEFINESP_CLK30X03/SPI时钟频率为CPU_CLK/128/对SPSTAT寄存器的设置位宏定义/DEFINESPIF0X80/传输完成标志DEFINEWCOL0X40/SPI写冲突标志/SPI口切换宏定义/DEFINESPI_P40X20/SPI从P1口切换到P4口SBITSPISSP00/用来选择从机/串口波特率设定/DEFINEBTL9600/若要更改波特率直接更改此处,当波特率大于9600时需修改相应的接收程序,/可选波特率有以下否则有可能出现乱码/波特率为2400/波特率为28800/波特率为4800/波特率为38400/波特率为9600/波特率为57600/波特率为14400/波特率为115200/波特率为19200VOIDUART_INITVOIDUCHARRECEIVEVOIDVOIDPRINTFUCHARPVOIDINIT_SPIVOIDVOIDSEND_BYTEUCHARBYTE/串口初始化/VOIDUART_INITVOID/SM00/选择串口为方式1工作/SM11/8位数据波特率可变/REN1/允许串口接收SCON0X50IFBTL2400BRT0X70/波特率设置为9600ELIFBTL4800BRT0XB8ELIFBTL9600BRT0XDCELIFBTL14400BRT0XE8ELIFBTL19200BRT0XEEELIFBTL28800BRT0XF4ELIFBTL38400BRT0XF7ELIFBTL57600BRT0XFAELIFBTL115200BRT0XFDENDIFAUXR0X15/选择独立波特率发生器为串行/口的波特率发生器,模式为1T/ES1/允许串口中断/IPH0X10/PSH1/IP0X10/PS1串口1中断为最高优先级中断/EA1/开总中断/发送一个字节数据/VOIDSEND_BYTEUCHARBYTESBUFBYTEWHILETITI0/打印字符/VOIDPRINTFUCHARPWHILEP0SEND_BYTEPP/接收函数/UCHARRECEIVEVOIDUCHARBYTE_NOP_NOP_NOP_NOP_IFRI1RI0BYTESBUFRETURNBYTE/名称INIT_SPI/功能对SPI进行初始化/输入无/输出无/VOIDINIT_SPIVOIDSPDAT0/清空数据寄存器SPSTATSPIF|WCOL/清空SPI状态寄存器STC12C5A60S2单片机各个模块程序代码13_STC12C5A60S2SPCTLSPEN|MSTR/SPI设置为主机模式IE20X02/允许SPI中断/名称MAIN/功能/输入无/输出无/VOIDMAINUCHARFLAG0UART_INITINIT_SPIEA1/开总中断WHILE1FLAGRECEIVEIFFLAG/当PC端有发送数据时才进行SPI传输数据SPISS0SPDATFLAGFLAG0/名称SPI_ISR/功能SPI中断服务/输入无/输出无/VOIDSPI_ISRVOIDINTERRUPT9USING1/使用工作寄存器组1SPSTATSPIF|WCOL/清标志PRINTF“SEND_DATA“SEND_BYTESPDAT/从从机中把主机上一次发送的值读回来SEND_BYTETSPISS1/STC12C5A60S2SPI接口模块/说明STC12C5A60S2单片机提供一种高速串行通信接口SPI接口,SPI是一种全/双工高速同步的通信总线,有两种操作模式主模式和从模式。/涉及寄存器SPCTLSPI控制寄存器、SPSTATSPI状态寄存器、SPDAT数据寄存器/AUXR1辅助寄存器/程序说明本程序为SPI的从机程序,从机通过SPI接收主机发送过来的数据,并通过串口/显示到PC端,/INCLUDEINCLUDEDEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINT/对SPCTL寄存器的设置位宏定义/DEFINESSIG0X80/SS引脚忽略DEFINESPEN0X40/SPI使能位DEFINEDORD0X20/SPI数据发送LSB最先发送DEFINEMSTR0X10/主从模式选择DEFINECPOL0X08/SPICLK空闲时为高电平DEFINECPHA0X04/数据在SPICLK的前时钟沿驱动,并在后时钟沿采样DEFINESP_CLK00X00/SPI时钟频率为CPU_CLK/4DEFINESP_CLK10X01/SPI时钟频率为CPU_CLK/16DEFINESP_CLK20X02/SPI时钟频率为CPU_CLK/64DEFINESP_CLK30X03/SPI时钟频率为CPU_CLK/128/对SPSTAT寄存器的设置位宏定义/DEFINESPIF0X80/传输完成标志DEFINEWCOL0X40/SPI写冲突标志/SPI口切换宏定义/DEFINESPI_P40X20/SPI从P1口切换到P4口/波特率选择/DEFINEBTL9600/若要更改波特率直接更改此处,当波特率大于9600时需修改相应的接收程序,/可选波特率有以下否则有可能出现乱码/波特率为2400/波特率为28800/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国木材加工及木制品制造行业市场调研及行业投资研究报告
- 中国苯骈三氮唑行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 棉毛类针织衫裤项目投资可行性研究分析报告(2024-2030版)
- 2025年中国异形云母垫圈行业市场发展前景及发展趋势与投资战略研究报告
- 墙面板行业深度研究分析报告(2024-2030版)
- 2024年全球及中国狭缝管行业头部企业市场占有率及排名调研报告
- 白板培训课件视频
- 叶酸培训知识课件
- 中国外墙弹性腻子行业市场前景预测及投资价值评估分析报告
- 铁路技规培训课件下载
- 2024年江苏宁海中学提前自主招生数学试卷真题(含答案详解)
- 儿童友好医院建设指南
- 蒙医学气功功法的介绍与实践
- 安全生产企业培训课件
- 【MOOC】西方园林历史与艺术-北京林业大学 中国大学慕课MOOC答案
- 第四届全国仪器仪表行业职业技能竞赛-无人机装调检修工(仪器仪表检测)理论考试题库(含答案)
- 2024版《53天天练单元归类复习》3年级语文下册(统编RJ)附参考答案
- 灭鼠行业营销策略方案
- 心脏瓣膜病患者的护理
- Unit2HealthylifestyleProjectDoahealthsurvey教学设计高中英语人教版选择性
- 经尿道前列腺电切术后膀胱冲洗的护理-课件
评论
0/150
提交评论