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

📄 fun.c

📁 这是单片机实验板比较齐全的程序
💻 C
字号:
/*******************************************************************************
*  标题:  student2000单片机开发系统演示程序                            *
*  文件:  fun.C                                                               *
*  日期:  2007-5-4                                                             *
*  版本:  1.0                                                                  *

  ********************************************************************************
  *  描述:                                                                       *
  *        大部分通用函数集合                                             *     
*        RS232,RS485,延时函数,协议框架演示等                                  */
#include <reg52.h>
#include    <intrins.h>
#include <string.h>
#include <absacc.h>
#include <stdio.h>
#include "sybxt1.h"
xdata unsigned char  ucRxBuf[RXBUFSIZE];
xdata unsigned char  ucRxBuf1[RXBUFSIZE];
xdata sprotocol spro;
sbit P3_6= P3^6;
sbit P3_7= P3^7;
//rs485的方向控制端;
sbit SRSEL=P1^7;
unsigned int uiOffset=0;
unsigned int uiRxCount=0;
uchar i; 
sbit adclk = P1^1;     // 输入输出时钟I/O CLK
sbit addata = P1^0;    // 数据输出DATA OUT
sbit adcs = P1^5;      // 片选信号
sbit SPI_CLK=P1^1;
sbit SPI_DATA=P1^0;
sbit CS_DA=	P1^4;
 
void ComInit(void) /*串行口初始化*/
{
	SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr 
	TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload 
	PCON |= 0x00; //SMOD=0; 
	TH1 = 0xFd; //Baud:4800 fosc=11.0592MHz 
	TL1 = 0xFd; //Baud:4800 fosc=11.0592MHz 
	
	IE |= 0x90; //Enable Serial Interrupt 
	TR1 = 1; // timer 1 run 
}
/*********************************
串口 0 中断函数
*********************************/
void serial_0(void) interrupt 4
{
	
	unsigned	char a;
	if(RI)
	{  
		a=SBUF;
		ucRxBuf[uiRxCount]=a;
		RI=0;
		//send_byte(ucRxBuf[uiRxCount]);
		uiRxCount++;
		uiRxCount%=RXBUFSIZE;
		uccmd=a;
		
	}
	
}



send_byte(unsigned char ucI)
{
	SBUF=ucI;
	do{}while(TI==0);
	TI=0;
}
send_bytes_len(unsigned char *ucI,uchar len)
{
	uchar i;
	for(i=0;i<len;i++)
	{
		SBUF=ucI[i];
		do{}while(TI==0);
		TI=0;
	}
}
send_bytes(unsigned char *ucI)
{
	for(i=0;i<strlen(ucI);i++)
	{
		SBUF=ucI[i];
		do{}while(TI==0);
		TI=0;
	}
}
send_bytes1_485(unsigned char *ucI,uchar len)
{
	SRSEL=1;
	for(i=0;i<10;i++)
		_nop_();
	for(i=0;i<len;i++)
	{
		SBUF=ucI[i];
		do{}while(TI==0);
		TI=0;
	}
	SRSEL=0;
	 	 for(i=0;i<10;i++)
			 _nop_();
}
void DisplayKeyToHex_RS485()
{
	int i;
	while(uiOffset!=uiRxCount)
	{
		memset(str,0,20);
		i=0;
		i =sprintf(str, "Key=[%c][%2bd]",ucRxBuf[uiOffset],ucRxBuf[uiOffset]);
		i+=sprintf(str+i,"[%2bx]",ucRxBuf[uiOffset]&0x0ff);
		send_bytes1_485(str,i);
		//send_bytes1_485(&ucRxBuf[uiOffset],1);
		uiOffset++;
		uiOffset%=RXBUFSIZE;
	}
}

void delay200ms(uchar icount)
{
	unsigned char i,j,k;
	while(icount--)
	{
		for(i=5;i>0;i--)
			for(j=132;j>0;j--)
				for(k=150;k>0;k--);
	}
}
void delay1ms(void)
{
	unsigned char i,j;
    for(i=5;i>0;i--)
		for(j=132;j>0;j--)
			;//for(k=1;k>0;k--);
}
uchar get549data(void)
{
	uchar i,sample_data;
    adclk=0;
    adcs=0;
    _nop_();
    _nop_();
    if(addata==1)
    {
        sample_data=1;
    }
    else
    {
        sample_data=0;
    }
    for(i=0;i<7;i++)
    {
        sample_data=(sample_data<<1);
        adclk=1;
        _nop_();
        _nop_();
        adclk=0;
        if(addata==1)
        {
            sample_data=(sample_data|0x01);
        }
    }
    adclk=1;
    _nop_();
    _nop_();
    adclk=0;
    _nop_();
    _nop_();
    adclk=1;
    adcs=1;
    return sample_data;
}

void da5615(uint da)
{
	uchar i;
	da<<=6;
	CS_DA=0;
	SPI_CLK=0;
	for (i=0;i<12;i++)
	{
		SPI_DATA=(bit)(da&0x8000);
		SPI_CLK=1;
		da<<=1;
		SPI_CLK=0;
	}
	CS_DA=1;
	SPI_CLK=0;
	for (i=0;i<12;i++);
} 

⌨️ 快捷键说明

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