📄 sp23x9 demo.c.bak
字号:
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!申 明!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
//本驱动程序属于成都视普科技公司所有,仅允许免费用于本公司销售的产品中,未 //
//经书面许可任何单位或个人不可将本程序用于其它用途,否则将追究其法律责任 //
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/***************************************************************************
SP2339_SP2349_driver.c source file SP2339/SP2349 serial communication
example for MCS-51 MCU (oscillating crystal: 11.0592MHz)
Author: ShouPing Yang , 2007-09-18
***************************************************************************/
//说明:AT89C52在11.0592Mhz下不能获得76.8Kbps的波特率,必须采用22.1184Mhz!!!!!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar idata TempBuffer[32]; //子串口数据发送缓冲区(大小可由用户随意配置)
uchar idata SendByteNum,SendOverFlag; //
/*****************************************************************************
功能:设定SP2339/SP2349输入、输出地址,可根据实际电路修改
*****************************************************************************/
//sbit AdrIn0 =P1^0; /* 连接到SP2349的PIN0(ADRO0),可以不用连接*/
//sbit AdrIn1 =P1^1; /* 连接到SP2349的PIN1(ADRO1),可以不用连接*/
sbit AdrOut0=P1^2; /* 连接到SP2349的PIN18(ADRI0)*/
sbit AdrOut1=P1^3; /* 连接到SP2349的PIN17(ADRI1)*/
serial () interrupt 4 {
if(RI){ //由于不会同时接收两个串口的数据,所以不需要判断接收地址
RI=0;
TempBuffer[--SendByteNum]=SBUF; //SendByteNum需要初始化
}
else{
TI=0;
SendOverFlag=0;
if(SendByteNum){ //如果数据还没有发送结束,则继续发送
SBUF=TempBuffer[--SendByteNum];
}
}
}
void init_serialcomm(void){
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
T2CON |= 0x34; //TMOD: timer 2, mode 2, 16-bit reload,timer 2 run
RCAP2H = 0xFF; //Baud:76800 fosc=22.1184MHz
RCAP2L = 0xF7; //Baud:76800 fosc=22.1184MHz
IE |= 0x90; //Enable Serial Interrupt
IP = 0x10; //只允许串口中断为最高优先级,其它为次优先级。
SendByteNum=0; //初始化串口0发送缓冲区"空"
}
void SetUartMode(uchar SerialNum){//"0"设置串口0为单串口,否则设置串口1为单串口
if(SerialNum){ //设置串口1为单串口模式(波特率为:57600)
RCAP2H = 0xFF; //Baud:76800 fosc=22.1184MHz
RCAP2L = 0xF7; //Baud:76800 fosc=22.1184MHz
AdrOut0=1;
AdrOut1=1;
SBUF=0x0D; //设置为单串口模式1
SendOverFlag=1;
while(SendOverFlag);
AdrOut0=1;
AdrOut1=0;
RCAP2H = 0xFF; //Baud:57600 fosc=22.1184MHz
RCAP2L = 0xF4; //Baud:57600 fosc=22.1184MHz
}
else{ //设置串口0为单串口模式(波特率为:115200)
RCAP2H = 0xFF; //Baud:76800 fosc=22.1184MHz
RCAP2L = 0xF7; //Baud:76800 fosc=22.1184MHz
AdrOut0=1;
AdrOut1=1;
SBUF=0x0C; //设置为单串口模式0
SendOverFlag=1;
while(SendOverFlag);
AdrOut0=0;
AdrOut1=0;
RCAP2H = 0xFF; //Baud:115200 fosc=22.1184MHz
RCAP2L = 0xFA; //Baud:115200 fosc=22.1184MHz
}
}
main(){
uchar i=0;
init_serialcomm(); //初始化MCU串口波特率和所有子串口波特率
SetUartMode(0); //设置串口0为单串口模式
TempBuffer[i++]=0x30; //串口0依次发送"0x37"、"0x36" ..."0x30"
TempBuffer[i++]=0x31;
TempBuffer[i++]=0x32;
TempBuffer[i++]=0x33;
TempBuffer[i++]=0x34;
TempBuffer[i++]=0x35;
TempBuffer[i++]=0x36;
TempBuffer[i++]=0x37;
SendByteNum=i;
TI=1;
while(SendByteNum); //等待串口0的数据发送结束
SetUartMode(1); //设置串口1为单串口模式
TempBuffer[i++]=0x40;
TempBuffer[i++]=0x41;
TempBuffer[i++]=0x42;
TempBuffer[i++]=0x43;
TempBuffer[i++]=0x44;
TempBuffer[i++]=0x45;
TempBuffer[i++]=0x46;
TempBuffer[i++]=0x47;
SendByteNum=i;
TI=1;
while(SendByteNum); //等待串口1的数据发送结束
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -