经典STC12C5410AD程序和在PCAPWM的应用.docx
- 文档编号:9253325
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:96
- 大小:1.07MB
经典STC12C5410AD程序和在PCAPWM的应用.docx
《经典STC12C5410AD程序和在PCAPWM的应用.docx》由会员分享,可在线阅读,更多相关《经典STC12C5410AD程序和在PCAPWM的应用.docx(96页珍藏版)》请在冰豆网上搜索。
经典STC12C5410AD程序和在PCAPWM的应用
STC12C5410AD_程序和在PCA_PWM的应用
一、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
要进入这个模式,可以对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
(2)产生精确PWM波形的DDS电路(转)
产生精确PWM波形的DDS电路
脉宽调制是一种调制或改变某个方波的简单方法。
方波占空比基本形式是随输入信号变化的。
占空比是指方波的高电平时间和低电平时间之比。
一个50%占空比的波形会具有50%的高电平时间和50%的低电平时间,而一个10%占空比的波形则具有10%的高电平时间和90%的低电平时间。
PWM有许多应用,其中包括电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器。
在诸如MEMS(微机电系统)镜面传动器控制等应用系统中,有一个反馈系统必须对PWM进行调节。
有个电路监测并控制PWM输出信号,然后根据应用系统要求改变占空比。
输出频率对传动器进行调节,而占空比则设定传动器的速度。
反馈回路控制阈值电平。
本“设计实例”描述带反馈控制的高频率高分辨率PWM。
首先,探讨一下PWM理论也许是有益的。
图1 一个DDS电路可与一个比较器和一个带内部DAC和ADC的微控制器组合在一起,以便产生高分辨率的PWM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 STC12C5410AD 程序 PCAPWM 应用