STC15系列例程总结 1、利用软件实现精确延时方法:利用循环指令输出方波,用示波器测量方波周期 2、子函数中定义static类型变量,可以使得变量保存住变量值 3、LED_PORT=~(0x01<<i);在i=0时等价于:LED_PORT=~0x01;i=1、2、3...的分析类似 4、宏定义 //端口操作定义 #define SET 1 //高电平 #define CLR 0 //低电平 //端口操作 #define HC595_DAT_Clr() {HC595_DAT=CLR;} #define HC595_DAT_Set() {HC595_DAT=SET;} 5、temp=dis; temp=temp<<8| dig; temp为int类型,该语句实现将两个8位变量合并成一个16字节变量 6、芯片工作之初应加几ms的延时,等待芯片上电稳定 7、DispTemp[4]=Low_Dat/1000; //低四位千位 DispTemp[5]=Low_Dat%1000/100; //低四位百位 DispTemp[6]=Low_Dat%100/10; //低四位十位 DispTemp[7]=Low_Dat%10; //低四位个位 8、P3=P3|0x1c;要读入P3.2、P3.3、P3.4三个端口先置高,51单片机端口做输入必须先置高 9、IAP_CONTR=0x60; //启动下载 当STC单片机上电启动后,会先运行内部的ISP监控程序,判断是否有下载命令,如果有,则下载程序。否则运行用户程序。当上位机发送下载命令时P30引脚会出现下降沿低电平。所以在程序中检测P30脚是否有低电平,如果有低电平,就通过软件向单片机的IAP_CONTR控制寄存器中写入60H即可启动ISP监控程序。 10、IAP_CONTR =0x20; //软件复位,并且从用户程序开始执行。 11、WDT_CONTR =0x3e; // 0011,1110 EN_WDT =1,CLR_WDT = 1,IDLE_WDT = 1,PS2 = 1,PS1 = 1,PS0 = 0 // EN_WDT = 1:启动看门狗定时器 // CLR_WDT = 1:看门狗将重新计数 // IDLE_WDT = 1:,看门狗定时器在“空闲模式”计数 // PS2 = 1,PS1 = 1,PS0 = 0:定时4.5511 S @f=11.0592MHz WDT_CONTR |= 0x10; // CLR_WDT = 1:看门狗将重新计数 12、STC15系列单片机有四种端口模式:准双向口、强推挽输出、仅为输入和开漏结构,复位后默认为准双向口。 P0M1=0xf0; //1111 0000 P0M0=0xcc; //1100 1100 端口设置结果: P0.0和P0.1为准双向口,P0.2和P0.3为强推挽输出,P0.4和P0.5仅为输入,P0.6和P0.7开漏 结果现象分析:准双向口吸收电流能力强,输出电流能力差;强推挽输出吸收电流和输出电流能力强;仅为输入为高阻,无法吸收电流;开漏吸收电流能力强。由于开发板的电路结构吸收电流的端口接的LED才亮,故接在P0.4和P0.5的端口的LED不亮,其他的都亮。 13、所谓有源和无源是指蜂鸣器内部是否有自带的振荡电路。无源蜂鸣器内部没有振荡电路,通过端口给它施加一定的频率驱动,不同的频率可以发出不同的音调。而有源蜂鸣器内部自带频率固定的振荡电路,一加电就会发出固定音调的声音,无法发出各种不同的音调。 14、PCON|=0x02; //单片机进入休眠掉电模式,可由外部中断唤醒 15、CCON=0x80; //初始化PCA控制寄存器 //停止PCA计数器 //清除CF标记 //清除PCA各个模块中断标记 CCAPM0=0x49; //初始化PCA的比较/捕获寄存器0 //允许比较功能 //比较匹配时CCF0中断 CL=0; //清除PCA计数器 CH=0; CCAP0L=0x00; //定时初值50ms 11.0592MHz CCAP0H=0xb4; CMOD=0x80; //设置PCA计数器时钟源为Fosc/12 //PCA计数器空闲模式停止计数 //禁止PCA计数溢出中断 16、定时器不可屏蔽的16位自动重装方式为stc15系列单片机特有,移植到其他类型单片机可能不适用。该不可屏蔽中断的自动重装定时功能很有用。当单片机使用操作系统的时候可作为系统的时基。 TMOD |=0x03; //T0工作于不可屏蔽的十六位自动重装定时方式,/使用位操作,避免对其他定时器产生影响 17、P54端口可以输出时钟信号,输出分频多少由CLK_DIV中的MKCO_S1、MKCO_S0控制,输出的时钟不超过13.5MHz,这是由于STC单片机端口的性能决定的。CLK_DIV中的CLKS2、CLKS1、CLKS0控制单片机内部工作时钟的频率。 18、单片机串口1可以选择定时器T1或T2为波特率发生器。单片机串口2单片机的第二个串口。通过DB9插头输出。该第二串口只能选择定时器2作为波特率发生器,不能使用定时器1做为波特率发生器。 19、该RS485接口使用的是单片机的串口2使用定时器2做为串口2的波特率发生器选择波特率9600,8位数据位,1位停止位,无校验。详细操作见左侧Doc目录下的readme文件,单片机串口为TTL电平,RS485只是硬件上将TTL 转换成RS485电平,程序上与串口程序大体相同。 20、PCA用到以下特殊功能寄存器:CMOD、CCON、CCAPMn、PCA_PWMn、CH、CL、CCAPnH、CCAPnL、AUXR1 21、PWM产生一定占空比波形 CCON=0; //初始化PCA控制寄存器,停止PCA计数器,清除CF标记,清除PCA各个模块中断, CL=0; //清除PCA计数器 CH=0; CMOD=0x82; //设置PCA计数器时钟源为Fosc/2,PCA计数器空闲模式停止计数,禁止PCA计数溢出中断 CCAP1H=CCAP1L=0x80;//PWM0端口输出50%占空比方波,8位PWM模式最大为256,一半为128,即0x80 CCAPM1=0x42;//PCA模块0工作于8位PWM模式,允许比较器功能,允许PWM输出,禁止CCF0中断 22、 |