📄 fun.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 + -