51单片机软件产生PWM驱动直流电机,频率占空比可调
问题2 :如何做到外部中断、定时器0、定时器1中断优先级分级?解决方法就是分别在各自的服务程序中处理好中断优先级。
演示的仅仅是占空比的变化,题目为:基于51单片机的出租车计价器设计(霍尔元件版本+减速、等待计时等功能)
=============
以下测试程序为版本V1.0的测试程序,非视频中的程序,没有加入PWM控制,只是脉冲检测部分的。
#include sbit cs1=P1^0; sbit start=P2^1; uint s,n=500; uchar code tab[]={ void delay(uint ms) void delayus(uint us) void displayday() P0=tab[n/1000]; P0=tabpoint[n%1000/100]; P0=tab[n%100/10]; P0=tab[n%10]; void displaynight() P0=tab[m/1000]; P0=tabpoint[m%1000/100]; P0=tab[m%100/10]; P0=tab[m%10]; void main() void jisuan() interrupt 0 } void jiance() interrupt 1 }
#define uchar unsigned char
#define uint unsigned int
sbit cs2=P1^1;
sbit cs3=P1^2;
sbit cs4=P1^3;
sbit turn=P2^0;
uint m=500;
bit val=0;
bit flag=0;
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90
};
uchar code tabpoint[]={
0x40,0x79,0x24,0x30,
0x19,0x12,0x02,0x78,
0x00,0x10
};
{
uint i,j;
for (i=ms;i>0;i--)
for (j=110;j>0;j--);
}
{
while(--us);
}
{
cs1=0;
delayus(20);
cs1=1;
P0=0xff;
cs2=0;
delayus(20);
cs2=1;
P0=0xff;
cs3=0;
delayus(20);
cs3=1;
P0=0xff;
cs4=0;
delayus(20);
cs4=1;
P0=0xff;
}
{
cs1=0;
delayus(20);
cs1=1;
P0=0xff;
cs2=0;
delayus(20);
cs2=1;
P0=0xff;
cs3=0;
delayus(20);
cs3=1;
P0=0xff;
cs4=0;
delayus(20);
cs4=1;
P0=0xff;
}
void displayoff()
{
P0=0xff;
cs1=cs2=cs3=cs4=0;
}
{
TMOD=0x02;
TH0=(256-1)/256;
TL0=(256-1)%256;
EA=1;
ET0=1;
TR0=1;
EX0=1;
IT0=0;
while(1)
{
if (start==0&&flag==0)
{
displayday();
}
if (start==0&&flag==1)
{
displaynight();
}
if (start==1)
{
displayoff();
}
}
}
{
s++;
delay(1);
if (val==1&&s==1000)
{
n=n+130;
m=m+200;
s=0;
if (n==9990)
{
n=0;
val=0;
}
if (m==9900)
{
m=0;
val=0;
}
}
if (s==3000)
{
val=1;
s=0;
}
{
if (turn==0)
{
delayus(20);
if (turn==0)
{
flag=!flag;
}
}
51单片机PWM驱动直流电机频率占空 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)