欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
利用STC12LE5404AD單片機的AD和定時器輸出頻率和占空比可調 附視頻
[打印本頁]
作者:
ZPK
時間:
2018-11-11 10:20
標題:
利用STC12LE5404AD單片機的AD和定時器輸出頻率和占空比可調 附視頻
題目:利用STC12LE5404AD單片機的AD和定時器輸出頻率和占空比可調。
功能:當調節頻率時,占空比不變;調節占空比時,頻率不變。
輸出范圍:10~500Hz , 5%~95%
電路描述:
1、手里現有STC12LE5204AD,所以使用它。要借鑒的朋友,根據自己的單片機資源調整;
2、現成的晶振頻率為18.432MHz。根據自己手里的晶振使用,不需要通訊的話,可以使用12MHz或者24MHz的晶振,好計算周期。
3、使用單片機的A/D采樣口為P1.6和P1.7端口(可以自己選擇)。使用精密電位器,兩個固定端,一個接地,一個3.3V電源;可調端接一個0.1uF的電容對地,然后通過一個2k
Ω
電阻接入單片機A/D采樣端口。
4、
P3.7口輸出(方波自己布PCB線路,可以自己選擇輸出口)
使用A/D采樣的值(0~FF)去改變定時器的值實現占空比和頻率調節。
最終性能有一點偏差,調節頻率時,占空比有小范圍波動。代碼總長度為
0E78H
。望各位大俠勿噴,求指點迷津。
單片機源程序:
#include "reg51.h"
#include "intrins.h"
#define FOSC 18432000L
typedef unsigned char BYTE;
typedef unsigned int WORD;
sfr ADC_CONTR = 0xBC; //ADC control register
sfr ADC_RES = 0xBD; //ADC high 8-bit result register
sfr ADC_LOW2 = 0xBE; //ADC low 2-bit result register
sfr P1ASF = 0x9D; //P1 secondary function control register
sfr AUXR = 0x8e;
sbit out=P3^7;
//sbit led1=P1^5;
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC power control bit
#define ADC_FLAG 0x10 //ADC complete flag
#define ADC_START 0x08 //ADC start control bit
#define ADC_SPEEDLL 0x00 //420 clocks
float i=100,j=100;
float k=0,d,f,t,t1,t2;
WORD xms;
void InitADC();
void SendData(BYTE dat);
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void ShowResult(BYTE ch);
void Timer0Init();
void Delay_xms(WORD xms);
void main()
{
InitADC(); //Init ADC sfr
out=1;
while (1)
{
ShowResult(6); //Show Channel6
ShowResult(7); //Show Channel7
i = GetADCResult(6);
f = GetADCResult(7);
_nop_(); //Must wait before inquiry
_nop_();
if(i<15) i=15;
else if(i>240) i=240;
if(f<5) f=5;
else if(f>240) f=250;
_nop_();
_nop_();
t=256/f;
d=i/256;
t1=d*t*100;
t2=(1-i/256)*t*100;
_nop_(); //Must wait before inquiry
_nop_();
_nop_();
_nop_();
out =1;
Delay_xms(t1);
out = 0;
Delay_xms(t2);
}
}
BYTE GetADCResult(BYTE ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
return ADC_RES;
}
void InitADC()
{
P1ASF = 0xc0; //Open 8 channels ADC function
ADC_RES = 0; //Clear previous result
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay(2); //ADC power-on and delay
}
void SendData(BYTE dat)
{
while (!TI); //Wait for the previous data is sent
TI = 0; //Clear TI flag
SBUF = dat; //Send current data
}
void Delay(WORD n)
{
WORD x;
while (n--)
{
x = 5000;
while (x--);
}
}
void Timer0Init(void) //1????@18.432MHz
{
AUXR &= 0x7F;
TMOD &= 0xF0;
TMOD |= 0x01;
TL0 = 0x00;
TH0 = 0xFA;
TF0 = 0;
TR0 = 1;
}
void Delay_xms(WORD xms)
{
WORD nms;
nms=xms*140;
while (nms--)
{
Timer0Init();
}
}
復制代碼
0.png
(38.49 KB, 下載次數: 25)
下載附件
2018-11-11 14:00 上傳
全部資料51hei下載地址:
視頻.rar
(10.77 MB, 下載次數: 14)
2018-11-11 10:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1