📄 osc.lst
字号:
466 1 if (S1STA==0x30)
467 1 {
468 2 FF=1;
469 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
470 2 }
471 1 if (S1STA==0x38)
472 1 {
473 2 S1CON=0xE5; //STA=1 STO=0 SI=0 AA=1
474 2 }
475 1 if (S1STA==0x40)
476 1 {
477 2 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
478 2 }
479 1 if (S1STA==0x48)
480 1 {
481 2 FF=1;
482 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
483 2 }
484 1 if (S1STA==0x50)
485 1 {
486 2 GET=S1DAT;
487 2 S1CON=0xC1; //STA=0 STO=0 SI=0 AA=0
488 2 }
489 1 if (S1STA==0x58)
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 9
490 1 {
491 2 FF=1;
492 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
493 2 }
494 1 }
495
496 void CT0_int (void) interrupt 6 //横摆中心
497 {
498 1 CTI0=0;
499 1 CTCON=CTCON&0xFC;
500 1 if(pp.k4==OFF)
501 1 {
502 2 IEN1=IEN1&0XFE;
503 2 gate=0;
504 2 osc_enable=1;
505 2 center_excursion=0;
506 2 }
507 1 else
508 1 {
509 2 if(decrease==1)
510 2 {
511 3 gate=0;
512 3 if(pp.v41>800)
513 3 delay(3);
514 3 temp_c++;
515 3
516 3 if(share+1+osc_adjudge<c_decrease)
517 3 {
518 4 CTCON=CTCON|0x08; //CT1下降沿
519 4 if(temp_c%2==0||first_center==1)
520 4 {
521 5 share++;
522 5 c_t42_l=pp.t42_l*5*(c_decrease-share)/c_decrease;
523 5 c_t42_r=pp.t42_r*5*(c_decrease-share)/c_decrease;
524 5 out1=last_out1*(c_decrease-share)/c_decrease;
525 5 out2=out1;
526 5
527 5 COM=0X76;
528 5 COUNT1=out1%256;
529 5 COUNT1=out1/256;
530 5 COM=0XB6;
531 5 COUNT2=out2%256;
532 5 COUNT2=out2/256;
533 5 IEN1=IEN1|0X02;
534 5 gate=1;
535 5 temp_c=0;
536 5 if(first_center==1)
537 5 first_center=0;
538 5 }
539 4 else
540 4 {
541 5 IEN1=IEN1|0x02;
542 5 gate=1;
543 5 }
544 4 }
545 3 else
546 3 {
547 4 if(temp_c!=2)
548 4 {
549 5 CTCON=CTCON|0x08; //CT1下降沿
550 5 COM=0X76;
551 5 COUNT1=out1%256;
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 10
552 5 COUNT1=out1/256;
553 5 COM=0XB6;
554 5 COUNT2=out2%256;
555 5 COUNT2=out2/256;
556 5 IEN1=IEN1|0X02;
557 5 gate=1;
558 5 }
559 4 else
560 4 {
561 5 gate=0; //关8254门控信号
562 5 CTCON=CTCON&0XF0;
563 5 IEN1=IEN1&0XFC; //禁止CT0,CT1
564 5 decrease_ok=1;
565 5 }
566 4 }
567 3 if(decreased==0)
568 3 decreased=1;
569 3 }
570 2 else
571 2 {
572 3 if(osc==1)
573 3 {
574 4 gate=0; //关8254门控信号
575 4 delay(15);
576 4 if(osc_change==1)
577 4 {
578 5 out1=out1+pp.da41*10;
579 5 osc_add++;
580 5 }
581 4 else
582 4 {
583 5 out1=out1-pp.da41*10;
584 5 osc_dec++;
585 5 }
586 4 out2=out1;
587 4 CTCON=CTCON|0X08;
588 4 COM=0X76;
589 4 COUNT1=out1%256;
590 4 COUNT1=out1/256;
591 4 COM=0XB6;
592 4 COUNT2=out2%256;
593 4 COUNT2=out2/256;
594 4 IEN1=IEN1|0X02;
595 4 gate=1;
596 4 osc=0;
597 4 }
598 3 CTCON=CTCON|0x08;
599 3 IEN1=IEN1|0x02;
600 3 }
601 2 }
602 1 }
603
604 void CT1_int (void) interrupt 7 //整个摆宽
605 {
606 1 CTI1=0;
607 1 gate=0; //out1、out2门控信号
608 1 CTCON=CTCON&0xF3;
609 1 if(osc_ok==0)
610 1 {
611 2 COM=0XB6;
612 2 COUNT2=out2%256;
613 2 COUNT2=out2/256;
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 11
614 2 osc_ok=1;
615 2 }
616 1 osc_dir=~osc_dir; //换横摆方向
617 1 t_edge=~t_edge; //换边缘标志
618 1 osc_out=~osc_out; //横摆输出
619 1 if(decreased==1)
620 1 {
621 2 if(c_t42_l<1)
622 2 c_t42_l=1;
623 2 if(c_t42_r<1)
624 2 c_t42_r=1;
625 2 IEN1=IEN1|0X10;
626 2 }
627 1 else
628 1 {
629 2 if(center_excursion==1&&judge_ok==0)
630 2 {
631 3 if(center_excursion==1&&judge_ok==0)
632 3 {
633 4 if(t_edge==0&&excursion_dir==1||t_edge==1&&excursion_dir==0)//左边缘、向右偏或右边缘、向左偏
634 4 {
635 5 out1=out1+pp.dc41*10;
636 5 judge_ok=1;
637 5 center_excursion=0;
638 5 }
639 4 }
640 3 else if(judge_ok==1)
641 3 {
642 4 out1=out1-pp.dc41*10;
643 4 judge_ok=0;
644 4 }
645 3 out2=2*out1;
646 3 COM=0X76;
647 3 COUNT1=out1%256;
648 3 COUNT1=out1/256;
649 3 COM=0XB6;
650 3 COUNT2=out2%256;
651 3 COUNT2=out2/256;
652 3 osc_enable=0;
653 3
654 3 }
655 2 IEN1=IEN1|0X10; //允许CM0,边缘停留时间
656 2 }
657 1 }
658
659 void CM0_int (void) interrupt 11 //边缘停留时间
660 {
661 1 CMI0=0;
662 1 c_t42++;
663 1 if(decreased==0)
664 1 {
665 2 if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
666 2 {
667 3 IEN1=IEN1&0XEF; //禁止CM0
668 3 CTCON=CTCON|0x02; //CT0下降沿
669 3 IEN1=IEN1|0X01; //允许CT0
670 3 gate=1;
671 3 TR0=1;
672 3 osc_out=~osc_out; //边缘停留时间结束
673 3 c_t42=0;
674 3 }
675 2 }
C51 COMPILER V7.06 OSC 06/22/2005 15:49:12 PAGE 12
676 1 else
677 1 {
678 2 if(t_edge==0&&c_t42==c_t42_l||t_edge==1&&c_t42==c_t42_r) //左边缘
679 2 {
680 3 IEN1=IEN1&0XEF; //禁止CM0
681 3 CTCON=CTCON|0x02;
682 3 IEN1=IEN1|0X01;
683 3 gate=1;
684 3 osc_out=~osc_out; //边缘停留时间结束
685 3 c_t42=0;
686 3 }
687 2 }
688 1 CML0=TML2+0X20;
689 1 if(CML0<TML2)
690 1 CMH0=TMH2+1+0X4E;
691 1 else
692 1 CMH0=TMH2+0X4E;
693 1 }
694
695 main()
696 {
697 1 TMOD=0x22; //定时器1,方式2;定时器0,方式3,两个8位定时器;
698 1 TL1=0XFD; //波特率19200
699 1 TH1=0XFD;
700 1 TR1=1; //启动定时器
701 1 TMOD=0x23; //定时器0,方式3,两个8位定时器;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -