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

📄 16c554.c

📁 proface的触摸屏和艾默生的变频器通过此程序可相互通信
💻 C
📖 第 1 页 / 共 2 页
字号:
#include ".\STC89c5x.H"
#include<absacc.h>
#include <intrins.h>
#include"Comm.h"
//*******************************************************ST16C1554端口定义
//串口1
#define uc_16c554a_RHR  XBYTE[0x7000]         //RECEIVE HOLDING REGISTER
#define uc_16c554a_THR  XBYTE[0x7000]         //TRANSMIT HOLDING REGISTER
#define uc_16c554a_IER   XBYTE[0x7100]        //INTERRUPT  ENABLE REGISTER
#define uc_16c554a_ISR   XBYTE[0x7200]        //INTERRUPT  STATUE REGISTER
#define uc_16c554a_FCR  XBYTE[0x7200]        //FIFO CONTROL REGISTER
#define uc_16c554a_LCR  XBYTE[0x7300]        //LINE CONTROL REGISTER
#define uc_16c554a_MCR  XBYTE[0x7400]       //MODEM  CONTEROL REGISTER
#define uc_16c554a_LSR  XBYTE[0x7500]        //LINE  STATUE REGISTER
#define uc_16c554a_MSR  XBYTE[0x7600]       //MODEM STATUE REGISTER
#define uc_16c554a_SPR  XBYTE[0x7700]       //SCRATCHPAD REGISTER

#define uc_16c554a_DLL  XBYTE[0x7000]      //LSB OF DIVISOR LATCH
#define uc_16c554a_DLM  XBYTE[0x7100]      //MSB  OF DIVISOR LATCH

//串口2
#define uc_16c554b_RHR  XBYTE[0x6800]         //RECEIVE HOLDING REGISTER
#define uc_16c554b_THR  XBYTE[0x6800]         //TRANSMIT HOLDING REGISTER
#define uc_16c554b_IER   XBYTE[0x6900]        //INTERRUPT  ENABLE REGISTER
#define uc_16c554b_ISR   XBYTE[0x6A00]        //INTERRUPT  STATUE REGISTER
#define uc_16c554b_FCR  XBYTE[0x6A00]        //FIFO CONTROL REGISTER
#define uc_16c554b_LCR  XBYTE[0x6B00]        //LINE CONTROL REGISTER
#define uc_16c554b_MCR  XBYTE[0x6C00]       //MODEM  CONTEROL REGISTER
#define uc_16c554b_LSR  XBYTE[0x6D00]        //LINE  STATUE REGISTER
#define uc_16c554b_MSR  XBYTE[0x6E00]       //MODEM STATUE REGISTER
#define uc_16c554b_SPR  XBYTE[0x6F00]       //SCRATCHPAD REGISTER

#define uc_16c554b_DLL  XBYTE[0x6800]      //LSB OF DIVISOR LATCH
#define uc_16c554b_DLM XBYTE[0x6900]      //MSB  OF DIVISOR LATCH
		 
//串口3
#define uc_16c554c_RHR  XBYTE[0x5800]         //RECEIVE HOLDING REGISTER
#define uc_16c554c_THR  XBYTE[0x5800]         //TRANSMIT HOLDING REGISTER
#define uc_16c554c_IER   XBYTE[0x5900]        //INTERRUPT  ENABLE REGISTER
#define uc_16c554c_ISR   XBYTE[0x5A00]        //INTERRUPT  STATUE REGISTER
#define uc_16c554c_FCR  XBYTE[0x5A00]        //FIFO CONTROL REGISTER
#define uc_16c554c_LCR  XBYTE[0x5B00]        //LINE CONTROL REGISTER
#define uc_16c554c_MCR  XBYTE[0x5C00]       //MODEM  CONTEROL REGISTER
#define uc_16c554c_LSR  XBYTE[0x5D00]        //LINE  STATUE REGISTER
#define uc_16c554c_MSR  XBYTE[0x5E00]       //MODEM STATUE REGISTER
#define uc_16c554c_SPR  XBYTE[0x5F00]       //SCRATCHPAD REGISTER

#define uc_16c554c_DLL  XBYTE[0x5800]      //LSB OF DIVISOR LATCH
#define uc_16c554c_DLM  XBYTE[0x5900]      //MSB  OF DIVISOR LATCH

//串口4
#define uc_16c554d_RHR  XBYTE[0x3800]         //RECEIVE HOLDING REGISTER
#define uc_16c554d_THR  XBYTE[0x3800]         //TRANSMIT HOLDING REGISTER
#define uc_16c554d_IER   XBYTE[0x3900]        //INTERRUPT  ENABLE REGISTER
#define uc_16c554d_ISR   XBYTE[0x3A00]        //INTERRUPT  STATUE REGISTER
#define uc_16c554d_FCR  XBYTE[0x3A00]        //FIFO CONTROL REGISTER
#define uc_16c554d_LCR  XBYTE[0x3B00]        //LINE CONTROL REGISTER
#define uc_16c554d_MCR  XBYTE[0x3C00]       //MODEM  CONTEROL REGISTER
#define uc_16c554d_LSR  XBYTE[0x3D00]        //LINE  STATUE REGISTER
#define uc_16c554d_MSR  XBYTE[0x3E00]       //MODEM STATUE REGISTER
#define uc_16c554d_SPR  XBYTE[0x3F00]       //SCRATCHPAD REGISTER

#define uc_16c554d_DLL  XBYTE[0x3800]      //LSB OF DIVISOR LATCH
#define uc_16c554d_DLM  XBYTE[0x3900]      //MSB  OF DIVISOR LATCH
	
