/********************************************************
功能 :用電位器通過STC8AD片內AD和PWM控制電機轉速
單片機;STC8AD
晶振 :12M
作者 :駿杰
時間 :2019-11-4
********************************************************/
#include<STC8.H>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define uint16 unsigned int
#define u8 unsigned uchar
/**************************************
功能描述:延時函數
入口參數:uint16 x ,該值為1時,延時1ms
返回值:無
***************************************/
void delay_ms(uint16 x)
{
uint16 j,i;
for(j=0;j<x;j++)
{
for(i=0;i<1100;i++);
}
}
void PCAInit(void)
{
P_SW1 &= 0xCF;
CMOD=0x0c; //設置PCA定時器,系統時鐘輸出,靜止PCA計數器溢出中斷
CCON=0x00;
CL=0;
CH=0;
CCAPM0=0x42; //PWM0設置PCA工作方式為PWM方式(0100 0010)
PCA_PWM0 = 0x00; //PCA模塊0工作于8位PWM功能
CCAP0L=0xff; //PWM占空比為50%[(40H-20H)/40H]
CCAP0H=0xff;
CR = 1; //啟動PCA計時器
}
/**************************************
功能描述:ADC口初始化
入口參數:無
返回值:無
***************************************/
void ADC_config(void)
{
ADC_CONTR=0x80; //使能ADC模塊
ADCCFG=0x0f; //設置ADC時鐘為系統時鐘/2/16/16,ADC_RES高8位,ADC_RESL高四位
P1M0=0x00; //設置P1.0為ADC口
}
void PWM_Clock(unsigned char clock)
{
if(clock==2)
{
AUXR |= 0x80;//定時器0時鐘為Fosc,即1T
TMOD|=0x02; //8位自動重裝載
TH0=0xe1; //設定頻率
}
CMOD |= 0x05;//(clock<<1);
CL = 0;
CH = 0;
EA=1;
}
void main (void)
{
ADC_config();
PCAInit(); //PWM初始化
while(1)
{
ADC_CONTR |= 0x40; //啟動AD轉換
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20));//查詢ADC完成標志
ADC_CONTR &= ~0x20; //清完成標志
if( TR0=1)
{
EA=0;
CR=1;
TH0= ADC_RES; //調頻
}
}
}
|