我想通过使用AT89C52控制两个MAX197将14路模拟信号转换数字信号,然后通过MAX232串口通信送到计算机里,但是我通过串口大师调试时得不到信号,我觉得有可能是我的程序有问题或者我的AT89C52的外围电路没有设计好,请大侠们帮我看看,谢谢,以下是它的程序: #include <intrins.h> #include <reg51.h> sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit P0_4=P0^4; sbit P0_5=P0^5; sbit P0_6=P0^6; sbit P0_7=P0^7; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7; sbit P3_0=P3^0; sbit P3_1=P3^1; sbit P3_2=P3^2; sbit P3_3=P3^3; sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; sbit P3_7=P3^7;
#define A0 P1_0 #define A1 P1_1 #define A2 P1_2 #define BIP P1_3 #define RNG P1_4 #define ACQMOD P1_5 #define PD0 P1_6 #define PD1 P1_7
#define CS1 P2_5 #define CS2 P2_6 #define HBEN P2_7 #define RXD P3_0 #define TXD P3_1 #define INT P3_2 #define WR P3_6 #define RD P3_7
unsigned char Chh[8],Chl[8]; int i; /*系统初始化*/ void SystemInit(void) { TCON=0x05;//外部中断下降沿触发 TMOD=0x21;//Timer1方式2,Timer0方式1 TH1=0xFD;//波特率19200 TR1=1; SCON=0x50;//串行通讯方式1,允许接收 PCON=0x80;//SMOD=1 }
/*AD转换*/ void StarAd(void) { for(i=0;i<8;i++) { WR=0; P1=0x48+i;//初始化,内部时钟模式,内部控制采集,输入范围+-5V,通道1 WR=1;
do{} while (INT==1);
{ RD=0; P1=0xFF; HBEN=0; Chl=P1; P1=0xFF; HBEN=1; Chh=P1; RD=1; } do{} while (INT==0); } } /*串口发送*/ /**********发送一帧数据*********/ void SerialSendBytes(void) { unsigned char j; for(j=0;j<8;j++) { TI=0; SBUF=Chl[j]; do {}while(TI==0);//等待TI为1后才开始下个数据的传送 TI=0; SBUF=Chh[j]; do {}while(TI==0);//等待TI为1后才开始下个数据的传送 } TI=0; }
void Main(void) { unsigned char ByteR; SystemInit(); //unsigned char Chh[8],Chl[8]; while(1) { CS1=0; CS2=1; if (RI) { RI=0; ByteR=SBUF; if(ByteR==0xFF) { StarAd(); SerialSendBytes(); RI=0; } } CS1=1; CS2=0; if (RI) { RI=0; ByteR=SBUF; if(ByteR==0xFF) { StarAd(); SerialSendBytes(); RI=0; } } } } |