#include"reg51.h"
sbit pwmflag=P2^0;
#define uchar unsigned char
//*****************************pwm //要先初始化定时器,并定义一个high全局,怎么做到不用全局变量? //中断没法传参数 uchar high;
void time0() interrupt 1 { //传递高电平时间,定时为百分之十周期, static uchar count; //百分数记数 中断一次记一次 static bit high_low,load;//高或低,装载标志 要静态。
if(!load) //如果为0,要装载,标志变1 { load=1; if(!high_low) //装载高还是装载低 为0装高电平 count=high; else count=10-high; //这个没有执行,为什么?if else语句有问题 } high=~high_low; //取反高低标志 count--; //记数减1
if(!count) //电平时间是否到? { load=0; //要求装数 pwmflag=~pwmflag;//取反引脚电平 } } //********************** //如果是2khz,周期0.5ms ,十分之一周期50us ,误差不大。 //没办法做到百分之一精度。 dsh() //定时器初始化 { TMOD=0x01; TH0=0xff; TL0=0xce; EA=1; ET0=1; TR0=1; }
void main() //主 { high=3; //高电平百分比 0到10 dsh(); for(;;) ; }
现在问题,1怎么样作到不要全局变量, 2,为什么我的if else没有起作用。if(!high_low) //装载高还是装载低 为0装高电平 count=high; else count=10-high; //这个没有执行,为什么?if else语句有问题
谢谢。 |