精华内容
下载资源
问答
  • STC15W4K32S4中文手册

    2018-03-17 09:20:00
    STC15W4K32S4中文手册,KEIL编程使用.STC15W4K32S4中文手册,KEIL编程使用.
  • STC15W4K32S4 4个串口同时收发程序,STC15W4K32S4 4个串口同时收发程序,STC15W4K32S4 4个串口同时收发程序STC15W4K32S4 4个串口同时收发程序
  • STC15W4K32S4接口技术

    2019-02-12 21:55:58
    STC15W4K32S4系列单片机是STC增强型8051单片机最新技术结晶,宽电源电压(2.4~5.5V),无须转换芯片可直接与PC机USB接口进行通信;增强型8051单片机集成了上电复位电路与高精准R/C振荡器,给单片机芯片加上电源就可...
  • 基于STC15W4K32S4的智能养殖系统.pdf
  • 基于STC15W4K32S4芯片的智能晒衣装置.pdf
  • STC15W4K32S详细资料

    2018-10-29 13:57:39
    STC15W4K32S单片机详细资料 管脚排列、I/O口功能说明等 STC官方资料
  • Proteus8.9的VSM Studio使用的SDCC仿真_STC15W4k32S4_002_USART编程代码和仿真操作实验。
  • STC15/STC15F2K60S2/STC15W4K32S4系列读取MPU6050陀螺仪串口显示代码,stc12系列可用,stc的1T系列通用
  • ADC——基于STC15W4K32S4

    千次阅读 2020-06-04 17:11:46
    文章目录ADC——基于STC15W5K32S4一、逼近式ADC原理二、STC15W4K32S4单片机的A/D结构与A/D相关的寄存器1.P1口模拟功能控制寄存器P1ASF2. ADC控制寄存器ADC_CONTR3. ADC转换结果调整寄存器位——ADRJ4.A/D转换结果...

    ADC——基于STC15W5K32S4

    将模拟信号转换成数字信号的电路,我们称其为模数转换器,简称A/D转换器或ADC(Analog-to-digital converter)。同理,将数字信号转换成模拟信号的电路称为数模转换器,简称D/A转换器或DAC,单片机能够存储的数据都是数字类型的。

    一、逼近式ADC原理

    在进行转化时,一般都需要经过采样、量化和编码三个步骤。A/D转换的过程是需要时间的,我们可以在连续变化的模拟量上按一定的时间规律取得对应的瞬时值,量化后以数字的形式输出,从而可以实现从模拟量到数字量的转化。
    在这里插入图片描述

    二、STC15W4K32S4单片机的A/D结构

    在这里插入图片描述
    STC15系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、10位ADC、转换结果寄存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。

    STC15系列单片机的ADC是逐次比较性ADC,逐次比较型ADC由一个比较器和D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值,逐次比较型A/D转换器具有速度高,功耗低等优点。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.P1口模拟功能控制寄存器P1ASF

    在这里插入图片描述

    2. ADC控制寄存器ADC_CONTR

    在这里插入图片描述

    3. ADC转换结果调整寄存器位——ADRJ

    在这里插入图片描述

    4.A/D转换结果寄存器ADC_RES、ADC_RESL

    在这里插入图片描述
    在这里插入图片描述

    5.中断允许寄存器IE

    在这里插入图片描述

    三、ADC转换编程

    • 设置P1口中的相应口线作为AD转换模拟量输入通道(设置P1ASF寄存器);
    • 清除结果寄存器(ADC_RES、ADC_RESL为0);
    • 打开ADC电源(设置ADC_POWER位)
    • 适当延时,等ADC内部模拟电源稳定。一般延时1ms即可;
    • 选择ADC通道(设置ADC_CONTR中的CHS2-CHS0位);
    • 根据需要设置转换结果存储格式(设置CLK_DIV中ADRJ位);
    • 查询AD转换结束标志ADC_FLAG,判断AD转换是否完成,若完成,则读出AD转换结果(保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。
    • 采用中断方式,还需进行中断设置(中断允许和中断优先级);
    • 在中断服务程序中读取AD转换结果,并将ADC中断请求标志ADC_FLAG清零。

    四、代码

    ADC初始化

    /*----------------------------
    初始化ADC
    ----------------------------*/
    void ADCinit(void)
    {
    	P1ASF = 0xff;		//P1做ADC               
    	ADC_RES = 0;		//清除结果寄存器
    	ADC_RESL = 0;
    	ADC_CONTR = 0xE0;	//90T, ADC power on
    	delay_ms(5);                       //ADC上电并延时
    }
    

    查询法读一次ADC结果

    //========================================================================
    // 函数: u16	Get_ADC10bitResult(u8 channel)
    // 描述: 查询法读一次ADC结果.
    // 参数: channel: 选择要转换的ADC.
    // 返回: 10位ADC结果.
    // 版本: V1.0, 2012-10-22
    //========================================================================
    u16	Get_ADC10bitResult(u8 channel)	//channel = 0~7
    {
    	ADC_RES = 0;
    	ADC_RESL = 0;
    
    	ADC_CONTR = (ADC_CONTR & 0xe0) | 0x08 | channel; 	//start the ADC
    	NOP(4);
    
    	while((ADC_CONTR & 0x10) == 0)	;	//wait for ADC finish
    	ADC_CONTR &= ~0x10;		//清除ADC结束标志
    	return	(((u16)ADC_RES << 2) | (ADC_RESL & 3));
    }
    

    ADC键盘

    
    /***************** ADC键盘计算键码 *****************************
    本ADC键盘方案在很多实际产品设计中, 验证了其稳定可靠, 即使按键使用导电膜,都很可靠.
    16个键,理论上各个键对应的ADC值为 (1024 / 16) * k = 64 * k, k = 1 ~ 16, 特别的, k=16时,对应的ADC值是1023.
    但是实际会有偏差,则判断时限制这个偏差, ADC_OFFSET为+-偏差, 则ADC值在 (64*k-ADC_OFFSET) 与 (64*k+ADC_OFFSET)之间为键有效.
    间隔一定的时间,就采样一次ADC,比如10ms.
    为了避免偶然的ADC值误判, 或者避免ADC在上升或下降时误判, 使用连续3次ADC值均在偏差范围内时, ADC值才认为有效.
    以上算法, 能保证读键非常可靠.
    **********************************************/
    #define	ADC_OFFSET	16
    void	CalculateAdcKey(u16 adc)
    {
    	u8	i;
    	u16	j;
    	
    	if(adc < (64-ADC_OFFSET))
    	{
    		ADC_KeyState = 0;	//键状态归0
    		ADC_KeyHoldCnt = 0;
    	}
    	j = 64;
    	for(i=1; i<=16; i++)
    	{
    		if((adc >= (j - ADC_OFFSET)) && (adc <= (j + ADC_OFFSET)))	break;	//判断是否在偏差范围内
    		j += 64;
    	}
    	ADC_KeyState3 = ADC_KeyState2;
    	ADC_KeyState2 = ADC_KeyState1;
    	if(i > 16)	ADC_KeyState1 = 0;	//键无效
    	else						//键有效
    	{
    		ADC_KeyState1 = i;
    		if((ADC_KeyState3 == ADC_KeyState2) && (ADC_KeyState2 == ADC_KeyState1) &&
    		   (ADC_KeyState3 > 0) && (ADC_KeyState2 > 0) && (ADC_KeyState1 > 0))
    		{
    			if(ADC_KeyState == 0)	//第一次检测到
    			{
    				KeyCode  = i;	//保存键码
    				ADC_KeyState = i;	//保存键状态
    				ADC_KeyHoldCnt = 0;
    			}
    			if(ADC_KeyState == i)	//连续检测到同一键按着
    			{
    				if(++ADC_KeyHoldCnt >= 100)	//按下1秒后,以10次每秒的速度Repeat Key
    				{
    					ADC_KeyHoldCnt = 90;
    					KeyCode  = i;	//保存键码
    				}
    			}
    			else	ADC_KeyHoldCnt = 0;	//按下时间计数归0
    		}
    	}
    }
    
    
    展开全文
  • Proteus8.9的VSM Studio使用的SDCC仿真_STC15W4k32S4_003Keys编程代码和仿真操作实验
  • STC15W4K32S4系列概述及寄存器简介

    千次阅读 2021-03-13 15:08:18
    STC15W4K32S4系列新增6通道增强型带死区控制高精度 PWM波形发生器应用 STC15W4K32S4系列的单片机集成了一组(各自独立6路)增强型的PWM波形发生器。PWM波形发生器内部有一个15位的PWM计数供6路PWM使用,用户可以设置每...

    STC15W4K32S4系列新增6通道增强型带死区控制高精度

    PWM波形发生器应用

        STC15W4K32S4系列的单片机集成了一组(各自独立6路)增强型的PWM波形发生器。PWM波形发生器内部有一个15位的PWM计数供6路PWM使用,用户可以设置每路PWM的初始电平。另外,PWM波形发生器为每路PWM又设计了两个控制波形翻转的计数器T1/T2,可以非常灵活的每路PWM的高低电平宽度,从而达到对PWM的占空比以及PWM的输出延迟控制的目的。由于6路PWM是各自独立的,且每路的初始状态可以进行设定,所以用户可以将其中的任意两路配合起来使用,即可实现互补对称输出以及死区控制等特殊应用。

        增强型的PWM波形发生器还设计了对外部异常事件(包括外部端口P2.4的电平异常、比较器比较结果异常)进行监控的功能,可用于紧急关闭PWM输出。PWM波形发生器还可以在15位的PWM计数器归零时发出外部事件(ADC转换).

    STC15W4K32S4系列增强型PWM输出端口定义如下:

    [PWM2:P3.7,PWM3:P2.1,PWM4:P2.2,PWM5:P2.3,PWM6:P1.6,PWM7:P1.7]

        每路PWM的输出端口都可以使用特殊功能寄存器位CnPINSEL分别独立的切换到第二组

    [PWM2_2:P2.7,PWM3_2:P4.5,PWM4_2:P4.4,PWM5_2:P4.2,PWM6_2:P0.7,PWM7_2:P0.6]

        所有与PWM相关的端口,在上电后均为高阻输入态,必须在程序中将这些口设置为双向口货强推挽输出模式才可以正常输出波形

    端口模式设置相关特殊功能寄存器:

    符号描述地址位地址及符号初始值
    B7B6B5B4B3B2B1B0
    P1MM1P1模式配置191H0000,0000
    P1M0P1模式配置092H0000,0000
    P0M1P0模式配置193H0000,0000
    P0M0P0模式配置094H0000,0000
    P2M1P2模式配置195H0000,0000
    P2M0P2模式配置096H0000,0000
    P3M1P3模式配置1B10000,0000
    P3M0P3模式配置0B20000,0000
    P4M1P4模式配置1B30000,0000
    P4M0P4模式配置0B40000,0000

    端口模式设置:

    PXM1PXM0模式
    00准双向口
    01强推挽输出
    10高阻输入
    11开漏输出

      若需要正常使用与PWM相关的端口,则需要将相应的端口设置为双准向口或强推挽输出。

      增强型PWM波形发生器相关的特殊功能寄存器:

    符号描述地址位地址及符号初始值
    B7B6B5B4B3B2B1B0
    P_SW2端口配置寄存器BAHEAXSFR000S4_SS3_SS2_S0000,0000
    PWMCFGPWM配置F1H0000,0000
    PWMCRPWM控制F5H0000,0000
    PWMIF中断标志F6HX000,0000
    PWMFDCRPWM外部异常控制F7HXX00,0000
    PWMCHPWM计数器高位FFF0HPWMCH[14:8]X000,0000
    PWMCLPWM计数器低位FFF1HPWMCl[7:0]0000,0000
    PWMCKSPWM时钟选择FFF2HSELT2,PS[3:0]XXX0,0000
    PWM2T1HPWM2T1计数高位FF00HPWM2T1H [14:8]X000,0000
    PWM2T1LPWM2T1计数低位FF01HPWM2T1HL[7:0]0000,0000
    PWM2T2HPWM2T2计数高位FF02HPWM2T2H[14:8]X000,0000
    PWM2T2LPWM2T2计数低位FF03HPWM2T2L[7:0]0000,0000
    PWM2CRPWM2控制FF04HXXXX,0000
    PWM3T1HPWM3T1计数高位FF10HPWM3T1H[14:8]X000,0000
    PWM3T1LPWM3T1计数低位FF11HPWM3T1L[7:0]0000,0000
    PWM3T2HPWM3T2计数高位FF12HPWM3T2H[14:8]X000,0000
    PWM3T2LPWM3T2 计数低位FF13HPWM3T2L[7:0]0000,0000
    PWM3CRPWM3控制FF14HXXXX,0000
    PWM4T1HPWM4T1计数高位FF20HPWM4T1H[14:8]X000,0000
    PWM4T1LPWM4T1计数低位FF21HPWM4T1L[7:0]0000,0000
    PWM4T2HPWM4T2计数高位FF22HPWM4T2H[14:8]X000,0000
    PWM4T2LPWM4T2计数低位FF23HPWM4T2L[7:0]0000,0000
    PWM4CRPWM4控制FF24HXXXX,0000
    PWM5T1HPWM5T1计数高位FF30HPWM5T1H[14:8]X000,0000
    PWM5T1LPWM5T1计数低位FF31HPWM5T1L[7:0]0000,0000
    PWM5T2HPWM5T2计数高位FF32HPWM5T2H[14:8]X000,0000
    PWM5T2LPWM5T2计数低位FF33HPWM5T2L[7:0]0000,0000
    PWM5CRPWM5控制FF34HXXXX,0000
    PWM6T1HPWM6T1计数高位FF40HPWM5T1H[14:8]X000,0000
    PWM6T1LPWM6T1计数低位FF41HPWM5T1L[7:0]0000,0000
    PWM6T2HPWM6T2计数高位FF42HPWM5T2H[14:8]X000,0000
    PWM6T2LPWM6T2计数低位FF43HPWM5T2L[7:0]0000,0000
    PWM6CRPWM6控制FF44HXXXX,0000
    PWM7T1HPWM7T1计数高位FF50HX000,0000
    PWM7T1LPWM7T1计数低位FF51H0000,0000
    PWM7T2HPWM7T2计数高位FF52HX000,0000
    PWM7T2LPWM7T2计数低位FF53H0000,0000
    PWM7CRPWM7控制FF54HXXXX,0000

    端口配置寄存器P_SW2

    地址:BAH 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    EAXSFR000S4_SS3_SS2_s

    EAXSFR:扩展SFR访问控制使能

    0:MOVX A,@DPTR/MOVX @DPTR,指令的操作对象为扩展RAM(XRAM)

    1:MOVX A,@DPTR/MOVX @DPTR,指令的操作对象为扩展SFR(XSFR)

      注意:若要访问PWM在扩展RAM区的特殊功能寄存器,必须先将EAXSFR位置为1

    BIT6,BIT5,BIT4为内部测试使用,用户必须填0

    PWM配置寄存器PWMCFG

    地址:F1H 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    CBTADCC7INIC6INIC5INIC4INIC3INIC2INI

    CBTADC:PWM计数器归零时(CBIF==1时)触发ADC转换

    0:PWM计数器归零时不触发ADC转换

    1:PWM计数器归零时自动触发ADC转换。(注:前提是PWM和PWM必须使能,即ENPWM1&ADCON1)

    CnINI:设置PWM输出端口的初始电平

    0:PWM输出端口初始电平为低电平

    1:PWM输出端口的初始电平为高电平

    PWM控制寄存器PWMCR

    地址:F5H 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    ENPWMECBIENC70ENC60ENC50ENC40ENC30ENC20

    ENPWM使能增强型PWM波形发生器

    0:关闭PWM波形发生器

    1:使能PWM波形发生器,PWM计数器开始计数

    ENCBI:PWM计数器归零中断使能位

    0:关闭PWM计数器归零中断(CBIF依然会被硬件置位)

    1:使能PWM计数器归零中断

    ENCnO:PWM输出使能位

    0:相应PWM通道的端口为GPIO

    1:相应PWM通道的端口为PWM输出口,受PWM波形发生器控制

    PWM中断标志寄存器PWMIF

    地址:F6H 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    CBIFC7IFC6IFC5IFC4IFC3IFC2IF

    CBIF:PWM计数器归零中断标志位

    当PWM计数器归零时,硬件自动将此位置1。当CBIF==1,程序会跳转到相应中断入口执行中断服务。需要软件清零。

    CnIF:第n通道的PWM中断标志位

    可设置在翻转点1和翻转点2触发CnIF(详见ECnT1SI和ECnT2SI)。当PWM发生翻转时硬件自动将此位置1。当EPWMnI==1,程序会跳转到相应中断入口执行中断服务程序。需要软件清零。

    PWM外部异常控制寄存器PWMFDCR

    地址:F7H 初始值:XX00,0000B

    B7B6B5B4B3B2B1B0
    ENFDFLTFLIOEFDIFDCMPFDIOFDIF

    ENFD:PWM外部异常检测功能控制位

    0:关闭PWM的外部异常检测功能

    1:使能PWM的外部异常检测功能

    FLTFLIO:发生PWM外部异常时对PWM输出口控制位

    0:发生外部异常时,PWM的输出口不做任何改变

    1:发生外部异常时,PWM的输出口立即被设置为高阻输入模式。(只有ENCnO==1所对应的端口才会被强制悬空)

    EFDI:PWM异常检测中断使能位

    0:关闭PWM异常检测中断(FDIF依然会被硬件置位)

    1:使能PWM异常检测中断

    FDCMP:设定PWM异常检测源为比较器的输出

    0:比较器与PWM无关

    1:当比较器的输出由低变高时,触发PWM异常

    FDIO:设定PWM异常检测源为端口P2.4的状态

    0:P2.4的状态与PWM无关

    1:当P2.4的电平由低变高时,触发PWM异常

    FDIF:PWM异常检测中断标志位

    当发生PWM异常(比较器的输出由低变高或者P2.4的电平由低变高)时,硬件自动将此位置1.

    当EFDI==1时,程序会跳转到相应中断入口执行中断服务程序,需要软件清零。

    PWM计数器的高字节PWMCH(高7位)

    地址:FFF0H(XSFR) 初始值:X000,0000B

    B7B6B5B4B3B2B1B0
    PWMCH[14:8]

    PWM计数器的低字节PWMCL(低8位)

    地址:FFF1H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWMCL[7:0]

    PWM计数器位一个15位的寄存器,可设定1~32767之间的任意值作为PWM的周期。PWM波形发生器内部的计数器从0开始计数,每个PWM时钟周期递增1,当内部计数器的计数值达到[PWMCH,PWMCL]所设定的PWM周期时,PWM波形发生器内部的计数器将会从0重新开始开始计数,硬件会自动将PWM归零中断中断标志位CBIF置1,若ECBI==1,程序将跳转到相应中断入口执行中断服务程序。

    PWM时钟选择寄存器PWMCKS

    地址:FFF2H(XSFR) 初始值:xxx0,0000B

    B7B6B5B4B3B2B1B0
    SELT2PS[3:0]

    SELT2:PWM时钟源选择

    0:PWM时钟源为系统时钟经分频器分频之后的时钟

    1:PWM时钟源为定时器2的溢出脉冲

    PS[3:0]:系统时钟预分频参数。当SELT2==0时,PWM时钟为系统时钟/(PS[3:0]+1)

    PWM2的第一次翻转计数器的高字节PWM2T1H

    地址:FF00H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM2T1H[14:8]

    PWM2的第一次翻转计数器的低字节PWM2T1L

    地址:FF01H 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM2T1L[7:0]

    PWM2的第二次翻转计时器的高字节PWM2T2H

    地址:FF02H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    PWM2T2H[14:8]

    PWM2的第二次翻转计时器的低字节PWM2T2L

    地址:FF03H 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM2T2L[7:0]

    PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。

    PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

    PWM2_PS的控制寄存器PWM2CR

    地址:FF04H(XSFR) 初始值:XXXX,0000B

    B7B6B5B4B3B2B1B0
    ----PWM_PSEPWM2IEC2T2SIEC2T1SI

    PWM_PS:PWM2输出管脚选择位

    0:PWM2的输出管脚为PWM2:P3.7

    1:PWM2的输出管脚为PWM2_2:P2.7

    EPWM2I:PWM2中断使能控制位

    0:关闭PWM2中断

    1:使能PWM2中断,v当C2IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。

    EC2T2SI:PWM2的T2匹配发生波形翻转时的中断控制位

    0:关闭T2翻转时中断

    1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将跳转到相应中断入口执行中断服务程序。

    EC2T1SI:PWM2的T1匹配发生波形翻转时的中断控制位

    0:关闭T1翻转时中断

    1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C2IF置1,此时若EPWM2I==1,则程序将跳转到相应中断入口执行中断服务程序。

    PWM3的第一次翻转计数器的高字节PWM3T1H

    地址:FF10H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    PWM3T1H[14:8]

    PWM3的第一次翻转计数器的低字节PWM3T1L

    地址:FF11H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM3T1L[7:0]

    PWM3的第二次翻转计时器的高字节PWM3T2H

    地址:FF12H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM3T2H[14:8]

    PWM3的第二次翻转计时器的低字节PWM3T2L

    地址:FF13H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM3T2L[7:0]

    PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。

    PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

    PWM3的控制寄存器PWM3CR

    地址:FF14H(XSFR) 初始值:xxxx,0000B

    B7B6B5B4B3B2B1B0
    ----PWM3_PSEPWM3IEC3T2SIEC3T1SI

    PWM3_PS:PWM3输出管脚选择位

    0:PWM3的输出管脚为PWM3:P2.1

    1:PWM3的输出管脚为PWM3_2:P4.5

    EPWM3I:PWM3中断使能控制位

    0:关闭PWM3中断

    1:使能PWM3中断,当C3IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。

    EC3T2SI:PWM3的T2匹配发生波形翻转时的中断控制位

    0:关闭T2翻转时中断

    1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将跳转到相应中断入口执行中断服务程序。?

    EC3T1SI:PWM3的T1匹配发生波形翻转时的中断控制位

    0:关闭T1翻转时中断

    1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C3IF置1,此时若EPWM3I==1,则程序将跳转到相应中断入口执行中断服务程序。

    PWM4的第一次翻转计数器的高字节PWM4T1H

    地址:FF20H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM4T1H[14:8]

    PWM4的第一次翻转计数器的低字节PWM4T1L

    地址:FF21H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM4T1L[7:0]

    PWM4的第二次翻转计时器的高字节PWM4T2H

    地址:FF22H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM4T2H[14:8]

    PWM4的第二次翻转计时器的低字节PWM4T2L

    地址:FF23H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM4T2L[7:0]

    PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。

    PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

    PWM4的控制寄存器PWM4CR

    地址:FF24H(XSFR) 初始值:xxxx,0000B

    B7B6B5B4B3B2B1B0
    --PWM4_PSEPWM4IEC4T2SIEC4T1SI

    PWM4_PS:PWM4输出管脚选择位

    0:PWM4的输出管脚为PWM4:P2.2

    1:PWM4的输出管脚为PWM4_2:P4.4

    EPWM4I:PWM4中断使能控制位

    0:关闭PWM4中断

    1:使能PWM4中断,当C4IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。

    EC4T2SI:PWM4的T2匹配发生波形翻转时的中断控制位

    0:关闭T2翻转时中断

    1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将跳转到相应中断入口执行中断服务程序。

    EC4T1SI:PWM4的T1匹配发生波形翻转时的中断控制位

    0:关闭T1翻转时中断

    1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将跳转到相应中断入口执行中断服务程序。

    PWM5的第一次翻转计数器的高字节PWM5T1H

    地址:FF30H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM5T1H[14:8]

    PWM5的第一次翻转计数器的低字节PWM5T1L

    地址:FF31H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM5T1L[7:0]

    PWM5的第二次翻转计时器的高字节PWM5T2H

    地址:FF32H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM5T2H[14:8]

    PWM5的第二次翻转计时器的低字节PWM5T2L

    地址:FF33H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM5T2L[7:0]

    PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。

    PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转.

    PWM5的控制寄存器PWM5CR

    地址:FF34H(XSFR) 初始值:xxxx,0000B

    B7B6B5B4B3B2B1B0
    ----PWM5_PSEPWM5IEC5T2SIEC5T1SI

    PWM5_PS:PWM5输出管脚选择位

    0:PWM5的输出管脚为PWM5:P2.3

    1:PWM5的输出管脚为PWM5_2:P4.2

    EPWM5I:PWM5中断使能控制位

    0:关闭PWM5中断

    1:使能PWM5中断,当C5IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。

    EC5T2SI:PWM5的T2匹配发生波形翻转时的中断控制位

    0:关闭T2翻转时中断

    1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将跳转到相应中断入口执行中断服务程序。

    EC5T1SI:PWM5的T1匹配发生波形翻转时的中断控制位

    0:关闭T1翻转时中断

    1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C5IF置1,此时若EPWM5I==1,则程序将跳转到相应中断入口执行中断服务程序。

    PWM6的第一次翻转计数器的高字节PWM6T1H

    地址:FF40H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM6T1H[14:8]

    PWM6的第一次翻转计数器的低字节PWM6T1L

    地址:FF41H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM6T1L[7:0]

    PWM6的第二次翻转计时器的高字节PWM6T2H

    地址:FF42H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    PWM6T2H[14:8]

    PWM6的第二次翻转计时器的低字节PWM6T2L

    地址:FF43H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM6T2L[7:0]

    PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。

    PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

    PWM6的控制寄存器PWM6CR

    地址:FF44H(XSFR) 初始值:xxxx,0000B

    B7B6B5B4B3B2B1B0
    ----PWM6_PSEPWM6IEC6T2SIEC6T1SI

    PWM6_PS:PWM6输出管脚选择位

    0:PWM6的输出管脚为PWM6:P1.6

    1:PWM6的输出管脚为PWM6_2:P0.7

    EPWM6I:PWM6中断使能控制位

    0:关闭PWM6中断

    1:使能PWM6中断,当C6IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。

    EC6T2SI:PWM6的T2匹配发生波形翻转时的中断控制位

    0:关闭T2翻转时中断

    1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将跳转到相应中断入口执行中断服务程序。?

    EC6T1SI:PWM6的T1匹配发生波形翻转时的中断控制位

    0:关闭T1翻转时中断

    1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C6IF置1,此时若EPWM6I==1,则程序将跳转到相应中断入口执行中断服务程序。

    PWM7的第一次翻转计数器的高字节PWM7T1H

    地址:FF50H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM7T1H[14:8]

    PWM7的第一次翻转计数器的低字节PWM7T1L

    地址:FF51H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM7T1L[7:0]

    PWM7的第二次翻转计时器的高字节PWM7T2H

    地址:FF52H(XSFR) 初始值:x000,0000B

    B7B6B5B4B3B2B1B0
    -PWM7T2H[14:8]

    PWM7的第二次翻转计时器的低字节PWM7T2L

    地址:FF53H(XSFR) 初始值:0000,0000B

    B7B6B5B4B3B2B1B0
    PWM7T2L[7:0]

    PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。

    PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。

    PWM7的控制寄存器PWM7CR

    地址:FF54H(XSFR) 初始值:xxxx,0000B

    B7B6B5B4B3B2B1B0
    ----PWM7_PSEPWM7IEC7T2SIEC7T1SI

    PWM7_PS:PWM7输出管脚选择位

    0:PWM7的输出管脚为PWM7:P1.7

    1:PWM7的输出管脚为PWM7_2:P0.6

    EPWM7I:PWM7中断使能控制位

    0:关闭PWM7中断

    1:使能PWM7中断,当C7IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。

    EC7T2SI:PWM7的T2匹配发生波形翻转时的中断控制位

    0:关闭T2翻转时中断

    1:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将跳转到相应中断入口执行中断服务程序。

    EC7T1SI:PWM7的T1匹配发生波形翻转时的中断控制位

    0:关闭T1翻转时中断

    1:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C7IF置1,此时若EPWM7I==1,则程序将跳转到相应中断入口执行中断服务程序。

    PWM波形发生器中断控制

    PWM波形发生器中断相关的寄存器

    IP2中断优先级B5H---PX4PPWMFDPPWMPSPIPS2XXX0,0000
    PWMCRPWM控制F5HENPWMECBIENC70ENC60ENC50ENC40ENC30ENC200000,0000
    PWMIFPWM中断标志F6H-CBIFC7IFC6IFC5IFC4IFC3IFC2IFX000,0000
    PWMFDCRPWM外部异常控制F7H--ENFDFLTFLI0EFDIPDCMPFDI0FDIFXX00,0000
    PWM2CRPWM2控制FF04H----PWM2_PSEPWM2IEC2T2SIEC2T1SIXxxx,0000
    PWM3CRPWM3控制FF14H----PWM3_PSEPWM3IEC3T2SIEC3T1SIXxxx,0000
    PWM4CRPWM4控制FF24H----PWM4_PSEPWM4IEC4T2SIEC4T1SIXxxx,0000
    PWM5CRPWM5控制FF34H----PWM5_PSEPWM5IEC5T2SIEC5T1SIXxxx,0000
    PWM6CRPWM6控制FF44H----PWM6_PSEPWM6IEC6T2SIEC6T1SIXxxx,0000
    PWM7CRPWM7控制FF54H----PWM7_PSEPWM7IEC7T2SIEC7T1SIXxxx,0000

    中断向量地址及中断控制

    中断名称入口地址优先设置中断请求中断允许位中断标识清楚方式
    PWM中断00B3H(22)PPWMCBIFENPWM/ECBI/EA需软件清除
    C2IFENPWM/EPWM2I/EC2T2SI||EC2T1SI/EA需软件清除
    C3IFENPWM/EPWM3I/EC3T2SI||EC3T1SI/EA需软件清除
    C4IFENPWM/EPWM4I/EC4T2SI||EC4T1SI/EA需软件清除
    C5IFENPWM/EPWM5I/EC5T2SI||EC5T1SI/EA需软件清除
    C6IFENPWM/EPWM6I/EC6T2SI||EC6T1SI/EA需软件清除
    C7IFENPWM/EPWM77I/EC3T2SI||EC7T1SI/EA需软件清除
    PWM异常检测中断00BBH(23)PPWMFDFDIFENPWM/ENFD/EFDI/EA需软件清除

    两通道CCP/PCA/增强PWM

    相关SFR

    符号描述地址位地址及符号初始值
    B7B6B5B4B3B2B1B0
    CCOND8HCFCR----CCF1CCF000xx,xx00
    CMODD9HCIDL---CPS2CPS1CPS0ECF0XXX,0000
    CCAPM0DAH-EC0M0CCAPP0CCAPN0MAT0T0G0PWM0ECCF0X000,0000
    CCAPM1DBH-EC0M1CCAPP1CCAPN1MAT1T0G1PWM1ECCF1X000,0000
    CLE9H0000,0000
    CHF9H0000,0000
    CCAPOLEAH0000,0000
    CCAPOHFAH0000,0000
    CCAP1LEBH0000,0000
    CCAP1HFBH0000,0000
    PCA_PWM0F2HEES0_1EES0_0PWM0_B9HPWM0_B8HPWM0_B9LPWM0_B8LEPCOHEPCOL0000,0000
    PCA_PWM1F3HEES1_1EES1_0PWM1_B9HPWM1_B8HPWM1_B9LPWM1_B8LEPC1HEPC1L0000,0000

    STC15W4K32S4的两路CCP与STC12F2K60S2的CCP完全兼容,并在STC12F2K60S2的CCP的基础上对PWM的功能进行增强,不仅可将STC15W4K32S4的CCP设置为6/7/8位PWM,还可设置为10位PWM。10位PWM的低字节仍用CCAP0L/CCAP1L设置(CCAP0H/CCAP1H为重装值),10位PWM的高两位使用[PWM0_B9L,PWM0_B8L]/?[PWM1_B9L,PWM1_B8L]进行设置([PWM0_B9H,PWM0_B8H]/[PWM1_B9H,PWM1_B8H]?为重装值)。

    [EBS0_1,EBS0_0]:

    00:PWM0为8位PWM模式

    01:PWM0为7位PWM模式

    10:PWM0为6位PWM模式

    11:PWM0为10位PWM模式

    [EBS1_1,EBS1_0]:

    00:PWM1为8位PWM模式

    01:PWM1为7位PWM模式

    10:PWM1为6位PWM模式

    11:PWM1为10位PWM模式

    10位PWM的比较值由{PWMn_B9L,PWMn_B8L,CCAPnL[7:0]}组成,10重装值由{PWMn_B9H,PWMn_B8H,CCAPnH[7:0]}组成

    注意:在更新重装值时,必须先写高两位PWMn_B9H,PWMn_B8H,后写低八位CCAPnH

    展开全文
  • STC15w4k32s4单片机 串口通信

    千次阅读 2020-01-13 11:15:00
    STC15W4K32S4系列单片机有4个串行口 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/Command + Shift + H 无序列表:Ctrl/Command + Shift...

    串行口

    STC15W4K32S4系列单片机有4个串行口,串行口1有4种工作方式,其中两种方式波特率可变,两种波特率固定。串行口2,3,4只有2种工作方式,均为波特率可变。

    UART1

    寄存器

    串行口控制寄存器(Serial Control Register)(可位寻址)

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    SCON98HnameSM0/FESM1SM2RENTB8RB8TIRI
    • SM0/FE:当PCON中的SMOD0 = 0时,该位和SM1共同指定串行通信的工作方式
    SM0SM1工作方式功能说明
    00方式0同步移位串行方式
    01方式18位UART,波特率可变
    10方式29位UART
    11方式39位UART,波特率可变
    • SM2:方式2或方式3多机通信控制位 使用方式0,方式1时,该位应为0.
    • REN:允许禁止串行控制接收位
    • TB8:方式2或方式3中要发送的第九位数据 使用方式0,方式1时,该位不用
    • RB8:在方式2或方式3中为要接收的第九位数据 使用方式0,方式1时,该位不用
    • TI:发送中断请求标志位,方式0中发送数据第八位结束后,内部硬件自动置位,向cpu请求中断,响应中断后需软件清零。其他工作方式则在停止位开始发送时硬件置位,响应中断后需软件清零
    • RI:接收中断请求标志位,方式0中接收数据第八位结束后,内部硬件自动置位,向cpu请求中断,响应中断后需软件清零。其他工作方式则在接收到停止位的中间时刻硬件置位,向cpu请求中断,响应中断后需软件清零。

    电源控制寄存器(Power Control Register)(不可位寻址)

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    PCON87HnameSMODSMOD0LVDFPOFGF1GF0PDIDL
    • SMOD:波特率选择位,SMOD = 1时;则使串行通信方式1,2,3的波特率加倍。
    • SMOD0:帧检测有效控制位,SMOD0 = 1时,SCON寄存器的SM0/FE位用于FE(帧错误检测)功能
    • 其他与UART1无关

    串行口数据缓冲寄存器(serial data buffer)

    • 两个数据缓冲器读SBUF 和 写SBUF共用一个地址

    辅助寄存器(Auxiliary Register)(不可位寻址
    定时器2配置

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    AUXR8EHnameT0x12T1x12UART_M0x6TR2T2_C/~TT2x12EXTRAMS1ST2
    • 使用定时器1,2波特率发生器时需对该寄存器进行配置
    • T0x12:定时器0速度控制位 AUXR &= ~(1<<7);//12分频
    • T1x12:定时器0速度控制位 AUXR &= ~(1<<7);//12分频
    • T2R:定时器2允许控制位
    • T2_C/~T:控制定时器2用做定时器或计数器
    • T2x12:定时器2速度控制位 AUXR &= ~(1<<2);//12分频 AUXR |= (1<<2);//1分频
    • EXTRAM: 内部/外部RAM存取控制位 0允许,1禁止
    • S1ST2:UART1 选择T1,T2作为波特率发生器控制位 0:T1; 1:T2,此时T1释放,可以作为独立定时器使用。UART1默认选择T2作为波特率发生器

    定时器2的寄存器T2H, T2L

    • 用于保存重装时间常数。

    从机地址控制寄存器SADEN和SADDR

    • ???

    中断允许寄存器(可位寻址)

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    IEA8HnameEAELVDEADCESET1EX1ET0EX0
    • EA:总中断控制允许位
    • ES:串行口中断控制允许位

    中断优先级控制寄存器可位寻址

    SFR nameAddressbitB7B6B5B4B3B2B1B0
    IPB8HnamePPCAPLVDPADCPSPT1PX1PT0PX0
    • PS:串行口中断优先级控制位 PS = 1;//最高优先级(优先级1)

    辅助寄存器AUXR1(P_SW1)(不可位寻址)
    UART1输出引脚配置

    MnemonicAddressnameB7B6B5B4B3B2B1B0
    AUXR1 P_SW1A2HAuxiliary register 1S1_S1S1_S0CCP_S1CCP_S0SPI_S1SPI_S00DPS

    Reset Value : 0000 0000
    *S1_S1与S1_S0选择串行口输出引脚。

    S1_S1S0_S0串行口在P1~P3之间来回切换
    00UART1在[P30/RxD][P31/TxD]
    01UART1在[P36/RxD_2][P37/TxD_2]
    10UART1在[P16/RxD_3/XTAL2][P17/TxD_3/XTAL1]需使用内部时钟
    11无效、

    时钟分频寄存器CLK_DIV
    中继广播方式设置

    MnemonicAddressnameB7B6B5B4B3B2B1B0
    CLK_DIV (PCON2)97HMCKO_S1MCKO_S0ADRJTx_RXMCLKO_2CLK_S2CLK_S1CLKS0

    *TxRx:中继广播方式设置位 ,为1时TxD管脚的对外输出实时反映RxD端口输入的电平状态。

    UART1 工作方式1配置

    
    #include<STC15Fxxxx.h>
    unsigned char  uart1busy = 0;
    unsigned char read_count = 0;
    unsigned char send_count = 0;
    char read[20];
    char send[20] = {"mou i chi do"};
    
    void Uart1_Init()
    {
    //串口配置
    	PS = 1; //高优先级中断
    	SCON = (SCON & 0x3f) | (1<<6) ;//工作方式1
    
    //定时器2配置
    	AUXR &= ~(1<<4); //关闭T2;
    	AUXR |= 0X01;//选择T2位UART1的波特率发生器
    	AUXR &= ~(1<<3);	//T2工作在定时模式
    	AUXR |=  (1<<2);	//1T不分频
    	TH2 = 0xFE>>8;// 1T 波特率=(SYSclk / (65536 - [RL_TH,RL_TL]))/4),12分频  /12
    	TL2 = 0XE0;     //11.0592M晶振 波特率
    	IE2  &= ~(1<<2);	//禁止T2中断
    	AUXR |=  (1<<4);;    //启动T2
    //串口配置	
    	P_SW1 = (P_SW1 & 0x3f) | (0x40 & 0xc0);//shiyong使用P36 P37引脚
    	CLK_DIV &= ~(1<<4); //串口1为正常工作模式,不中继
    	ES = 1;//串口1中断允许
    	EA = 1;//总中断允许	
    }
    void Usart1_sendchar(unsigned char usdata)
    {
    	while(uart1busy);
    	uart1busy = 1;
    	SBUF = usdata;
    	}
    void Usart1_sendstring(unsigned char *usdata,unsigned int slen)
    {
    	unsigned int len;
    	for(len=0;len<slen;len++)
    	 {
    	  Usart1_sendchar(usdata[len]);
    	  uart1busy = 0;
    	 }
    }
    
    void main(void)
    {
    	EA = 1;
    	Uart1_Init();
    	Usart1_sendstring(send,20);
    	while(1);
    }
    
    //中断函数
    void Uart1_int() interrupt 4
    {
    	if(RI)
    	{
    	RI = 0;
    	 read[read_count ++]= SBUF;
    		if(read_count >= 20)
    			read_count = 0;
    	}
    	if(TI)
    	{
    		TI = 0;
    		uart1busy = 0;
    	}
    }
    

    UART2

    • 对于15系列单片机而言,串行口2只能使用定时器2作为波特率发生器,不能选择其他定时器作为波特率发生器

    寄存器

    串行口2的控制寄存器S2CON(不可位寻址)

    • 只有2种工作方式,由 S2COMbit7 S2SM0 控制: =0,8位UART波特率可变。 =1,9位uart 波特率可变。
    • bit6保留,该位复位后为1
    • bit5 S2SM2
    • bit4 S2REN
    • bit3 S2TB8
    • bit2 S2RB8
    • bit1 S2TI
    • bit0 S2RI

    串行口2的数据缓冲寄存器S2BUF(不可位寻址)

    定时器2配置相关寄存器

    中断允许寄存器2 IE2(不可位寻址)

    • bit0 ES2

    EA = 1;

    外围设备功能切换控制寄存器2(P_SW2)(不可位寻址)
    UART2输出引脚配置

    • bit0 S2_S =0:[P1.0/RxD2,P1.1/TXD2]; =1:[P4.6/RxD2_2,P4.7/TXD2_2]

    配置和使用同UART1,波特率计算公式也一样。

    UART3

    串行口3默认选择定时器2为波特率发生器,也可以选择定时器3作为波特率发生器

    寄存器

    串行口3的控制寄存器S3CON(不可位寻址)

    • 只有2种工作方式,由 S3COMbit7 S3SM0 控制: =0,8位UART波特率可变。 =1,9位uart 波特率可变。
    • bit6 S3ST3 串行口3波特率发生器选择位 = 0:选择定时器二作为其波特率发生器; = 1:选择定时器3作为波特率发生器
    • bit5 S3SM2
    • bit4 S3REN
    • bit3 S3TB8
    • bit2 S3RB8
    • bit1 S3TI
    • bit0 S3RI

    串行口3的数据缓冲寄存器S3BUF(不可位寻址)

    T4T3M(不可位寻址)

    • bit3 T3R 定时器3运行控制位
    • bit2 T3_C/~T 定时器3用作定时器/计数器控制位
    • bit1 T3x12 定时器3是否分频控制位 =0:12分频;

    TH3,TL3

    IE2(不可位寻址)

    • bit5 ET3 定时器3的中断允许位
    • bit3 ES3 串行口3中断允许位

    IE: EA = 1;

    PSW_2(不可位寻址)
    UART3输出引脚配置

    • bit1 S3_S =0:[P0.0/RxD3,P0.1/TxD3] =1:[P5.0/RxD3_2,P5.1/TxD3_2]

    UART4

    串行口4默认选择定时器2为波特率发生器,也可以选择定时器4作为波特率发生器

    寄存器

    串行口4的控制寄存器S4CON(不可位寻址)

    • 只有2种工作方式,由 S4COMbit7 S3SM0 控制: =0,8位UART波特率可变。 =1,9位uart 波特率可变。
    • bit6 S4ST3 串行口3波特率发生器选择位 = 0:选择定时器二作为其波特率发生器; = 1:选择定时器4作为波特率发生器
    • bit5 S4SM2
    • bit4 S4REN
    • bit3 S4TB8
    • bit2 S4RB8
    • bit1 S4TI
    • bit0 S4RI

    串行口4的数据缓冲寄存器S4BUF(不可位寻址)

    T4T3M(不可位寻址)

    • bit7 T4R 定时器4运行控制位
    • bit6 T4_C/~T 定时器4用作定时器/计数器控制位
    • bit5 T4x12 定时器4是否分频控制位 =0:12分频;

    TH4,TL4

    IE2(不可位寻址)

    • bit6 定时器4的中断允许位
    • bit4 ES4 串行口4中断允许位

    IE: EA = 1;

    PSW_2(不可位寻址)
    UART3输出引脚配置

    • bit2 S3_S =0:[P0.2/RxD4,P0.3/TxD4] =1:[P5.2/RxD4_2,P5.3/TxD4_2]
    展开全文
  • STC15W4K32S系列 低速模式

    千次阅读 2016-03-16 09:25:51
    STC15W4K32S4系列 低速模式相关

           低速模式的原理是通过对内部的时钟进行分频,从而降低工作时钟的频率,以达到降低功耗的目的。

           这里要使用时钟分频寄存器CLK_DIV(PCON2)

              

              CLK_DIV寄存器低三位CLKS2, CLKS1,CLKS0是主时钟分频选择控制位,选择不分频时这三位是 000,二分频时是 001,四分频 010,依次类推:


         

          由于我使用的芯片只有主时钟分频输出的功能,而不具有系统时钟输出的功能,故只给了代码。

          测试代码:

         

    /*STC15W4K32S系列 低速模式测试程序*/
    #include <reg51.h>
    
    sfr CLK_DIV = 0x97;   //时钟分频寄存器地址
    
    void main()
    {
       CLK_DIV = 0x00;    //不分频,系统时钟即为主时钟
       //CLK_DIV = 0x01;    //2分频,SysCLK = MCLK / 2;
       //CLK_DIV = 0x02;      //4分频,SysCLK = MCLK / 4;
       //CLK_DIV = 0x03;      //8分频,SysCLK = MCLK / 8;
       //CLK_DIV = 0x04;      //16分频,SysCLK = MCLK / 16;
    
       while(1)
       {
         
       }
    }
    
    


         

       

    展开全文
  • 第一版 单片微机原理与接口技术——基于STC15W4K32S4系列单片机 丁向荣 电子课件
  • STC15/STC15F2K60S2/STC15W4K32S4系列读取超声波测距模块HC-SR04距离串口显示代码实例
  • [单片微机原理与接口技术——基于STC15W4K32S4系列单片机][丁向荣] [程序源代码] 解压密码 dxrcch
  • STC15W4K32S4系列与STC15F/L2K60S2系列单片机的区别    
  • STC15W4K32S4单片机ADC应用实现

    千次阅读 2019-05-16 19:20:41
    感谢北京化工大学何宾老师的课程指导,今天我们分享一个利用STC15W4K32S4单片机实现的ADC应用,我们通过ADC转换实现在LCD1602上显示学号,并能够通过外部中断0和外部中断1分别实现学号左移和右移的功能。 以下是...
  • Porteus库中也没有stc15w4k32s4系列单片机啊,该怎么办?
  • STC15W4K32S4/STC15系列读取MPU6050陀螺仪角度加速度串口显示程序代码 调试通过,复制粘贴即编译可使用,无需调试,晶振:24M,串口输出
  • 一,打开文件(可以随文下载放置在...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列003_Keys (如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project wizard *
  • 第一版 单片微机原理与接口技术——基于STC15W4K32S4系列单片机 丁向荣 电子课件
  • 一,打开文件(可以随文下载放置在...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列002_USART (如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project wizard
  • 带目录标签的版本,介绍如何在Keil中开发 STC15W4K 系列,其中包括IAP15W4K
  • 一,打开文件(可以随文下载放置...四,编辑main.c 代码如Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列001_跑马灯(如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project wizard *Au
  • Proteus8.9的VSM Studio使用的SDCC仿真_STC15W4k32S4_013_iic_10_AT24C1024编程代码和仿真操作实验
  • Proteus8.9的VSM Studio使用的SDCC仿真_STC15W4k32S4_013_iic_08_AT24C256编程代码和仿真操作实验
  • Proteus8.9的VSM Studio使用的SDCC仿真_STC15W4k32S4_013_iic_09_AT24C512编程代码和仿真操作实验
  • Proteus8.9的VSM Studio使用的SDCC仿真_STC15W4k32S4_013_iic_06_AT24C64编程代码和仿真操作实验

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 236
精华内容 94
关键字:

stc15w4k32s4