sbit  RESET =P1^5;



//*******************************************************


sbit  RTS0=P1^0;
sbit  RTS1=P1^1;
sbit  RTS2=P1^2;
sbit  RTS3=P1^3;
sbit  RTS4=P1^4;
sbit  RUN=P1^6;
sbit  INTC=P3^4;
sbit  INTD=P3^5;



unsigned char  bdata uc_554a_isr;
sbit uc_554a_isr_status=uc_554a_isr^0;
unsigned char bdata uc_554b_isr;
sbit uc_554b_isr_status=uc_554b_isr^0;

unsigned char uc_554a_r_buffer[18];
unsigned char uc_554a_r_number=0;
unsigned char uc_554a_r_complete=0;


unsigned char uc_554b_r_buffer[18];
unsigned char uc_554b_r_number=0;
unsigned char uc_554b_r_complete=0;

unsigned char bdata uc_554c_isr;
sbit uc_554c_isr_status=uc_554c_isr^0;
unsigned char bdata uc_554d_isr;
sbit uc_554d_isr_status=uc_554d_isr^0;
unsigned char uc_554c_r_buffer[18];
unsigned char uc_554c_r_number=0;
unsigned char uc_554c_r_complete=0;

unsigned char uc_554d_r_buffer[18];
unsigned char uc_554d_r_number=0;
unsigned char uc_554d_r_complete=0;

unsigned char sy_u_c;

extern unsigned char s_buffer[18];
extern unsigned char i;



void uart_16C554asend(unsigned char s);
void frame_16c554asend(unsigned char t);
void uart_16C554bsend(unsigned char s);
void frame_16c554bsend(unsigned char t);
void uart_16C554csend(unsigned char s);
void frame_16c554csend(unsigned char t);
void uart_16C554dsend(unsigned char s);
void frame_16c554dsend(unsigned char t);

//*******************************************************
   void init_16c554uart(void)
{   
   
   RESET= 1;      //RESET 16C554
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();
   RESET=0;


   uc_16c554a_LCR=0x80;	 //串口1使能波特率设置
  uc_16c554a_DLL=0x30;   //外部晶振为7.3728M 波特率为9600
  uc_16c554a_DLM=0x00;
   uc_16c554a_FCR=0x07;     //FIFO trigger level 为1字节
   uc_16c554a_LCR=0x03;  //8 bit data 1 stop  no parity
   uc_16c554a_IER=0x01;//使能接收和发送中断
   uc_16c554a_MCR=0x08; //使能串口中断
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();
 
  

   uc_16c554b_LCR=0x80;	 //串口2使能波特率设置
   uc_16c554b_DLL=0x30;   //外部晶振为单片机的六分之一波特率为9600
   uc_16c554b_DLM=0x00;
   uc_16c554b_FCR=0x07;
   uc_16c554b_LCR=0x03;  //8 bit data 1 stop  no parity
   uc_16c554b_IER=0x01;//使能接收和发送中断
  uc_16c554b_MCR=0x08; //使能串口中断
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();

   uc_16c554c_LCR=0x80;	 //串口3使能波特率设置
   uc_16c554c_DLL=0x30;   //外部晶振为单片机的六分之一波特率为9600
   uc_16c554c_DLM=0x00;
   uc_16c554c_FCR=0x07;
   uc_16c554c_LCR=0x03;  //8 bit data 1 stop  no parity
   uc_16c554c_IER=0x01;//使能接收
   uc_16c554c_MCR=0x08; //使能串口中断
    _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();


   uc_16c554d_LCR=0x80;	 //串口2使能波特率设置
   uc_16c554d_DLL=0x30;   //外部晶振为单片机的六分之一波特率为9600
   uc_16c554d_DLM=0x00;
   uc_16c554d_FCR=0x07;
   uc_16c554d_LCR=0x03;  //8 bit data 1 stop  no parity
   uc_16c554d_IER=0x01;//使能接收
   uc_16c554d_MCR=0x08; //使能串口中断

 _nop_();_nop_();
   _nop_();_nop_();
   _nop_();_nop_();

 
}


//发送一个字节
void uart_16C554asend(unsigned char s)
 	{   unsigned char temp;
		uc_16c554a_THR=s;
		temp=uc_16c554a_LSR;
		while((temp&0x40)!=0x40)
			{
			temp=uc_16c554a_LSR;
			
			}
		 
	}

//发送一帧数据
void frame_16c554asend(unsigned char t)//发送数据桢
	{    EX0=0;//当RTS 变高时RX1变低16c554认为有数据要接受会产生接受中断,关闭中断
		RTS1=ENABLE;		
		for(i=0;i<t;i++)
			{
				
			   uart_16C554asend(s_buffer[i]);
				
			}
		RTS1=DISABLE;
	   EX0=1;
	}

//发送一个字节
void uart_16C554bsend(unsigned char s)
 	{   unsigned char temp;
		uc_16c554b_THR=s;
		temp=uc_16c554b_LSR;
		while((temp&0x40)!=0x40)
			{
			temp=uc_16c554b_LSR;
			
			}
		 
	}

//发送一帧数据
void frame_16c554bsend(unsigned char t)//发送数据桢
	{    EX1=0;//当RTS 变高时RX1变低16c554认为有数据要接受会产生接受中断,关闭中断
		RTS2=ENABLE;		
		for(i=0;i<t;i++)
			{
				
			   uart_16C554bsend(s_buffer[i]);
				
			}
		RTS2=DISABLE;
	   EX1=1;
	}

//发送一个字节
void uart_16C554csend(unsigned char s)

⌨️ 快捷键说明

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