📄 main.lst
字号:
560 3 P_LED2 = 0;
561 3
562 3 strcpy(msg_ans,"LED OFF");
563 3 }
564 2 else
565 2 {
566 3 strcpy(msg_ans,"Error");
567 3 }
568 2
569 2 }
570 1
571 1 // Write the HTML code to a buffer.
572 1 sprintf( HTML_BUFFER,"<HTML>%s</HTML>",msg_ans);
573 1
574 1 // Fill the socket with data to send.
575 1 socket_ptr->send_ptr = HTML_BUFFER;
576 1 socket_ptr->send_len = strlen(HTML_BUFFER);
577 1
578 1 // Return from the CGI script
579 1
580 1 return;
581 1 }
582
583
584 //-----------------------------------------------------------------------------
585 // Initialization Routines
586 //-----------------------------------------------------------------------------
587
588 //-----------------------------------------------------------------------------
589 // PORT_Init
590 //-----------------------------------------------------------------------------
591 //
592 // Configure the Interrupts, Crossbar and GPIO ports
593
594 //
595
596 void PORT_Init()
597 {
598 1 // P0.0 - TX0 (UART0), Open-Drain, Digital
599 1 // P0.1 - RX0 (UART0), Open-Drain, Digital
600 1 // P0.2 - SCK (SPI0), Open-Drain, Digital
601 1 // P0.3 - MISO (SPI0), Open-Drain, Digital
602 1 // P0.4 - MOSI (SPI0), Open-Drain, Digital
603 1 // P0.5 - NSS (SPI0), Open-Drain, Digital
604 1 // P0.6 - SDA (SMBus), Open-Drain, Digital
605 1 // P0.7 - SCL (SMBus), Open-Drain, Digital
606 1
607 1 // P1.0 - Skipped, Open-Drain, Analog
608 1 // P1.1 - Skipped, Open-Drain, Analog
609 1 // P1.2 - Skipped, Open-Drain, Analog
610 1 // P1.3 - Skipped, Open-Drain, Analog
611 1 // P1.4 - Skipped, Open-Drain, Analog
C51 COMPILER V8.02 MAIN 01/16/2008 21:37:44 PAGE 11
612 1 // P1.5 - Skipped, Open-Drain, Analog
613 1 // P1.6 - Skipped, Open-Drain, Analog
614 1 // P1.7 - Skipped, Open-Drain, Analog
615 1
616 1 // P2.0 - TX1 (UART1), Open-Drain, Digital
617 1 // P2.1 - RX1 (UART1), Open-Drain, Digital
618 1 // P2.2 - INT0 (Tmr0), Open-Drain, Digital
619 1 // P2.3 - Unassigned, Open-Drain, Digital
620 1 // P2.4 - Unassigned, Open-Drain, Digital
621 1 // P2.5 - Unassigned, Open-Drain, Digital
622 1 // P2.6 - Unassigned, Open-Drain, Digital
623 1 // P2.7 - Unassigned, Open-Drain, Digital
624 1
625 1 // P3.0 - Unassigned, Open-Drain, Digital
626 1 // P3.1 - Unassigned, Open-Drain, Digital
627 1 // P3.2 - Unassigned, Open-Drain, Digital
628 1 // P3.3 - Unassigned, Open-Drain, Digital
629 1 // P3.4 - Unassigned, Open-Drain, Digital
630 1 // P3.5 - Unassigned, Open-Drain, Digital
631 1 // P3.6 - Unassigned, Push-Pull, Digital
632 1 // P3.7 - Unassigned, Push-Pull, Digital
633 1
634 1 P1MDIN = 0x00;
635 1 P2MDOUT = 0x00;
636 1 P3MDOUT = 0x02;
637 1
638 1 P74OUT = 0xFF;
639 1
640 1
641 1 P4 = 0xC0; // /WR, /RD, are high, RESET is low
642 1 P5 = 0xFF;
643 1 P6 = 0x3F; // P5, P6 contain the address lines
644 1 P7 = 0xFF; // P7 contains the data lines
645 1
646 1 TCON &= ~0x01; // Make /INT0 level triggered
647 1
648 1 // Enable UART0,SPI0,SMBUS0,UART1,P1 as Analog Pin,SO INT0 on P22
649 1 XBR0 = 0x07;
650 1 XBR1 = 0x04;
651 1 XBR2 = 0x44;
652 1 }
653
654
655
656 //-----------------------------------------------------------------------------
657 // EMIF_Init
658 //-----------------------------------------------------------------------------
659 //
660 // Configure the External Memory Interface for both on and off-chip access.
661 //
662 void EMIF_Init (void)
663 {
664 1
665 1 EMI0CF = 0x2B; // Split-mode, multiplexed on P6 - P7
666 1
667 1 EMI0TC = EMIF_TIMING; // This constant may be modified
668 1 // according to SYSCLK to meet the
669 1 // timing requirements for the CP2200
670 1
671 1 EMI0CN = BASE_ADDRESS; // Page of XRAM accessed by EMIF
672 1
673 1 }
C51 COMPILER V8.02 MAIN 01/16/2008 21:37:44 PAGE 12
674
675 //-----------------------------------------------------------------------------
676 // SYSCLK_Init
677 //-----------------------------------------------------------------------------
678 //
679 // This routine initializes the system clock.
680 //
681 void SYSCLK_Init (void)
682 {
683 1 int i = 0;
684 1 OSCXCN = 0x67;
685 1 for (i=0; i < 3000; i++); // Wait at least 1ms
686 1 while(!(OSCXCN & 0x80));
687 1 OSCICN = 0x08;
688 1 }
689
690 //--------------------------------
691 // AD初始化
692 //-------------------------------
693 void ADC_Init()
694 {
695 1
696 1 AMX0CF = 0; // 单端输入
697 1 AMX0SL = 0;
698 1 ADC0CF = 0xF8;
699 1
700 1 ADC0CN = 0xC0;
701 1 }
702
703 void Voltage_Reference_Init()
704 {
705 1 REF0CN = 0x07;
706 1 }
707
708 //------------------------------
709 // DA初始化
710 //------------------------------
711 void DAC_Init()
712 {
713 1 DAC0CN = 0x80; // 使能DAC0,输出数据右对齐
714 1 }
715
716
717 //-----------------------------------------------
718 // 定时器初始化
719 //-----------------------------------------------
720
721 void Timer_Init()
722 {
723 1
724 1 //.......................................
725 1 // 设置定时器的时钟信号
726 1 // - T4M T2M T1M T0M - - -
727 1 // 0 1 0 1 0 0 0 0
728 1 // 1:使用SYSCLK;0:使用SYSCLK/12
729 1 // 定时器0,1,2,4均使用SYSCLK
730 1 //.......................................
731 1 CKCON = 0x70;
732 1
733 1
734 1 //......................................
735 1 // 定时0工作在16位定时器模式
C51 COMPILER V8.02 MAIN 01/16/2008 21:37:44 PAGE 13
736 1 // 定时器1工作在8位重载模式
737 1 //......................................
738 1
739 1 TMOD = 0x21;
740 1
741 1 //....................................
742 1 // T0作为系统节拍时钟
743 1 // 定时计算方法= 65536-t*SYSCLK
744 1 //.....................................
745 1 //TH0 = TMR0H;
746 1 //TL0 = TMR0L;
747 1
748 1 PCON = 0;
749 1 //.......................................
750 1 // T1作为串口0时钟
751 1 // 串口0波特率=SYSCLK/32*(256-TMR1LOAD)
752 1 // T1波特率=9600
753 1 //.......................................
754 1
755 1 TH1 = 0xB8;
756 1 TL1 = 0xB8;
757 1
758 1 TCON = 0x00;
759 1
760 1
761 1 //..................................................
762 1 // T2 and T3 not used
763 1 //..................................................
764 1 RCAP2H = 0x00; // Timer 2 Capture Register High Byte
765 1 RCAP2L = 0x00; // Timer 2 Capture Register Low Byte
766 1 TH2 = 0x00; // Timer 2 High Byte
767 1 TL2 = 0x00; // Timer 2 Low Byte
768 1 T2CON = 0x00; // Timer 2 Control Register
769 1
770 1 TMR3RLL = 0x00; // Timer 3 Reload Register Low Byte
771 1 TMR3RLH = 0x00; // Timer 3 Reload Register High Byte
772 1 TMR3H = 0x00; // Timer 3 High Byte
773 1 TMR3L = 0x00; // Timer 3 Low Byte
774 1 TMR3CN = 0x00; // Timer 3 Control Register
775 1
776 1 //.....................................................
777 1 // T4 作为串口1波特率发生器
778 1 // T4波特率=SYSCLK/32*(65536-RCAP4H:RCAP4L)
779 1 // T4波特率=9600
780 1 //.....................................................
781 1 RCAP4H = 0xFF; // Timer 4 Capture Register High Byte
782 1 RCAP4L = 0xB8; // Timer 4 Capture Register Low Byte
783 1 TH4 = 0xFF; // Timer 4 High Byte
784 1 TL4 = 0xB8; // Timer 4 Low Byte
785 1 T4CON = 0x30; // Timer 4 Control Register
786 1
787 1
788 1 }
789
790 //...........................................................
791 // 功能:UART0初始化
792 // 输入参数:无
793 // 输出参数:无
794 // 注意:1.应该首先使用交叉开关为UART0分配相应的引脚
795 // 2.初始化定时器1作为波特率发生器
796 //..........................................................
797 void UART0_Init()
C51 COMPILER V8.02 MAIN 01/16/2008 21:37:44 PAGE 14
798 {
799 1
800 1 SCON0 = 0x50; // 8位波特率异步通信模式
801 1
802 1 REN0 = 1; // 使能UART0接收
803 1 TR1 = 1; // 启动定时器1
804 1 }
805
806
807 //-----------------------------------------------------
808 // 函数功能:循环方式发送字符串
809 // 输出参数:pSendString,char*:欲发送的字符串的缓冲区
810 // 输出:无
811 //-----------------------------------------------------
812 void SendString(char *pSendString)
813 {
814 1
815 1 // 循环发送,首先关闭中断
816 1
817 1 ES0 =0;
818 1
819 1 while(*pSendString!=0)
820 1 {
821 2 SBUF0 = *pSendString++;
822 2 while(TI0==0);
823 2 TI0=0;
824 2 }
825 1
826 1
827 1
828 1 }
829
830 //-----------------------------
831 // 初始化变量
832 //----------------------------
833 void InitVariable()
834 {
835 1 g_Voltage = 0;
836 1 g_Temperature = 0;
837 1
838 1 g_ADChannel = AD_VOLTAGE;
839 1 }
840
841
842
843 //------------------------------
844 // 以循环的方式进行一次电压采集
845 // g_Voltage是实际电压的1000倍
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -