📄 51.c
字号:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned short
#define ulong unsigned long
void delayms(uint x)
{ uint i;
while(x>0)
{ for (i=1; i<60;i++);
{x--; }
}
}
void beeps(uint t)
{
beep = 1;
delayms(t);
beep = 0;
}
void write_8254_config( uchar num, uchar config_data )
{
if(num == 1)
cs1 = 0;
if(num == 2)
cs2 = 0;
rd = 1;
a0 = 1;
a1 = 1;
P0 = config_data;
wr = 0;
rd = 1;
wr = 1;
cs1 = 1;
cs2 = 1;
P0 = 0xff;
}
void program_count( uchar num_p, uchar num_c, uint cv )
{
if(num_p == 1)
cs1 = 0;
if(num_p == 2)
cs2 = 0;
rd = 1;
a0 = ((num_c % 2 ) == 1) ;
a1 = ((num_c / 2 ) == 1) ;
P0 = cv%256;
wr = 0; rd = 1; wr = 1;
P0=cv/256;
wr= 0; rd = 1; wr = 1;
cs1 = 1;
cs2 = 1;
a0 = a1 = 1;
P0 = 0xff;
}
void set_pulse1(uint p_num, uint freq)
{
write_8254_config(1, 0x70);
program_count(1, 1, p_num);
write_8254_config(1, 0x36);
program_count(1, 0, freq);
}
void set_pulsef1(uint p_num, uint freq)
{
uint f = (uint)((10000000 / (ulong)freq));
write_8254_config(1, 0x70);
program_count(1, 1, p_num);
write_8254_config(1, 0x36);
program_count(1, 0, f);
}
void set_pulse2(uint p_num, uint freq)
{
write_8254_config(2, 0x70);
program_count(2, 1, p_num);
write_8254_config(2, 0x36);
program_count(2, 0, freq);
}
void set_pulsef2(uint p_num, uint freq)
{
uint f = (uint)((10000000 / (ulong)freq));
write_8254_config(2, 0x70);
program_count(2, 1, p_num);
write_8254_config(2, 0x36);
program_count(2, 0, f);
}
void set_pulse3(uint p_num, uint freq)
{
write_8254_config(1, 0xb0);
program_count(1, 2, p_num);
write_8254_config(2, 0xb6);
program_count(2, 2, freq);
}
void conti_move()
{
uint num;
b_stop = 0;
// beeps(100);
while(1)
{
set_pulsef2(500, speed);
// beeps(20);
while(1)
{
delayms(10);
num = read_count(2, 1);
if(b_stop || (num==0) )
break;
else if(bb)
{
bb = 0;
break;
}
}
if(b_stop) {
set_pulse2(2, 20000);
break;
}
}
// beeps(1000);
}
void cer_move()
{
set_pulsef2(num_p, speed);
b_stop = 0;
// task_n = 2;
delayms(20);
while(read_count(2, 1) != 0)
{
delayms(10);
if(b_stop)
{
break_bit = 1;
set_pulsef2(2, speed);
break;
}
}
// beeps(1000);
// task_n = 0;
}
void loudou_move()
{
set_pulsef1(num_p, speed);
b_stop = 0;
//task_n = 2;
delayms(20);
while((read_count(1, 1) != 0) && (!b_stop))
{
delayms(10);
if(b_stop)
{
// break_bit = 1;
set_pulsef1(1, speed);
break;
}
}
set_pulsef1(1, speed);
///task_n = 0;
}
main()
{
// uint i;
EA = 1;
beeps(100);
CH375_Init();
delayms(500);
while(1) {
while (break_bit);
switch (task_p) {
case 0x01: /*delayms(1000); beeps(1000);*/
speed = (uint)((uint)dat[2] * 256 + dat[3]);
dir2 = dat[4];
conti_move();
break_bit=1;
break;
case 0x02: /* delayms(1000); beeps(1000);*/
b_stop=0; break_bit=1;
break;
case 0x03: /* delayms(1000); beeps(1000); */
speed = (uint)((uint)dat[2] * 256 + dat[3]);
num_p = (uint)((uint)dat[4] * 256 + dat[5]);
dir2 = dat[7];
cer_move();
break_bit=1;
break;
case 0x04: /* delayms(1000); beeps(1000); */
speed = (uint)((uint)dat[2] * 256 + dat[3]);
num_p = (uint)((uint)dat[4] * 256 + dat[5]);
dir1 = dat[7];
loudou_move();
break_bit=1;
break;
default: break_bit=1; break;
}
// delayms(1000);
// beeps(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -