|
#include <reg51.h>
void DELAY();
//K1 BIT P1.4 ;加速鍵
sbit K1=P1^4;
//K2 BIT P1.5 ;減速鍵
sbit K2=P1^5;
//K3 BIT P1.6 ;正反鍵
sbit K3=P1^6;
//CLK BIT P0.0 ;速度控制信號(hào)
sbit CLK=P0^0;
//ZF BIT P0.1 ;正反控制信號(hào)
sbit ZF=P0^1;
//PWMH EQU 30H ;調(diào)寬值,定時(shí)器所賦值
//PWML EQU 31H
unsigned int PWM _at_ 0x30;
#define PWMH ((unsigned char *)(&PWM))[0]
#define PWML ((unsigned char *)(&PWM))[1]
//ORG 0000H
//LJMP MAIN
//-----
//ORG 000BH ;中斷1控制周期
//LJMP TIMER1
//void TIMER0() interrupt 1
//ORG 001BH ;中斷3控制脈寬
//LJMP TIMER2
//void TIMER1() interrupt 3
//ORG 0030H
void main()
{
//MAIN: MOV PWMH,#00H
PWMH=0x00;
// MOV PWML,#0FH
PWML=0x0F;
// MOV TMOD,#11H ;兩個(gè)定時(shí)器都工作在方式1
TMOD=0X11;
// MOV TH0,#00H ;65.536mm定時(shí)
TH0=0X00;
// MOV TL0,#00H
TL0=0X00;
// MOV TH1,PWMH ;脈寬
TH1=PWMH;
// MOV TL1,PWML
TL1=PWML;
// SETB EA ;CPU允許中斷
EA=1;
// SETB ET0 ;允許定時(shí)器T0中斷
ET0=1;
// SETB ET1 ;允許定時(shí)器T1中斷
ET1=1;
// SETB TR0 ;定時(shí)器T0計(jì)數(shù)
TR0=1;
// CLR CLK
CLK=0;
while(1)
{
//LOOP: JB K3,LOOPZF ;高電平逆時(shí)針轉(zhuǎn),低電平順時(shí)針轉(zhuǎn)
// CLR ZF ;針轉(zhuǎn)
// LJMP LOOPK1
//LOOPZF: SETB ZF
ZF=K3;
//LOOPK1: JB K1,LOOPK2 ;K1按下加速
if(K1==0)
{
// LCALL DELAY
DELAY();
// MOV A,PWML
// ADD A,#1 ;調(diào)寬值低4位加1
// MOV PWML,A
// MOV A,PWMH
// ADDC A,#0 ;調(diào)寬值高4位加1
// MOV PWMH,A
// JNC LOOPK2 ;最大值時(shí)
// MOV PWMH,#0FFH
PWM++;
if(PWM==0x00)
{
PWMH=0xFF;
}
}
//LOOPK2: JB K2,OVER ;K2按下減速
if(K2==0)
{
// LCALL DELAY
DELAY();
// MOV A,PWML
// CLR C
// SUBB A,#1 ;調(diào)寬值低4位減1
// MOV PWML,A
// MOV A,PWMH
// SUBB A,#0 ;調(diào)寬值高4位減1
// MOV PWMH,A
// JNC OVER
// MOV PWMH,#00H ;最小值時(shí)
PWM--;
if(PWM==0xFFFF)
{
PWMH=0x00;
}
}
//OVER: LJMP LOOP
}
}
void TIMER0() interrupt 1
{
//TIMER0: CLR TR1
TR1=0;
// MOV TH0,#00H
TH0=0;
// MOV TL0,#00H
TL0=0;
// MOV TH1,PWMH ;賦調(diào)寬值
TH1=PWMH;
// MOV TL1,PWML
TL1=PWML;
// SETB TR1
TR1=1;
// CLR CLK
CLK=0;
// RETI
}
void TIMER1() interrupt 3
{
//TIMER1: CLR TR1
TR1=0;
// SETB CLK
CLK=1;
// RETI
}
void DELAY()
{
//DELAY: MOV R4,#10H
unsigned char i;
i=0x10;
//D1: DJNZ R4,D1
do
{
--i;
}while(i);
// RET
}
// END |
|