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

📄 mycommio.c

📁 这是符合国家一级汉字标准的汉字显示液晶模块程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*    
**ASIM00 - Asynchronous Serial Interface Mode register                                                  
**
**TXE00 RXE00 X X X X 0 0                                                  
**  |     |   | | | |_ASIM00.2: Transmit data stop bit length specification	
**  |     |   | | |             0: 1 bit; 1: 2 bits                          
**  |     |   | | |                                                          
**  |     |   | | |___ASIM00.3: Character length specification    	                   
**  |     |   | |               0: 7 bits; 1: 8 bits                                   
**  |     |   | |                                                            
**  |     |   |_|_____ASIM00.4, ASIM00.5: Parity bit specification                             	
**  |     |           00: No parity;                                         
**  |     |           01: Always add 0 parity at transmission                
**  |     |               Parity check is not performed at reception       	
**  |     |               (No parity error is generated).                    
**  |     |           10: Odd parity                                         
**  |     |           11: Even parity                                        
**  |     |                                                                  
**  |     |___________ASIM00.6: Receive operation control                              
**  |                 0: Receive operation disabled                          
**  |                 1: Receive operation enabled                           
**  |                                                                        
**  |_________________ASIM00.7: Transmit operation control                             
**                    0: Transmit operation disabled                         
**                    1: Transmit operation enabled                          
*/

//ASIM00 = 0b11111000   //Transmit Receive operation all eabled.  
                       //Even parity, 8bit data, 1 stop bit
 
 
/*                                                                             
**ASIS00 - Asynchronous serial interface status register                         
**                                                                             
**0 0 0 0 0 X X X                                                      
**          | | |_ASIS00.0: Overrun error flag	   
**          | |   0: Overrun error not generated                             
**          | |   1: bitsOverrun error generated                                                          
**          | |      	                                                                        
**          | |___ASIS00.1: Flaming error flag             
**          |     0: Flaming error not generated                                           
**          |     1: Flaming error generated                                                            
**          |                                                                  
**          |_____ASIS00.2: Parity error flag                      
**                0: Parity error not generated                            
**                1: Parity error generated                                                                                                                                  
*/                                                                             


/*                                                                             
**BRGC00 - Baud rate generator control register                         
**                                                                             
**X X X X 0 0 0 0                                                        
**| | | |          
**|_|_|_|__3-bit counter source clock selection (fx = 5MHz)                                   
**         0000-------------- fx/2 (do not select n = 1 if fx = 5MHz)                                                      
**         0001-------------- fx/4      76800 bps                                    
**         0010-------------- fx/8      38400 bps
**         0011-------------- fx/16     19200 bps                                  
**         0100-------------- fx/32     9600  bps                                           
**         0101-------------- fx/64     4800  bps                     
**         0110-------------- fx/128    2400  bps          
**         0111-------------- fx/256  	1200  bps                       
**         1000-------------- Input clock to ASCK pin from external
**         other settings---- Not to be set                                                                                                                            
*/      

//BRGC00 = 0b01110000		//1200 baud rate

/*
//???
INTSR00 ---- a reception completion interrupt.
INTST00 ---- a transmission completion interrupt.
SRMK00  ---- Interrupt Mask Flag for reception interrupt.
STMK00  ---- Interrupt Mask Flag for transmission interrupt.
TXS00   ---- Transmit shift register:This register is used to specify data
             to be transmitted. Data written to TXS is transmitted as 
             serial data.
RXB00   ---- Receive buffer register:This register is used to hold 
             received data. Each time one byte of data is received, a new 
             byte of data is transferred from the receive shift register 
             (RXS).
*/ 

#pragma		SFR		//special function register
#pragma 	NOP	
#pragma		DI	       
#pragma		EI

//Interrupt serve function name Inter_TM0.	
#pragma		interrupt INTTM00 Inter_TM0

#pragma		interrupt INTST00 Inter_ST

