|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2009-10-27 14:20:40
|
显示全部楼层
#include "RS485.h"
/////////////////////管脚定义及常数定义
sbit uart_txd=P1^0;
sbit uart_rxd=P1^1;
sbit uart_485=P0^7;//确定485通信三个引脚
extern void uart_485_init(void) ; //485初始化函数
#include "RS485.h"
extern unsigned char address,BRG;//定义从机地址以及波特率
void uart_485_init(void) //485初始化函数
{
P1M1&=0xFC;
P1M2&=0xFC;//P1.0 、P1.1设为通用准双向I/O
P0M1&=0x7F;
P0M2&=0x7F;//P0.7 设为通用准双向I/O
// uart_txd=1;
// uart_rxd=1;//停止位为1,即总线空闲时为高电平
uart_485=0;//接口默认状态为允许接收
SSTAT=0x60;//CIDIS=1;RX与TX中断各自独立
SCON=0x50;//设置为模式1 ,使能串口接收
BRGCON=0x00;//写入波特率发生器时,BRGEN一定要等于0
BRGR1=0x04;
BRGR0=0x70;//默认状态为9600;
BRGCON=0x03;//设置波特率CCLK/((BRGR1,BRGR0)+16)
//SADDR=0x01;
//SADEN=0xFF;//装从机地址,//将数据与校准值一起保存在EEPROM中
EA=1;//开总中断
ES=1;//开串口接收中断
//REN=1;
}
void main (void)
{
unsigned char i=0,max,min;
uart_485_init();
IT1=1;
EX1=1; //开外中断
led4dat=tab[1];//**********************LED显示
led0dat=tab[0];
led1dat=tab[0];
led2dat=tab[0];
led3dat=tab[1];
CH452_Write(CH452_SYSON2) ;
CH452_Write(CH452_NO_BCD) ;
CH452_Write(CH452_TWINKLE |0 );
CH452_Write(CH452_DIG4 |led4dat );
CH452_Write(CH452_DIG0 |led0dat );
CH452_Write(CH452_DIG1 |led1dat );
CH452_Write(CH452_DIG2 |led2dat );
CH452_Write(CH452_DIG3 |led3dat ); //**********************LED显示
while(1) ;
}
void rs485_receiver (void) interrupt 4// 串口接收中断
{
rs=SBUF; 接收
led4dat=tab[0];//***************************************
led0dat=tab[0];
led1dat=tab[rs/100];
led2dat=tab[(rs/10)%10];
led3dat=tab[rs%10];
CH452_Write(CH452_SYSON2) ;//这部分是在数码管上显示出来
CH452_Write(CH452_NO_BCD) ;
CH452_Write(CH452_DIG4 |led4dat );
CH452_Write(CH452_DIG0 |led0dat );
CH452_Write(CH452_DIG1 |led1dat );
CH452_Write(CH452_DIG2 |led2dat );
CH452_Write(CH452_DIG3 |led3dat ); //****************************
RI=0 ;//清中断标志
}
void key (void) interrupt 2 //用按键中断(串口发送程序)发送数据到计算机,
{
uart_485=1;//允许发送
SBUF= 0xC4;
TI=0 ;
while(!TI) ;
uart_txd=1;
uart_rxd=1;//停止位为1,即总线空闲时为高电平
uart_485=0;//接口默认状态为允许接收
} |
|