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(); }; }
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; }
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; } }
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; }