#include <reg52.h> #define SYSCLK 24000000 //11059200 #define BAUDRATE 9600 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long uchar fsbuf[4]; uchar fsjsq; //发送数据计数器 bit fsbz; //发送标志,当为1时,正在发送,当为0时,发送完毕
//***************************** void delay(uint N) //N = 1000 时间为1S { unsigned int i; for(;N>0;N--) { for(i=0;i<124;i++) {;} } }
//串口初始化 0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200 void serial_init(void) { SCON = 0x30; /* mode 0: 8-bit UART, enable receiver */ // TH1=TL1= 0xfa; //定时器1的低字节(重载值),发送用 TL1=0xfa; TH1=0xfa; // TMOD&=0xbf; TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */ TR1 = 1; /* timer 1 run */ ES = 1; fsbz=0; fsjsq=0; }
//***************************** void RS232_ISR (void) interrupt 4 using 1{ if(TI){ TI=0; if(fsbz) { //只有发送标志时,才进行发送 if(fsjsq<5){ SBUF=fsbuf[fsjsq]; fsjsq++; } //如果未发送完5个,则继续发送 else { P1=0xff; delay(100); fsbz=0; //发送完毕后,清发送标志,下次可以发送 fsjsq=0; } //发送完毕后, } //以上为产生发送中断处理 } }
/******************************************************************** 功能:主程序********************************************************* 入口,出口:无******************************************************* *********************************************************************/ void main(void) { EA=0; serial_init(); EA=1; while(1){ fsbuf[0]=0x55; fsbuf[1]=0xaa; fsbuf[2]=0x01; fsbuf[3]=0x02; fsbz=1; fsjsq=0; P1=0x00; delay(100); SBUF=fsbuf[fsjsq]; delay(100); } }//--------------------------------main function
以上为我的程序,我用的MCU是W78E52,串口发送数据到MAX485上,再通过波士的232-485转换器跟电脑相连,在电脑上用串口调试工具来查看收到的数据。 其中我在P1.7口上接了一个发光二极管来验证程序的正常运行,结果是:二极管能够正常工作,但是从串口工具上收不到所发的数据。 大家帮忙看看啊!问题是在哪? |