⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.bak

📁 STC51系列单片机通过vk3x系列芯片扩展串口的源码
💻 BAK
字号:
#include "def.h"
#include "vkxx.h"
#include <stdio.h>
unsigned int  xdata  wd  _at_ 0xabcd;
//在各种方式中,main.c函数和vkxx.h是通用的def.h在spi和parallel方式是通用的uart
//的多了两个批量读写fifo的函数;底层函数不同

void delay (unsigned int delaydata)
{
    unsigned int tempdata=delaydata;
	while(tempdata)
	{
	tempdata=tempdata-1;	
	}
}


void Init_led(void)
{
    unsigned int tempdata=0x0ffff;

    CH4_LED = 0;
    CH3_LED = 0;
    CH2_LED = 0;
    CH1_LED = 0;
    PAR_LED = 0;
    SPI_LED = 0;
    UART_LED = 0;
	while(tempdata)
	{
	tempdata=tempdata-1;	
	}
	CH4_LED = 1;
	CH3_LED = 1;
	CH2_LED = 1;
	CH1_LED = 1;
	PAR_LED = 1;
	SPI_LED = 1;
    UART_LED = 1;
    tempdata=0x0ffff;
	while(tempdata)
	{
	tempdata=tempdata-1;	
	}
    CH4_LED = 0;
    CH3_LED = 0;
    CH2_LED = 0;
    CH1_LED = 0;
    PAR_LED = 0;
    SPI_LED = 0;
    UART_LED = 0;
    tempdata=0x0ffff;
	while(tempdata)
	{
	tempdata=tempdata-1;	
	}
	CH4_LED = 1;
	CH3_LED = 1;
	CH2_LED = 1;
	CH1_LED = 1;
	PAR_LED = 1;
	SPI_LED = 1;
    UART_LED = 1;
    tempdata=0x0ffff;
	while(tempdata)
	{
	tempdata=tempdata-1;	
	}
    CH4_LED = 0;
    CH3_LED = 0;
    CH2_LED = 0;
    CH1_LED = 0;
    PAR_LED = 0;
    SPI_LED = 0;
    UART_LED = 0;
    tempdata=0x0ffff;
	while(tempdata)
	{
	tempdata=tempdata-1;	
	}
}


main()
{	static unsigned char dat1,dat2,dat3,dat4,m,n;
    unsigned int tmp=0xfff;
    unsigned char err_fla=0,err_flb=0,err_flc=0,err_fld=0;

 	n=0;
	m=0;
    
    Init_led();
	config();
	config_vkxx();


    //***********************************************
    //主SPI口测试;
		CH4_LED = 0;
		CH3_LED = 0;
		CH2_LED = 0;
		CH1_LED = 0;
		PAR_LED = 1;
		SPI_LED = 0;
        UART_LED = 1;
	while(1)
	{
		
		write_reg(1,SFDR,m);
		write_reg(2,SFDR,m);
		write_reg(3,SFDR,m);
		write_reg(4,SFDR,m);

		delay(0x8ff);
		delay(0x8ff);  
		
		delay(0x8ff);
		delay(0x8ff); 

        //*********************************************
        //检测子串口1读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH1_LED
		if(read_reg(1,SFSR))
	  	 {
		  CH1_LED =1;
		 }
        //*********************************************
        //检测子串口2读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH2_LED
		if(read_reg(2,SFSR))
		 {
		  CH2_LED =1;
		 }
        //*********************************************
        //检测子串口3读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH3_LED
		if(read_reg(3,SFSR))
		 {
		  CH3_LED =1;
		 }
        //*********************************************
        //检测子串口4读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH4_LED
		if(read_reg(4,SFSR))
		 {
		  CH4_LED =1;
		 }
/*
*/
			dat1=read_reg(1,SFDR);
			dat2=read_reg(2,SFDR);
			dat3=read_reg(3,SFDR);
			dat4=read_reg(4,SFDR);



           if(dat1==m)
             CH1_LED =0;
           else             
             err_fla =1;
           if(dat2==m)
             CH2_LED =0;
           else
             err_flb =1;
           if(dat3==m)
             CH3_LED =0;
           else
             err_flc =1;
           if(dat4==m)
             CH4_LED =0;
           else
             err_fld =1;




        //*********************************************
        //如果有一个不等将熄灭灯
			
			if(err_fla==1)             
		  	 CH1_LED =1;
			if(err_flb==1)
			 CH2_LED =1;
			if(err_flc==1)
			 CH3_LED =1;
			if(err_fld==1)
			 CH4_LED =1;


/*

        //*********************************************
        //检测子串口1读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH1_LED
        if(read_reg(1,SFSR))
          {
           dat1=read_reg(1,SFDR);
           if(dat1==m)
             CH1_LED =0;
           else
             CH1_LED =1;
          }
        else
          CH1_LED =1;

        //*********************************************
        //检测子串口2读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH2_LED
        if(read_reg(2,SFSR))
          {
           dat2=read_reg(2,SFDR);
           if(dat2==m)
             CH2_LED =0;
           else
             CH2_LED =1;
          }
        else
         CH2_LED =2;

        //*********************************************
        //检测子串口3读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH3_LED
        if(read_reg(3,SFSR))
          {
           dat3=read_reg(3,SFDR);
           if(dat3==m)
             CH3_LED =0;
           else
             CH3_LED =1;
          }
        else
         CH3_LED =1;

        //*********************************************
        //检测子串口4读回的数据个数和所发送数据是否为
        //主串口所发送的个数和数据.如有不正确熄灭到子串口CH4_LED
        if(read_reg(4,SFSR))
          {
           dat4=read_reg(4,SFDR);
           if(dat4==m)
             CH4_LED =0;
           else
             CH4_LED =1;
          }
        else
          CH4_LED =1;
*/
     m=m+1;
     if(m==255)
       m=0;

  }
	while(1)
	{
		do
		{
//*****************************************************			
			write_reg(1,SFDR,m);
			write_reg(2,SFDR,m);
			write_reg(3,SFDR,m);
			write_reg(4,SFDR,m);
//分别通过各路子串口发送数据m
//*****************************************************
			while(!(read_reg(1,SFSR)));
			while(!(read_reg(2,SFSR)));
  			while(!(read_reg(3,SFSR)));
			while(!(read_reg(4,SFSR)));

			dat1=read_reg(1,SFDR);
			dat2=read_reg(2,SFDR);
			dat3=read_reg(3,SFDR);
			dat4=read_reg(4,SFDR);
//先查看接收FIFO中是否有数据,如果接收FIFO中有数据?
//则把各路子串口接收FIFO中的数据读出来
//*****************************************************
			if(dat1!=m || dat2!=m || dat3!=m || dat4!=m) 
			n=n+1;
		}
		while(m<255);
		if(m==255)
		m=0;
		m=m+1;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -