?? pwm.c
字號:
//-----------------------函數聲明,變量定義--------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
#include<ABSACC.H>
//-----------------------定義管腳--------------------------------------------------------
sbit PWM=P1^0; //PWM波形輸出
sbit DR=P1^1; //方向控制
#define timer_data (256-100) //定時器預置值,12M時鐘是,定時0.1ms
#define PWM_T 100 //定義PWM的周期T為10ms
unsigned char PWM_t; //PWM_t為脈沖寬度(0~100)時間為0~10ms
unsigned char PWM_count; //輸出PWM周期計數
unsigned char time_count; //定時計數
bit direction; //方向標志為
//--------------------------------------------------------------------------------------------------
// 函數名稱:timer_init
// 函數功能:初始化設施定時器
//--------------------------------------------------------------------------------------------------
void timer_init()
{
TMOD=0x22; /*定時器1為工作模式2(8位自動重裝),0為模式2(8位自動重裝) */
PCON=0x00;
TF0=0;
TH0=timer_data; //保證定時時長為0.1ms
TL0=TH0;
ET0=1;
TR0=1; //開始計數
EA=1; //中斷允許
}
//--------------------------------------------------------------------------------------------------
// 函數名稱:setting_PWM
// 函數功能:設置PWM的脈沖寬度和設定方向
//--------------------------------------------------------------------------------------------------
void setting_PWM()
{
if(PWM_count==0) //初始設置
{
PWM_t=20;
direction=1;
}
}
//--------------------------------------------------------------------------------------------------
// 函數名稱:IntTimer0
// 函數功能:定時器中斷處理程序
//--------------------------------------------------------------------------------------------------
void IntTimer0() interrupt 1
{
time_count++;
DR=direction;
if(time_count>=PWM_T)
{
time_count=0;
PWM_count++;
setting_PWM(); //每輸出一個PWM波調用一次
}
if(time_count<PWM_t)
PWM=1;
else
PWM=0;
}
//--------------------------------------------------------------------------------------------------
// 函數名稱:main
// 用戶主函數
// 函數功能:主函數
//--------------------------------------------------------------------------------------------------
void main()
{
timer_init();
setting_PWM();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -