EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机C语言程序设计:用 ADC0808 控制 PWM 输出
) w8 e8 P$ G5 o# h' s8 @& a& m# w1 [. j$ c, G0 a9 D
* }! r2 i( s' e+ g: M5 v# `. i6 p' k/* 名称:用 ADC0808 控制 PWM 输出 说明:使用数模转换芯片 ADC0808,通过调节可变电阻 RV1 来调节脉冲宽度, 运行程序时,通过虚拟示波器观察占空比的变化。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int
4 F8 k" A& Y0 |, B2 X% Tsbit CLK=P2^4; //时钟信号
2 L& h; J+ }. Ssbit ST=P2^5; //启动信号 3 w1 \$ c3 R i2 w
sbit EOC=P2^6; //转换结束信号 sbit OE=P2^7; //输出使能 sbit PWM=P3^0; //PWM 输出 //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<40;i++); } //主程序 void main() { uchar Val; TMOD=0x02; //T1 工作模式 2 TH0=0x14; TL0=0x00; IE=0x82; TR0=1; while(1) {
: g, G$ e4 v% @" \
/ F8 F0 b3 m- y
ST=0;ST=1;ST=0; //启动 A/D 转换 . J0 }4 E3 |$ D1 C1 K' i; V" P8 a
while(!EOC); //等待转换完成 OE=1; ' A# m3 L- v8 h/ c
* V4 ~ d1 l0 I* J: M' NVal=P1; //读转换值 OE=0; if(Val==0) //PWM 输出(占空比为 0%) { PWM=0; DelayMS(0xff); continue; } if(Val==0xff) //PWM 输出(占空比为 100%) { PWM=1; % ]( c& o) h( u2 z& w
DelayMS(0xff); continue; 6 Q6 n, [& M( f9 r- Y5 G; q
} } $ `, v7 A! W9 ]5 J+ X# G' H" k
//T0 定时器中断给 ADC0808 提供时钟信号 void Timer0_INT() interrupt 1 { CLK=~CLK; } 8 ^+ ~' M: ?$ E* I8 D% q& R
& y% H% Z& }9 o, E6 ?PWM=1; //PWM 输出(占空比为 0%~100%) DelayMS(Val); PWM=0; DelayMS(0xff-Val); : r; X- S J' i6 |) b+ R
5 F- j' H. k Z4 v) a% j7 L( ]
% U3 w; q0 Q \( f9 N0 I
r, b! B- u, w8 `8 B6 f
% K2 U8 f6 L8 n4 E$ Q! ] |