#pragma		interrupt INTSR00 Inter_SR

#include "MyDefine.h"
#include "MyCommIO.h"  

#define	 MAX232_ENABLE  P2.0 

extern Uchar* ChinCharStr;	//2003-10-30 15:10

extern bit g_btReceptionEnd;
extern bit g_btTransmitStart;
//SERIAL_BUF_TRANSMIT and SERIAL_BUF_RECEPTION are defined in the file
//"MyDefine.h".
Uchar g_bufTransmit[SERIAL_BUF_TRANSMIT];		//Transmit buffer   

Uchar g_bufReception[SERIAL_BUF_RECEPTION];		//RECEPTION buffer

Uchar hanZiByteAmount;	//2003-10-30 15:10

sreg Uchar g_byteLength;
sreg Uchar g_controlCode;
sreg Uchar g_deviceAddr;

sreg Uchar s_g_transRec500msCnt;

sreg Uchar g_custom0;
sreg Uchar g_custom1;
sreg Uchar g_custom2;

sreg Uchar g_dataFormat;

sreg Uchar g_keyValue;



bit g_btCrcCheckOk;

bit g_btWait20ms;

bit btReception500msOn;


//sreg Uchar *g_p_bufTransmit = g_bufTransmit;

//sreg Uchar *g_p_bufReception = g_bufReception;

sreg Uchar *g_p_bufTransmit;

sreg Uchar *g_p_bufReception;


//The buffer for transmission is cleared.
void ClearTransmitBuf(); 

//The buffer for reception is cleared.
void ClearReceptionBuf();

Uchar ByteLengthSelection(Uchar);

Uchar CheckSumTransmit(Uchar);

void CommReceptionEnabled();

Uchar ErrorRceptionCheck();



 


/*    
** Function name: InitializeCom                                                  
**
* Description:
**	       The function is mainly to initialize the relevant registers.
**
** Input parameters:
**	            no
**
* * Output parameters:
**	             no
**
** Return value:
**	        no		
*/
void InitializeCom()
{	
	CSIM00 = 0;							//Use UART mode
	
	MAX232_ENABLE = 0;
	
	ASIM00 = 0b01111000;     
	                                        
	BRGC00 = 0x70; 					//1200 baud rate
	
	//SRMK00 = 1;   		      //UART recetive enabled 
	//CommReceptionEnabled();
	SRMK00 = 0;  //Interrupt Mask Flag for reception interrupt disabled.
	
	STMK00 = 1;  //Enable Interrupt Mask Flag for reception interrupt.
	
	P2.1 = 1;		//COMM transmission is set to 1.
	
	//TM0 used in Reception process.	
	CR00 = 0x12;	          //Resolution -- 102.4us  2003-9-11 11:19
	
	TMC00 =	0x82;	          //8bitTimer0 is set to 2ms and enabled.
	
	TMIF00 = 0;							//clear Interrupt Request Flag 
	
	TMMK00 = 0; 						//INTTM0 interrupt enabled
	
	
	
	g_p_bufTransmit = g_bufTransmit;  	                                  
	g_p_bufReception = g_bufReception; 
	
	
	g_btWait20ms = 0;
		
	s_g_transRec500msCnt = 0;
	
	btReception500msOn = 0;
						
	g_btReceptionEnd = 0;
	g_btTransmitStart = 0; 
	
	//The buffer for transmission is cleared.
	ClearTransmitBuf(); 
	
  //The buffer for reception is cleared.
  ClearReceptionBuf();              
}



/*    
** Function name: SetDataTransmitBuffer                                                  
**
* Description:
**         The function is to push the data to be transmitted into 
**         transmission buffer array, i.e. g_bufTransmit[].                                                
**
** Input parameters:
**	            control code

**
* * Output parameters:
**	             no
**
** Return value:
**	        no		
*/
void SetDataTransmitBuffer(Uchar ctlCode)
{		
	//s_p_bufTransmit is initialized to point to the array of g_bufTransmit. 
	Uchar *p_bufTransmit = g_bufTransmit;
	
	//2003-10-30 15:11
	Uchar *p = g_bufTransmit;	//Temporary pointer p is used to save the 
														//pointer g_bufTransmit that points to ctlCode.
	
	ClearTransmitBuf();
	
	//sreg Uchar s_pushByteLength = g_byteLength + 4;	
	*p_bufTransmit++ = STX;
	
	*p_bufTransmit++ = ctlCode;
	
	//2003-10-30 15:11
	p = p_bufTransmit;
	
	*p_bufTransmit++ = ByteLengthSelection(ctlCode);
	
	*p_bufTransmit++ = DEVICE_ADDR;

	switch(ctlCode)
	{
		case 4:									//HSR7217 -> main CPU key value																		
						*p_bufTransmit++ = g_keyValue;
						
						*p_bufTransmit = CheckSumTransmit(ctlCode);
						
						break;
						
		//..still have more....
		
		
		case 8:
						while((*ChinCharStr) != '0')
						{
							*p_bufTransmit++ = *ChinCharStr++;
							
							++hanZiByteAmount;
						}
						
						*p = ByteLengthSelection(ctlCode);
						
					 	*p_bufTransmit = CheckSumTransmit(ctlCode);
					 	
					 	break;
		
						
		default:
						
						break;						
	}
	
	
  /*	
	if(s_pushByteLength-- > 0)
	{
		*s_p_bufTransmit++ = transmitData;
	}	
	else
	{
		s_pushByteLength = g_byteLength + 4;
		
		s_p_bufTransmit = g_bufTransmit;
	}
	*/		
}


/*    
** Function name: Inter_ST                                                  
**
* Description:
**         The function is ISR - Interrupt Service Routine of transmission 
**         completion interrupt.                                               
**
** Input parameters:
**	            no
**
* * Output parameters:
**	             no
**
** Return value:
**	        no		
*/
void Inter_ST()
{
	static sreg Uchar s_transmitCnt = 0;
		
	//Note:firstly delay for 26.2ms every time and add "RUN = 1" in this 
	//     delay procedure in order to clear WDT.
	#asm
	
	           PUSH BC
                
             mov B, #16                 ;1.2us
     ?LINTST1:
     
             mov C, #0             
             set1 run
             
     ?LINTST2: 
             NOP                    ;0.4us(5MHZ)
             NOP                     ;0.4us
             dbnz c,$?LINTST2          ;1.2us
             dbnz b,$?LINTST1          ;1.2us  
             
             POP BC             
  #endasm       
                
	STIF00 = 0;
	
	s_transmitCnt++;
	
	//g_btTransmitStart = 0; //No use?Set g_btTransmitStart to 1 transmiting   
												   //data in main procedure.!!!!!!
	
	//An end code is added following the check code.											 
	if(s_transmitCnt>(ByteLengthSelection(g_controlCode)+5))
	{
		g_btTransmitStart = 0;
		
		CommReceptionEnabled();			//Is it redundant?
		
		s_transmitCnt = 0;
		
		//The pointer,i.e. g_p_bufTransmit, points to the first address of
		//g_bufTransmit. 						 
		g_p_bufTransmit = g_bufTransmit; 		
	}
	else
	{
		//The value to be sent is assigned to TXS00. 
		TXS00 = *g_p_bufTransmit++;			    
	}
	
	
//	#asm	
//           POP BC                                           
//  #endasm    			                                          		   	                   	
}


/*    
** Function name: GetDataFromReception                                                  
**
* Description:
**         The function is to judge control code and process the data  
**         received, and is invocated by MyCommMain.c.                                               
**Operation:
**			1. finish CRC of data received;	
**      2. gain data received;  
**      3. carry out different procedure according to different control 

⌨️ 快捷键说明

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