久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
這個電路有會設計的兄弟嗎
[打印本頁]
作者:
bbxyliyang
時間:
2024-9-15 09:43
標題:
這個電路有會設計的兄弟嗎
對50Hz的正弦電壓的正半波進行AD轉換,要求半個周期內轉換100個點的值,并求出100個點的平均值和有效值,并通過LCD顯示和通過串口傳到PC機的串口助手上。(先判斷正半波的零點)
作者:
黃youhui
時間:
2024-9-15 17:05
不懂你什么意思?這不就是個ADC采集嗎?先用一個二極管濾掉負半周只保留正半周,然后ADC采集后將二極管壓降加回去。就是個普通的ADC采集啊。
作者:
老董
時間:
2024-9-15 19:31
正好去年寫過類似的程序 是取樣40個點 你可以自己改一下延時和循環次數 參考一下吧
#include "stc15.h"
#include "intrins.h"
#define FOSC 11059200L
#define BAUD 115200
typedef unsigned char u8;
typedef unsigned int u16;
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540個時鐘
#define ADC_SPEEDL 0x20 //360個時鐘
#define ADC_SPEEDH 0x40 //180個時鐘
#define ADC_SPEEDHH 0x60 //90個時鐘
#define S1_S0 0x40
#define S1_S1 0x80
void InitUart();
void InitADC();
void Init_timer();
void qie_huan();
void SendData(u8 dat);
u16 GetADCResult(u8 ch);
void Delay(u16 n);
void ShowResult(u16 ch);
u16 dat1;
u8 mod,dac_end,sync;
u16 se[8]={0,0,0,0,0,0,0,0},sm[8]={0,0,0,0,0,0,0,0};
bit busy;
sbit led=P3^2;
sbit led1=P3^3;
/*----------------------------
讀取ADC結果
----------------------------*/
u16 GetADCResult(u8 ch)
{
u16 dat;
ADC_CONTR = ADC_POWER | ADC_SPEEDH | ch ;
ADC_CONTR|= ADC_START;
_nop_(); //等待4個NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉換完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC
dat= (ADC_RES<<8)&0xff00|ADC_RESL; //返回ADC結果
return dat;
}
void qie_huan() //串口引腳選擇函數
{
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
// ACC = P_SW1;
// ACC &= ~(S1_S0 | S1_S1); //S1_S0=1 S1_S1=0
// ACC |= S1_S0; //(P3.6/RxD_2, P3.7/TxD_2)
// P_SW1 = ACC;
}
/*----------------------------
初始化串口
----------------------------*/
void InitUart()
{
SCON = 0x5a; //設置串口為8位可變波特率
T2L = (65536 - (FOSC/4/BAUD));
T2H = (65536 - (FOSC/4/BAUD)) >> 8;
AUXR |= 0x10; //T2為1T模式, 并啟動定時器2
AUXR |= 0x04;
AUXR |= 0x01; //選擇定時器2為串口1的波特率發生器
ES=1;
EA=1;
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
P1ASF = 0xff; //設置P1口為AD口
ADC_RES = 0;
ADC_RESL=0;
CLK_DIV |= 0x20;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay(2); //ADC上電并延時
}
void Init_timer()
{
AUXR |= 0x80; //定時器0為1T模式
// AUXR &= 0x7f; //定時器0為12T模式
TMOD &= 0xF0; //設置定時器為模式0(16位自動重裝載)
TL0 = 0xF0; //設置定時初始值
TH0 = 0x31;
TR0 = 1; //定時器0開始計時
ET0 = 1; //使能定時器0中斷
EA = 1;
}
/*----------------------------
發送串口數據
----------------------------*/
void SendData(u8 dat)
{
while (busy); //等待前一個數據發送完成
busy = 1; //清除發送標志
SBUF = dat; //發送當前數據
}
/*----------------------------
發送ADC結果到PC
----------------------------*/
void ShowResult(u16 ch)
{
u8 h,l;
h=ch>>8;
l=ch;
SendData(l); //顯示高2位結果
SendData(h); //顯示高2位結果
}
/*----------------------------
軟件延時
----------------------------*/
void Delay(u16 n)
{
u16 x;
while (n--)
{
x = 5000;
while (x--);
}
}
void Delay500us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 6;
j = 93;
do
{
while (--j);
} while (--i);
}
void main()
{
u8 i,j;
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
qie_huan();
Init_timer();
InitUart(); //初始化串口
InitADC(); //初始化ADC
while(1)
{
TR0 = 1;
ET0 = 1;
for(i=0;i<40;i++)
{
Delay500us();
for(j=0;j<8;j++)
{
se[j]=GetADCResult(j);
if(se[j]>sm[j])
{
sm[j]=se[j];
}
}
}
for(i=0;i<8;i++)
{
ShowResult(sm[i]);
sm[i]=0;
}
while (!mod||(sync!=49));
TR0 = 0;
ET0 = 0;
mod=0;
sync=48;
// while (mod&&(sync==49))
// {
// TR0 = 0;
// ET0 = 0;
// for(i=0;i<8;i++)
// {
// ShowResult(sm[i]);
// sm[i]=0;
// }
// mod=0;
// TR0 = 1;
// ET0 = 1;
// sync=48;
// }
}
while(1);
}
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1
{
dat1++;
led1=!led1;
if(dat1>20)
{
mod=1;
dat1=0;
led=!led;
}
}
/*UART 中斷服務程序
-----------------------------*/
void Uart() interrupt 4
{
if(RI)
{
RI = 0; //清除RI位
sync=SBUF;
}
if(TI)
{
TI = 0; //清除TI位
busy = 0;
}
}
作者:
藍藍小星星
時間:
2024-9-15 19:53
不難,對單片機的處理速度有要求
作者:
gzhdssj
時間:
2024-9-15 21:08
一個周期20ms,10ms 100個點,即100us一次采樣,一般都可以達到,要看轉換精度了
作者:
bbxyliyang
時間:
2024-9-16 09:56
老董 發表于 2024-9-15 19:31
正好去年寫過類似的程序 是取樣40個點 你可以自己改一下延時和循環次數 參考一下吧
#include "stc15.h"
# ...
好的,謝謝
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美不卡视频
|
欧美激情视频一区二区
|
99精品视频在线观看
|
日韩中文字幕第一页
|
蜜臀99久久精品久久久久小说
|
欧美网站在线观看
|
黄色小视频在线免费观看
|
国产精品午夜视频
|
黄色一级大片
|
一区二区三区在线看
|
免费一级全黄少妇性色生活片
|
久久婷婷色
|
日韩三级中文字幕
|
国产小精品
|
av不卡在线播放
|
欧美成人毛片
|
日韩精品视频免费在线观看
|
蜜臀久久99精品久久久久久宅男
|
影音先锋在线观看视频
|
99视频精品
|
国产精品成人免费精品自在线观看
|
日韩8x8x
|
午夜影院免费
|
国产麻豆视频
|
亚洲成肉网
|
中国极品少妇xxxx做受
|
嫩草视频在线观看
|
国产福利小视频
|
久久日av
|
在线伊人网
|
天天色影院
|
日韩激情一区二区
|
日韩毛片在线播放
|
日韩一区二区视频在线观看
|
欧美亚洲激情
|
亚洲成人免费在线
|
羞羞的视频在线观看
|
狠狠干婷婷
|
成人动漫视频
|
日本久久精品
|
在线a
|