stc12c5a60s2中文手册单片机的串行中断对pca有没有影响??

STC12C5A60S2单片机双串口通信
> STC12C5A60S2单片机双串口通信
STC12C5A60S2单片机双串口通信
Reset Valuesfr IPH
= 0xB7; //中断优先级高位
= 0xB5; //
xxxx,xx00sfr IPH2
= 0xB6; //
xxxx,xx00//-----------------------//新一代 1T 8051系列 单片机I/O 口特殊功能寄存器//
Reset Valuesfr P0
= 0x80; //8 bitPort0
sfr P0M0 = 0x94; //
sfr P0M1 = 0x93; //
= 0x90; //8 bitPort1
sfr P1M0 = 0x92; //
sfr P1M1 = 0x91; //
sfr P1ASF = 0x9D; //P1 analog special functionsfr P2
= 0xA0; //8 bitPort2
sfr P2M0 = 0x96; //
sfr P2M1 = 0x95; //
= 0xB0; //8 bitPort3
sfr P3M0 = 0xB2; //
sfr P3M1 = 0xB1; //
= 0xC0; //8 bitPort4
sfr P4M0 = 0xB4; //
sfr P4M1 = 0xB3; //
Reset Valuesfr P4SW = 0xBB; //Port-4 switch
x000,xxxxsfr P5
= 0xC8; //8 bitPort5
xxxx,1111sfr P5M0 = 0xCA; //
sfr P5M1 = 0xC9; //
//--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机定时器特殊功能寄存器//
Reset Valuesfr TCON = 0x88; //T0/T1 Control
//-----------------------------------sbit TF1 = TCON^7;sbit TR1 = TCON^6;sbit TF0 = TCON^5;sbit TR0 = TCON^4;sbit IE1 = TCON^3;sbit IT1 = TCON^2;sbit IE0 = TCON^1;sbit IT0 = TCON^0;//-----------------------------------sfr TMOD = 0x89; //T0/T1 Modes
GATE1 C/T1
GATE0 C/T0
= 0x8A; //T0 Low Byte
= 0x8C; //T0 High Byte
= 0x8B; //T1 Low Byte
= 0x8D; //T1 High Byte
//--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机串行口特殊功能寄存器//
Reset Valuesfr SCON = 0x98; //Serial Control
SM0/FE SM1
//-----------------------------------sbit SM0 = SCON^7;
//SM0/FEsbit SM1 = SCON^6;sbit SM2 = SCON^5;sbit REN = SCON^4;sbit TB8 = SCON^3;sbit RB8 = SCON^2;sbit TI
= SCON^1;sbit RI
= SCON^0;//-----------------------------------sfr SBUF = 0x99; //Serial Data Buffer
xxxx,xxxxsfr SADEN = 0xB9; //Slave Address Mask
sfr SADDR = 0xA9; //Slave Address
//-----------------------------------//
Reset Valuesfr S2CON = 0x9A; //S2 Control
Bsfr S2BUF = 0x9B; //S2 Serial Buffer
xxxx,xxxxsfr BRT = 0x9C; //S2 Baud-Rate Timer
//--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机看门狗定时器特殊功能寄存器sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register//
Reset Value//
EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0
xx00,0000//-----------------------//--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机PCA/PWM 特殊功能寄存器//
Reset Valuesfr CCON
//PCA 控制寄存器。
00xx,xx00//-----------------------sbit CF
= CCON^7; //PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。sbit CR
= CCON^6; //1:允许 PCA 计数器计数, 必须由软件清0。//-//-sbit CCF1
= CCON^1; //PCA 模块1 中断标志, 由硬件置位, 必须由软件清0。sbit CCF0
= CCON^0; //PCA 模块0 中断标志, 由硬件置位, 必须由软件清0。//-----------------------sfr CMOD
= 0xD9; //PCA 工作模式寄存器。
0xxx,x000/*CIDL: idle 状态时 PCA 计数器是否继续计数, 0: 继续计数, 1: 停止计数。CPS2: PCA 计数器脉冲源选择位 2。CPS1: PCA 计数器脉冲源选择位 1。CPS0: PCA 计数器脉冲源选择位 0。CPS2
系统时钟频率 fosc/12。0
系统时钟频率 fosc/2。0
Timer0 溢出。0
由 ECI/P3.4 脚输入的外部时钟,最大 fosc/2。1
系统时钟频率,
系统时钟频率/4,Fosc/41
系统时钟频率/6,Fosc/61
系统时钟频率/8,Fosc/8ECF: PCA计数器溢出中断允许位, 1--允许 CF(CCON.7) 产生中断。*///-----------------------sfr CL
= 0xE9; //PCA 计数器低位
= 0xF9; //PCA 计数器高位
//-----------------------//
Reset Valuesfr CCAPM0 = 0xDA; //PCA 模块0 PWM 寄存器
x000,0000sfr CCAPM1 = 0xDB; //PCA 模块1 PWM 寄存器
x000,0000//ECOMn = 1:允许比较功能。//CAPPn = 1:允许上升沿触发捕捉功能。//CAPNn = 1:允许下降沿触发捕捉功能。//MATn
= 1:当匹配情况发生时, 允许 CCON 中的 CCFn 置位。//TOGn
= 1:当匹配情况发生时, CEXn 将翻转。//PWMn
= 1:将 CEXn 设置为 PWM 输出。//ECCFn = 1:允许 CCON 中的 CCFn 触发中断。//ECOMn
未启用任何功能。//
16位CEXn上升沿触发捕捉功能。//
16位CEXn下降沿触发捕捉功能。//
16位CEXn边沿(上、下沿)触发捕捉功能。//
16位软件定时器。//
16位高速脉冲输出。//
8位 PWM。//ECOMn
无此操作//
普通8位PWM, 无中断//
PWM输出由低变高可产生中断//
PWM输出由高变低可产生中断//
PWM输出由低变高或由高变低都可产生中断//-----------------------sfr CCAP0L = 0xEA; //PCA 模块 0 的捕捉/比较寄存器低 8 位。
sfr CCAP0H = 0xFA; //PCA 模块 0 的捕捉/比较寄存器高 8 位。
sfr CCAP1L = 0xEB; //PCA 模块 1 的捕捉/比较寄存器低 8 位。
sfr CCAP1H = 0xFB; //PCA 模块 1 的捕捉/比较寄存器高 8 位。
//-----------------------//
Reset Valuesfr PCA_PWM0 = 0xF2; //PCA 模块0 PWM 寄存器。
EPC0H EPC0L
xxxx,xx00sfr PCA_PWM1 = 0xF3; //PCA 模块1 PWM 寄存器。
EPC1H EPC1L
xxxx,xx00//PCA_PWMn:
EPCnL//B7-B2: 保留//B1(EPCnH): 在 PWM 模式下,与 CCAPnH 组成 9 位数。//B0(EPCnL): 在 PWM 模式下,与 CCAPnL 组成 9 位数。//--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机 ADC 特殊功能寄存器//
Reset Valuesfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 sfr ADC_RES
//A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 sfr ADC_RESL = 0xBE;
//A/D 转换结果低2位
ADCV.1 ADCV.0 //--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机 SPI 特殊功能寄存器//
Reset Valuesfr SPCTL
= 0xCE; //SPI Control Register
sfr SPSTAT = 0xCD; //SPI Status Register
00xx,xxxxsfr SPDAT
= 0xCF; //SPI Data Register
//--------------------------------------------------------------------------------//新一代 1T 8051系列 单片机 IAP/ISP 特殊功能寄存器sfr IAP_DATA
= 0xC2;sfr IAP_ADDRH
= 0xC3;sfr IAP_ADDRL
Reset Valuesfr IAP_CMD
= 0xC5; //IAP Mode Table
0xxx,xx00sfr IAP_TRIG
= 0xC6;sfr IAP_CONTR
= 0xC7; //IAP Control Register
IAPEN SWBS SWRST CFAIL
//--------------------------------------------------------------------------------
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一网站已改版,请使用新地址访问:
pulse stc12c5a60s2两路PCA脉冲计数器,带 和中断功能。适用于测速等 场合。原创 SCM 单片机开发 238万源代码下载-
&文件名称: pulse
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 1 KB
&&上传时间:
&&下载次数: 8
&&提 供 者:
&详细说明:stc12c5a60s2两路PCA脉冲计数器,带计时和中断功能。适用于测速等应用场合。原创-stc12c5a60s2 two PCA pulse counter with timer and interrupt function. For speed and other applications. Original
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&pulseFreq.c&&pulseFreq.h
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 用单片机实现的频率计,使用的是STC12系列的单片机,兼容51系列,可以测试频率到2M左右,液晶显示出频率,这里使用的晶振是24M的.用户可以自行修改并修正延时值
&[] - 仪器仪表类,脉冲计数器,已经调试过,能正常使用。1. 基本特性
  1) 中断源
&  STC12C5A60S2共有十个中断源,每个中断源可设置4类优先级;当相同优先级下各中断优先级由高到低依次如下:
    1.1)INT0(外部中断0) 中断向量地址 0003H, C语言编程:void Int0_Routeine(void) &interrupt0;
    1.2)T0(T0溢出中断)中断向量地址 000BH,C语言编程:void Timer0_Rountine(void) interrupt1;
    1.3)INT1(外部中断1)中断向量地址0013H,C语言编程:void Int1_Routine(void) interrupt2;
    1.4)T1(T1溢出中断)中断向量地址 001BH,C语言编程:void Timer1_Rountine(void) interrupt3;
    1.5)UART1(串口1)中断向量地址 0023H, C语言编程:void UART_Routine(void) interrupt4;
    1.6)ADC(AD转换中断)中断向量地址 002BH,C语言编程:void ADC_Routine(void) interrupt5;
    1.7)LVD(低压检测中断)中断向量地址 003BH,C语言编程:void LVD_Routine(void) interrupt6;
    1.8)PCA(PCA中断)中断向量地址 003BH,C语言编程:void PCA_Routine(void) interrupt7;
    1.9)UART2(串行口2)中断向量地址 0043H,C语言编程:void UART_Routine(void) interrupt8;
    1.10)SPI(SPI中断)中断向量地址 004BH,C语言编程:void SPI_Routine(void) interrupt9;
  2) 寄存器
    2.1)IE、IE2 中断允许控制寄存器,确定CPU对中断源的开放或屏蔽;
    2.2)IP、IP2、IPH、IP2H 中断优先级控制寄存器,确定各个中断源的优先级0~3级;
    2.3)TCON,定时/计数器T0、T1、外部中断INT0和INT1的控制寄存器;
    2.4)SCON/S2CON,串口控制寄存器,包括串口接收和发送中断标识位
    2.5)PCON,低压检测中断寄存器
    2.6)ADC_CONTR,ADC控制寄存器,标示AD转换完成时的中断允许
2. 典型例子
#include&reg51.h&
unsigned int g_status = 0;
void exint0() interrupt 0 //外部中断0回调
if(0 == g_status){
P0 = 0xfe;
g_status = 1;
P0 = 0xff;
g_status = 0;
void main()
IT0 = 1; //采用电平触发方式,即输入低电平时触发
EX0 = 1; //允许外部中断INT0
= 1; //允许开放中断
P0 = 0xfe;
阅读(...) 评论()查看: 1445|回复: 4
求教STC12C5A60S2的pca/pwm问题
请问对于CMOD=0x05的状态,也就是定时器0溢出控制PWM频率到底是个怎么控制法呢?
#include&reg51.h&
sbit& &Pout& &=P1^3;& & //PWM波形输出
#define& &Max_Init_value& & 2000
///******************************
///Max_Init_value的大小将影响到PWM
///的频率,其与频率的关系如下:
/// Max_Init_value=1/Freq*
///在标准51中,Max_Init_value的值不能
///过高,因为定时器0的中断服务执行本身
///就要消耗一定的时间,频率过高将影响
//主函数的执行,并且有可能出现很意外的
//情况,具体情况要具体分析
///******************************
unsigned int PWM_V
//*******************************& &&&
//PWM_Value的理论取值范围:
//0&PWM_Value&Max_Init_value
//
//
//
//*******************************& &&&
unsigned char H_Byte_1 _at_ 0x21;
unsigned char L_Byte_1 _at_ 0x22;
unsigned char H_Byte_2 _at_ 0x23;
unsigned char L_Byte_2 _at_ 0x24;
void InitSystem(void)
{& &
& & TMOD=0x01;
& & TH0=(65536-PWM_Value+12)/256;& && && & //加12是为了补偿中断服务函数的执行时间,下同
& && &&&TL0=(65536-PWM_Value+12)%256;
& & Pout=1;
& && &&&ET0=1;
& && &&&TR0=1;& && && && && && && && &
& && &&&EA=1;
}
void DelayMs(unsigned int ms)
{
& &&&
& && && &
& && && &for(j=0;j&j++)
& && && & for(i=0;i&110;i++);
}
void ComputePWM(void)
{
& && &&&H_Byte_1=(65536-PWM_Value+12)/256;& && && && && && &//加12是为了补偿中断服务函数的执行时间,下同
& && &&&L_Byte_1=(65536-PWM_Value+12)%256;
& && &&&H_Byte_2=(65536-(Max_Init_value-PWM_Value)+12)/256;
& && &&&L_Byte_2=(65536-(Max_Init_value-PWM_Value)+12)%256;
& && &
}
void main(void)
{
& & PWM_Value=200;
& & ComputePWM();
& & InitSystem();& && && &&&
& && &&&while(1)
& && && &{
& && && &DelayMs(10000);
& && && && && &&&TR0=0;
& && && && && &&&PWM_Value+=250;& && && && && && && && && &//改变占空比
& && && && && &&&if(PWM_Value & 1800) PWM_Value=50;
& && && && && &&&ComputePWM();
& && && && && &&&P3 ^= 0x08;
& && && && && &&&DelayMs(500);
& && && && && &&&P3 ^= 0x08;
& && && && && &&&DelayMs(500);
& && && && && &&&TR0=1;
& && && &}
}
void IsrTimer0(void) interrupt 1
{& && && &
& &&&EA=0;
& && && &P3 ^= 0x08;
& &&&if(Pout)& & //如果之前输出为高
& && && & {
& && && && &&&Pout=0;
& && && && && && &TH0=H_Byte_2;
& && && && && && &TL0=L_Byte_2;
& && && & }
& && && &else& && &&&//如果之前输出为低
& && && & {
& && && && &&&Pout=1;
& && && && && && &TH0=H_Byte_1;
& && && && && && &TL0=L_Byte_1;
& && && & }
& && && &EA=1;
}
//////////////////////////////////////////////////////
保证能用。。。复制代码
STC12C5A60S2内含PWM模块,直接调用就可以了,数据手册上有C例程文件,赋两个值皆可以了,
STC12C5A60S2内含PWM模块,直接调用就可以了,数据手册上有C例程文件,赋两个值皆可以了,
我做了个小车,按例程弄得,为什么p1.4控制的一侧,轮子一直不转?
Powered by}

我要回帖

更多关于 stc12c5a60s2 pwm 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信