stc15w wave

1. 定时器和延时

#include    "15W4KxxS4.h" 
#define FOSC 12000000
#define CLK    (65536-FOSC/2/12/1000) 
sbit clk=P3^0;

void clk_wave(void)   //1KHZ@12MHz
{
  
    AUXR |= 0x00;        //串口1选择定时器2为波特率发生器
    T2L = CLK;        //设定定时初值
    T2H = CLK>>8;        //设定定时初值
    AUXR |= 0x10;        //启动定时器2
    INT_CLKO=0x04;

}
void Delay5ms()        //@12.000MHz
{
    unsigned char i, j;

    i = 59;
    j = 90;
    do
    {
        while (--j);
    } while (--i);
}


int  main(void)
{                
       
     //clk_wave();
    while (1)
            {
                    clk=0;
                  Delay5ms();    
                    clk=1;
                  Delay5ms();    
            };
}
View Code

2. 中断

#include    "15W4KxxS4.h" 
#include "intrins.h"
     
#define  uint8    unsigned char 
#define  uint16   unsigned int 

//uint8 data temp[100];
uint8 ti = 0;  

sbit clk=P3^0;
 
void Timer0Init(void)        //500微秒@12.000MHz
{
    AUXR &= 0x7F;        //定时器时钟12T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0x0C;        //设置定时初值
    TH0 = 0xFE;        //设置定时初值
    TF0 = 0;        //清除TF0标志
    ET0=1;
    EA=1;
    TR0 = 1;        //定时器0开始计时
}

int  main(void)
{                
     Timer0Init(); 
  while (1);
}

void wave() interrupt 1
{
    if(ti<=5)
    clk=1;
    if(ti>5&&ti<=9)
        clk=0;
    ti++;
    ti=ti%10;
    //clk=!clk;
}
View Code

 3. 占空比

#include    "15W4KxxS4.h" 
#include "intrins.h"
     
#define  uint8    unsigned char 
#define  uint16   unsigned int 

//uint8 data temp[100];
uint8 ti = 0;  

sbit SI=P3^0;
sbit CLK=P0^0;
 
void Timer0Init(void)        //1毫秒@12.000MHz
{
    AUXR &= 0x7F;        //定时器时钟12T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0x18;        //设置定时初值
    TH0 = 0xFC;        //设置定时初值
    TF0 = 0;        //清除TF0标志
    ET0=1;
    EA=1;
    TR0 = 1;        //定时器0开始计时
}
int  main(void)
{        
        ti=0;
     Timer0Init();   
  while (1);
}

void wave() interrupt 1
{
    ti++;
     if(ti==20)      //低电平循环次数,高电平为两者之差
    CLK=1;
  else if(ti==100)   //总循环次数
    {
        CLK=0;
      ti=0;
    }
 
}
View Code

 4. 两束波,相位延迟

#include    "15W4KxxS4.h" 
#include "intrins.h"
     
#define  uint8    unsigned char 
#define  uint16   unsigned int 

//uint8 data temp[100];
uint8 ti = 0;  

sbit CLK=P3^0;
sbit SI=P0^0;
 
void Timer0Init(void)        //1毫秒@12.000MHz
{
    AUXR &= 0x7F;        //定时器时钟12T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0x18;        //设置定时初值
    TH0 = 0xFC;        //设置定时初值
    TF0 = 0;        //清除TF0标志
    ET0=1;
    EA=1;
    TR0 = 1;        //定时器0开始计时
}
void Delay500us()        //@12.000MHz
{
    unsigned char i, j;

    i = 6;
    j = 211;
    do
    {
        while (--j);
    } while (--i);
}
void Delay1ms()        //@12.000MHz
{
    unsigned char i, j;

    i = 12;
    j = 169;
    do
    {
        while (--j);
    } while (--i);
}
void Delay359500us()        //@12.000MHz
{
    unsigned char i, j, k;

    _nop_();
    _nop_();
    i = 17;
    j = 101;
    k = 106;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}


int  main(void)
{        
    
     Timer0Init(); 
     
  ti=0;
  while (1)
        {
                 Delay500us();
                SI=1;
                Delay1ms();
                SI=0;
                Delay359500us();    
        };
}

void wave() interrupt 1
{
    CLK=!CLK;
     
 
}
View Code

 

posted on 2018-11-07 09:26  arcfz  阅读(162)  评论(0编辑  收藏  举报

导航