单片机源程序如下:
#include
sbit bitCtrl_485Eable = P1^3;//
sbit bitCtrl_485_2Eable = P7^3;//
xdata unsigned char mod_comd[9]={0x01,0x04,0x75,0x31,0x02,0x00,0x00,0x08,0x09};
unsigned char freq = 0;
/****************************************************************************************/
// unsigned char MyDeviceAddr _at_ 0x06000;
// unsigned char PODeviceAddr _at_ 0x05999;
unsigned char MyDeviceAddr;
unsigned char PODeviceAddr;
/*********************************
串口1变量定义
**********************************/
bit busy1 = 0;
xdata unsigned char u8Uart1TxBuffer[USART1_TX_BUFFER_SIZE];
xdata unsigned char u8Uart1RxBuffer[USART1_RX_BUFFER_SIZE];
unsigned char u8Rx1Head = 0;
unsigned char u8Rx1Tail = 0;
unsigned char u8Tx1Head = 0;
unsigned char u8Tx1Tail = 0;
unsigned char mdbs1_stat = 0;
unsigned char mdbs1_len = 0;
unsigned char mdbs1_cnt = 0;
unsigned char mdbs1_maxlen = 0;
xdata unsigned char mdbs1_Rxbuf[16];
xdata unsigned char mdbs1_Txbuf[16];
unsigned char mdbs1_pos = 0;
unsigned char mdbs1_timerflag = 0;
unsigned char mdbs1_overtime = 0;
unsigned char mdbs1_data_len = 0;
/****************************************************************************************/
/****************************************************************************************/
/*********************************
串口2变量定义
**********************************/
bit busy2 = 0;
xdata unsigned char u8Uart2TxBuffer[USART2_TX_BUFFER_SIZE];
xdata unsigned char u8Uart2RxBuffer[USART2_RX_BUFFER_SIZE];
unsigned char u8Rx2Head = 0;
unsigned char u8Rx2Tail = 0;
unsigned char u8Tx2Head = 0;
unsigned char u8Tx2Tail = 0;
unsigned char mdbs2_stat = 0;
unsigned char mdbs2_len = 0;
unsigned char mdbs2_cnt = 0;
unsigned char mdbs2_maxlen = 0;
xdata unsigned char mdbs2_Rxbuf[16];
xdata unsigned char mdbs2_Txbuf[16];
unsigned char mdbs2_pos = 0;
unsigned char mdbs2_timerflag = 0;
unsigned char mdbs2_overtime = 0;
unsigned char mdbs2_data_len = 0;
/****************************************************************************************/
/*定时器0初始化,采用16位自动重装技术模式*/
void Timer0Init(void) //10毫秒@11.0592MHz //16位重装计数器
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = -(FOSC/12/100); //设置定时初值
TH0 = -(FOSC/12/100) >> 8; //设置定时初值
// RL_TH0
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
Timer0_InterruptFirst();
ET0 = 1; //enable timer0 interrupt
}
/***定时器0中断服务函数**/
void tm0_isr() interrupt 1 using 1
{
TF0 = 0; //清除TF0标志
TL0 = -(FOSC/12/100); //设置定时初值
TH0 = -(FOSC/12/100) >> 8; //设置定时初值
++freq;
}
/************************************************************************/
//8位数据 波特率可变 无奇偶检验位 1位起始位 1位停止位
//使用定时器1作为波特率发生器
void Uart1Init(void) //9600bps@11.0592MHz
{
PCON &= 0x3F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T 传统51速度
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
// AUXR |=0X01; //串口1选择定时器2为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
// TMOD &= 0xF0; //清除定时器2模式位
// TMOD |= 0x02; //设定定时器2为8位自动重装方式
TL1 = -(FOSC/12/32/BAUD); //设定定时初值
TH1 = -(FOSC/12/32/BAUD); //设定定时器重装值
/*****
定时器2工作方式为固定16位自动重装载 装在值需重新计算
*/
// T2L = -(FOSC/12/32/BAUD); //设定定时初值
// T2H = -(FOSC/12/32/BAUD); //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
// S1_USE_P36P37(); //定义串口1管脚
UART1_InterruptFirst(); //中断优先级设定
ES = 1; //????????
bitCtrl_485Eable=0;
}
/****************** *****************************************************/
/*************串口2初始化************/
/************************************************************************/
//#define S3_Int_en() IE2 |= 8
void Uart2Init(void) //10毫秒@11.0592MHz
{
/*
T2MOD = 0; //初始化模式寄存器
T2CON = 0; //初始化控制寄存器
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』