STC12C5410AD程序和在PCAPWM的应用.docx

上传人:b****5 文档编号:5383585 上传时间:2022-12-15 格式:DOCX 页数:40 大小:1.03MB
下载 相关 举报
STC12C5410AD程序和在PCAPWM的应用.docx_第1页
第1页 / 共40页
STC12C5410AD程序和在PCAPWM的应用.docx_第2页
第2页 / 共40页
STC12C5410AD程序和在PCAPWM的应用.docx_第3页
第3页 / 共40页
STC12C5410AD程序和在PCAPWM的应用.docx_第4页
第4页 / 共40页
STC12C5410AD程序和在PCAPWM的应用.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

STC12C5410AD程序和在PCAPWM的应用.docx

《STC12C5410AD程序和在PCAPWM的应用.docx》由会员分享,可在线阅读,更多相关《STC12C5410AD程序和在PCAPWM的应用.docx(40页珍藏版)》请在冰豆网上搜索。

STC12C5410AD程序和在PCAPWM的应用.docx

STC12C5410AD程序和在PCAPWM的应用

STC12C5410AD_程序和在PCA_PWM的应用

一、STC12C5410/STC12C2052系列主要性能:

2

二、A/D转换及A/D转换测试程序3

(1)A/D转换典型应用线路,按键扫描5

(2)A/D转换模块的参考电压源5

(3)A/D转换功能汇编程序示例6

三、STC12C5410AD系列单片机的PCA/PWM的应用9

(1)用SST 单片机的PCA功能产生PWM 脉冲(转)9

(2)产生精确PWM波形的DDS电路(转)10

(3)基于DDS的调制信号发生器的设计(转)12

(4)STC12C5410系列单片机PWM/PCA应用及测试程序16

(5)STC12C5410AD系列单片机PWM输出程序23

(6)STC12C5410AD系列单片机PCA的高速脉冲输出25

(7)利用定时器0的溢出作为PCA模块的时钟输入源---利用PCA模块0实现了可调频率的PWM输出---利用PCA模块1重新实现了16位定时器29

一、STC12C5410/STC12C2052系列主要性能:

●高速:

1个时钟/机器周期,增强型8051内核,速度比普通8051快12倍

●宽电压:

5.5~3.8V,2.4~3.8V(STC12LE5410AD系列)

●低功耗设计:

空闲模式,掉电模式(可由外部中断唤醒)

●工作频率:

0~35MHz,相当于普通8051:

0~420MHz

---实际可到48MHz,相当于8051:

0~576MHz

●时钟:

外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置

●12K/10K/8K/6K/4K/2K字节片内Flash程序存储器,擦写次数10万次以上

●512字节片内RAM数据存储器

●芯片内E2PROM功能

●ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器

●通道,STC12C2052AD系列为8位ADC

●4通道捕获/比较单元(PWM/PCA/CCU),STC12C2052AD系列为2通道

---也可用来再实现4个定时器或4个外部中断(支持上升沿/下降沿中断)

●2个硬件16位定时器,兼容普通8051的定时器。

4路PCA还可再实现4个定时器

●硬件看门狗(WDT)

●高速SPI通信端口

●全双工异步串行口(UART),兼容普通8051的串口

●先进的指令集结构,兼容普通8051指令集

4组8个8位通用工作寄存器(共32个通用寄存器)

有硬件乘法/除法指令

●通用I/O口(27/23/15个),复位后为:

准双向口/弱上拉(普通8051传统I/O口)

可设置成四种模式:

准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏

每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA

STC12C5410系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代

8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。

4路

PWM,8路高速10位A/D转换。

特点:

1.增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051

2.工作电压:

5.5V-3.8V(5V单片机)/3.8V-2.4V(3V单片机)

3.工作频率范围:

0-35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz.

4.用户应用程序空间12K/10K/8K/6K/4K/2K/1K字节

5.片上集成512字节RAM

6.通用I/O口(27/23个),复位后为:

准双向口/弱上拉(普通8051传统I/O口)

可设置成四种模式:

准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏

每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA

7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器

可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片

8.EEPROM功能

9.看门狗

10.内部集成MAX810专用复位电路(外部晶体20M以下时,可省外部复位电路)

11.时钟源:

外部高精度晶体/时钟,内部R/C振荡器

用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟

常温下内部R/C振荡器频率为:

5.2MHz~6.8MHz

精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,应认为是4MHz~8MHz

12.共2个16位定时器/计数器,但可用PCA模块再产生4个定时器

13.外部中断2路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒

14.PWM(4路)/PCA(可编程计数器阵列)

---也可用来再实现4个定时器

---也可用来再实现4个外部中断(上升沿中断/下降沿中断均可分别或同时支持)

15.ADC,10位精度ADC,共8路

16.通用全双工异步串行口(UART),由于STC12系列是高速的8051,也可再用定时器软件实现多串口

17.SPI同步通信口,主模式/从模式

18.工作温度范围:

0-75℃/-40-+85℃

19.封装:

PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20(超小封状6.4mm×6.4mm,定货)

二、A/D转换及A/D转换测试程序

STC12C5410AD系列带A/D转换的单片机在P1口,有8路10位高速A/D转换器,速度可达100KHz。

P1.7-P1.0共8路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、频谱检测等。

上电复位

后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使

用的口可继续作为I/O口使用。

需作为A/D使用的口需先将其设置为高阻输入或开漏模式。

(?

在P1M0、P1M1中对相应的位进行设置。

ADC_START:

模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后为0。

ADC_FLAG:

模数转换器转换结束标志位,当A/D转换完成后,ADC_FLAG=1,要由软件清0。

——不管是A/D转换完成后由该位申请产生中断,还是由软件查询该标志位A/D转换是否结束,

当A/D转换完成后,ADC_FLAG=1,一定要软件清0。

SPEED1,SPEED0:

模数转换器转换速度控制位

ADC_POWER:

ADC电源控制位。

0:

关闭ADC电源;1:

打开A/D转换器电源.如果软件设置进入空闲模式,ADC电源会自动关闭.

启动AD转换前一定要确认AD电源已打开,AD转换结束后关闭AD电源可降低功耗,也可不关闭。

初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换

建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于高精度A/D转换

ADC_DATA/ADC_LOW2特殊功能寄存器:

A/D转换结果特殊功能寄存器

模拟/数字转换结果计算公式如下:

结果(ADC_DATA[7:

0],ADC_LOW2[1:

0])=1024xVin/Vcc

Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。

取ADC_DATA的8位为ADC转换的高8位,取ADC_LOW2的低2位为ADC转换的低2位,则为10位精度。

如果舍弃ADC_LOW2的低2位,只用ADC_DATA寄存器的8位,则A/D转换结果为8位精度。

结果ADC_DATA[7:

0]=256xVin/Vcc

(1)A/D转换典型应用线路,按键扫描

(2)A/D转换模块的参考电压源

STC12C5410AD系列单片机的参考电压源是输入工作电压Vcc,所以一般不用外接参考电压源。

7805的输出电压是5V,但实际电压可能是4.88V到4.96V,用户需要精度要求比较高的话,可在出厂时将

实际测出的工作电压值记录在单片机内部的EEPROM里面,以供计算。

如果有些用户的Vcc不固定,如电池供电,电池电压在5.3V-4.2V之间漂移,则Vcc不固定,就需

要在8路A/D转换的一个通道外接一个稳定的参考电压源,来计算出此时的工作电压Vcc,再计算出其他

几路A/D转换通道的电压。

如可在ADC转换通道的第七通道外接一个1.25V的基准参考电压源,由此求出此时的工作电压Vcc,

再计算出其它几路A/D转换通道的电压。

(3)A/D转换功能汇编程序示例

;/*---STCInternationalLimited----------------*/

;/*---演示STC12C5410AD系列MCU的A/D转换功能-*/

;/*---演示STC12C2052AD系列MCU的A/D转换功能-*/

;如果要在程序中使用或在文章中引用该程序,请在程序中或文章中注明使用了宏晶科技的资料及程序

;ADCDEMO_5410_ASM.ASM

-----汇编程序演示STC12C5410AD系列MCU的A/D转换功能。

;本演示程序在STC-ISPVer3.0A.PCB的下载编程工具上测试通过,相关的A/D转换结果在P1口上显示

;转换结果也以16进制形式输出到串行口,可以用串行口调试程序观察输出结果。

;时钟18.432MHz,波特率=9600。

;转换结果也在P1口利用LED显示出来,方便观察。

LED_MCU_STARTEQUP3.7

ADC_CONTREQU0C5H;A/D转换寄存器

ADC_DATAEQU0C6H;A/D转换结果寄存器,为10位A/D转换结果的高8位

;ADC_LOW2EQU0BEH;A/D转换结果寄存器,低2位有效,为10位A/D转换结果的低2位

;如果不用ADC_LOW2的低2位,只用ADC_DATA的8位,则为8位A/D转换

P1M0EQU91H;P1口模式选择寄存器0

P1M1EQU92H;P1口模式选择寄存器1

ADC_Power_On_Speed_Channel_0EQU11100000B;P1.0作为A/D输入

ADC_Power_On_Speed_Channel_1EQU11100001B;P1.1作为A/D输入

ADC_Power_On_Speed_Channel_2EQU11100010B;P1.2作为A/D输入

ADC_Power_On_Speed_Channel_3EQU11100011B;P1.3作为A/D输入

ADC_Power_On_Speed_Channel_4EQU11100100B;P1.4作为A/D输入

ADC_Power_On_Speed_Channel_5EQU11100101B;P1.5作为A/D输入

ADC_Power_On_Speed_Channel_6EQU11100110B;P1.6作为A/D输入

ADC_Power_On_Speed_Channel_7EQU11100111B;P1.7作为A/D输入

;-------------------------------------------------

;定义变量

ADC_Channel_0_ResultEQU30H;0通道A/D转换结果

ADC_Channel_1_ResultEQU31H;1通道A/D转换结果

ADC_Channel_2_ResultEQU32H;2通道A/D转换结果

ADC_Channel_3_ResultEQU33H;3通道A/D转换结果

ADC_Channel_4_ResultEQU34H;4通道A/D转换结果

ADC_Channel_5_ResultEQU35H;5通道A/D转换结果

ADC_Channel_6_ResultEQU36H;6通道A/D转换结果

ADC_Channel_7_ResultEQU37H;7通道A/D转换结果

;--------------------------------------------------

ORG0000H

LJMPMAIN

ORG0050H

MAIN:

CLRLED_MCU_START;MCU工作指示灯LED_MCU_STARTEQUP3.7

MOVSP,#7FH;设置堆栈

ACALLInitiate_RS232;初始化串口

ACALLADC_Power_On;开ADC电源,第一次使用时要打开内部模拟电源

;开ADC电源,可适当加延时,1mS以内就足够了

ACALLSet_P12_Open_Drain;设置P1.2为开漏

ACALLSet_ADC_Channel_2;设置P1.2作为A/D转换通道

ACALLGet_AD_Result;测量电压并且取A/D转换结果

ACALLSend_AD_Result;发送转换结果到PC机

ACALLSet_P12_Normal_IO;设置P1.2为普通IO

MOVA,ADC_Channel_2_Result;用P1口显示A/D转换结果

CPLA

MOVP1,A

Wait_Loop:

SJMPWait_Loop;停机

;-------------------------------------------------------------

;-------------------------------------------------------------

;-------------------------------------------------------------

;-------------------------------------------------------------

Initiate_RS232:

;串口初始化

CLRES;禁止串口中断

MOVTMOD,#20H;设置T1为波特率发生器

MOVSCON,#50H;0101,00008位数据位,无奇偶校验

MOVTH1,#0FBH;18.432MHz晶振,波特率=9600

MOVTL1,#0FBH

SETBTR1;启动T1

RET

;--------------------------------------------------------------

Send_Byte:

CLRTI

MOVSBUF,A

Send_Byte_Wait_Finish:

JNBTI,Send_Byte_Wait_Finish

CLRTI

RET

;--------------------------------------------------------------

ADC_Power_On:

PUSHACC

ORLADC_CONTR,#80H;开A/D转换电源

MOVA,#20H

ACALLDelay;开A/D转换电源后要加延时,1mS以内就足够了

POPACC

RET

;-------------------------------------------------------------

;设置P1.2,设置A/D通道所在的I/O为开漏模式

Set_P12_Open_Drain:

PUSHACC

MOVA,#00000100B

ORLP1M0,A

ORLP1M1,A

POPACC

RET

;-------------------------------------------------------------

;设置P1.2为普通IO

Set_P12_Normal_IO:

PUSHACC

MOVA,#11111011B

ANLP1M0,A

ANLP1M1,A

POPACC

RET

;-------------------------------------------------------------

Set_ADC_Channel_2:

MOVADC_CONTR,#ADC_Power_On_Speed_Channel_2

;选择P1.2作为A/D转换通道

MOVA,#05H;更换A/D转换通道后要适当延时,使输入电压稳定

;以后如果不更换A/D转换通道的话,不需要加延时

ACALLDelay;切换A/D转换通道,加延时20uS~200uS就可以了,与输入电压源的内阻有关

;如果输入电压信号源的内阻在10K以下,可不加延时

RET

;-------------------------------------------------------------

Send_AD_Result:

PUSHACC

MOVA,ADC_Channel_2_Result;取AD转换结果

ACALLSend_Byte;发送转换结果到PC机

POPACC

RET

;----------------------------------------------------------

Get_AD_Result:

PUSHACC;入栈保护

MOVADC_DATA,#0

ORLADC_CONTR,#00001000B;启动AD转换

Wait_AD_Finishe:

MOVA,#00010000B;判断AD转换是否完成

ANLA,ADC_CONTR

JZWait_AD_Finishe;AD转换尚未完成,继续等待

ANLADC_CONTR,#11100111B;清0ADC_FLAG,ADC_START位,停止A/D转换

MOVA,ADC_DATA

MOVADC_Channel_2_Result,A;保存AD转换结果

POPACC

RET

;---------------------------------------------------------------

Delay:

PUSH02;将寄存器组0的R2入栈

PUSH03;将寄存器组0的R3入栈

PUSH04;将寄存器组0的R4入栈

MOVR4,A

Delay_Loop0:

MOVR3,#200;2CLOCK---------------------+

Delay_Loop1:

;|

MOVR2,#249;2CLOCK------+|

Delay_Loop:

;|1002CLOCK|200406CLOCK

DJNZR2,Delay_Loop;4CLOCK||

DJNZR3,Delay_Loop1;4CLOCK------+|

DJNZR4,Delay_Loop0;4CLOCK---------------------+

POP04

POP03

POP02

RET

;----------------------------------------------------------------

END

三、STC12C5410AD系列单片机的PCA/PWM的应用

(1)用SST 单片机的PCA功能产生PWM 脉冲(转)

一、程序说明:

SST单片机带有5路PCA模块,PCA功能比普通的单片机相比提供更强的计时性,同时更少CPU的干预,用它可以减少软件的开销和改进精度。

利用PCA的脉冲宽度调制(PWM)模式可以产生一个8位PWM,它通过比PCA定时器的低位(CL)和比较寄存器的低位(CCAPnL)产生。

当CL=CCAPnL是输出为高。

要进入这个模式,可以对CCAPMn的PWM和ECOM位置位。

在PWM模式,输出的频率决定于PCA定时器的源。

由于只有一对CH和CL寄存器,所有模块共享PCA定时器和频率。

输出的占空比由装在高位CCAPnH的值控制。

由于写入CCAPnH寄存器不是同步的,写入高位的值不会马上装入CCAPnL做比较,直到输出的另一个周期(当CL从255到0翻转)。

用下面的公式计算任何占空比CCAPnH值:

CCAPnH=256(1-占空比)

CCAPnH是8位整数,占空比是分数。

脉冲宽度调制频率

PCA定时器模式

PWM频率

12MHz

16MHz

1/12振荡频率

3.9KHz

5.2KHz

1/4振荡频率

11.8KHz

15.6KHz

定时器0溢出:

8位

16位

8位自动重装

 

15.5Hz

0.06Hz

3.9KHz到15.3KHz

 

20.3Hz

0.08Hz

5.2KHz到20.3KHz

外部输入(最大)

5.9KHz

7.8KHz

 二、相关寄存器介绍:

PCA定时器/计数器模式寄存器(CMOD)

位置

7

6

5

4

3

2

1

0

D9H

CIDL

WDTE

-

-

-

CPS1

CPS0

ECF

标志功能

CIDL计数器空闲控制,CIDL=0时,PCA在空闲模式下继续工作。

CIDL=1时,PCA在空闲模式下关闭。

WDTE看门狗定时器使能:

WDTE=0时,禁止PCA模块4的看门狗功能。

WDTE=1时,使能。

CPS1PCA计数脉宽选择位1

CPS0PCA计数脉宽选择位0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1