?? rs232.c
字號:
#include <at89x52.H> // SFR definition header file
#include <stdio.h> // prototype declarations for I/O functions
#include "SystemEvent.h"
#include "UART.h"
#include <intrins.h>
#include "ExtVar.h"
#include "function.h"
#include "RTOS.h"
/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_ 0x01
#define STOP_ 0x02
#define PD_ 0x02 /* Alternate definition */
#define GF0_ 0x04
#define GF1_ 0x08
#define SMOD_ 0x80
void InitSERIALPort(void){
ET1 = 0;
TI=0;
_Sync=0;
_LghOfCommand=0;
// SCON : SM0 | SM1 | SM2 | REN |TB8 | RB8 | TI | RI
PCON|=SMOD_;
SCON&=0xf0;
SCON=0x51; //01010000B
TMOD&=0x0f;
TMOD|=0x20; // MOV TMOD,#00100000B
TH1=0xfd; // MOV TH1,#FDH
TCON&=0x3f;
TCON|=0xc0; // MOV TCON,#01000000B
ES=1;
EA = 1; // global interrupt enable
// SBUF=0x55;
}
void StartTriI2C(void){
TI=0;
SBUF=*(_PtrI2c+_IndxOfI2C);
_IndxOfI2C++;
}
void LatchI2CHandler(unsigned char _LengthX,unsigned char _SyncX){
_IndxOfI2C=0;
_AdrxOfI2C=_AdrX;
_LengthOfI2C=_LengthX ;
_Sync=_SyncX;
}
void CheckBreak(unsigned char _SyncX){
if(_Indx>=(_Length-1)){
_Sync=_SyncX; _LghOfCommand=0;
}
_Indx++;
}
void SerialPort (void) interrupt 4 using 3 {
unsigned char _ix;
_Busy=1;
switch(_Sync){
case _REC_COMMAND:
RI=0;
_CommandBufX[_LghOfCommand]=SBUF;
if((_LghOfCommand==0)) {
if((_CommandBufX[_LghOfCommand]&0xf0)==0xc0)
_LghOfCommand++;
}
else {
if(_LghOfCommand==3){
P2^=0x80; // os_send_signal (_HDMIFuncX);
_AdrX=(unsigned int)_CommandBufX[_ADDRH];
_AdrX<<=8;
_AdrX+=(unsigned int)_CommandBufX[_ADDRL];
_CommandBufX[_LENGTH]-=3;
_Length=(unsigned int)_CommandBufX[_LENGTH]&0x00ff;
_Indx=0;
switch(_CommandBufX[_COMMAND]){
case _RDI2C:
LatchI2CHandler(_Length,_TRI_ECHO_I2C_TO_HOST);
_FuncX|=_ReadI2CMode;
// isr_send_signal(_Init);
break;
case _WRI2C:
LatchI2CHandler(_Length,_REC_I2C_DATA_FROM_HOST);
break;
case _CommandFromHostX:
LatchI2CHandler(_Length,_REC_CommandX_FROM_HOST);
break;
}
}
_LghOfCommand++;
}
break;
case _REC_CommandX_FROM_HOST:
*(_PtrI2c+_IndxOfI2C)=SBUF;
RI=0;
_IndxOfI2C++;
if((_IndxOfI2C>=0x08)||(_Indx>=(_Length-1))){
for(_ix=0;_ix<8;_ix++){
*(_WPtrI2c+_ix)=*(_PtrI2c+_ix);
}
_IndxOfI2C=0;
_FuncX|=_CommandX;
// isr_send_signal(_Init);
}
CheckBreak(_REC_COMMAND);
break;
case _REC_I2C_DATA_FROM_HOST:
*(_WPtrI2c+_IndxOfI2C)=SBUF;
RI=0;
_IndxOfI2C++;
if((_IndxOfI2C>=_Length)||(_Indx>=(_Length-1))){
_IndxOfI2C=0;
_FuncX|=_WriteI2CMode;
// isr_send_signal(_Init);
}
CheckBreak(_REC_COMMAND);
break;
case _TRI_ECHO_I2C_TO_HOST:
TI=0;
if(_IndxOfI2C<_LengthOfI2C){
SBUF=*(_PtrI2c+_IndxOfI2C);
_IndxOfI2C++;
}
else {
_IndxOfI2C=0;
_Busy=0;
}
CheckBreak(_TRI_OVER);
break;
case _TRI_OVER:
TI=0;
_Sync=_REC_COMMAND;
break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -