xzong10 xzong10
关注数: 5 粉丝数: 120 发帖数: 49 关注贴吧数: 19
做个单片机通信程序,串口和采集定时器冲突,请大家帮忙? 程序运行采集数据不正常,串口不发送数据。 #include<reg52.h> unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char dispbuf[4]; unsigned int i; unsigned int j; unsigned char getdata; unsigned int temp; unsigned int temp1; unsigned char count; unsigned char d; sbit ST=P2^6; sbit OE=P2^7; sbit EOC=P3^2; sbit CLK=P3^3; sbit P34=P3^4; sbit P35=P3^5; sbit P36=P3^6; sbit P20=P2^0; sbit P21=P2^1; sbit P22=P2^2; sbit P23=P2^3; sbit P17=P1^7; void TimeInitial(); void Delay(unsigned int i); void init_ser(); void str(void); void TimeInitial() { TMOD=0x10; TH1=(65536-200)/256; TL1=(65536-200)%256; EA=1; ET1=1; TR1=1; } void Delay(unsigned int i) { unsigned int j; for(;i>0;i--) { for(j=0;j<125;j++) {;} } } void Display() { P1=dispbitcode[dispbuf[3]]; P20=0; P21=1; P22=1; P23=1; Delay(10); P1=0x00; P1=dispbitcode[dispbuf[2]]; P17=1; P20=1; P21=0; P22=1; P23=1; Delay(10); P1=0x00; P1=dispbitcode[dispbuf[1]]; P20=1; P21=1; P22=0; P23=1; Delay(10); P1=0x00; P1=dispbitcode[dispbuf[0]]; P20=1; P21=1; P22=1; P23=0; Delay(10); P1=0x00; } void main() { TimeInitial(); while(1) { ST=0; OE=0; ST=1; ST=0; P34=0; P35=0; P36=0; while(EOC==0); OE=1; getdata=P0; OE=0; temp=getdata*1.0/255*500; dispbuf[0]=temp%10; dispbuf[1]=temp/10%10; dispbuf[2]=temp/100%10; dispbuf[3]=temp/1000; Display(); init_ser(); str(); } } void t1(void) interrupt 3 using 0 { TH1=(65536-200)/256; TL1=(65536-200)%256; CLK=~CLK; } void init_ser(void) { SCON=0x50;//串口工作模式1,8位数据 TMOD=0x20;//定时器1模式2,8位自动重装 PCON=0x80; TH1=0xFD;//波特率为19200,晶振为11.0592 IE=0x90;//允许串口中断 TR1=1;//启动定时器1 TI=1; } void str(void) { SBUF=0xFA;//标志位 while(TI==0); TI=0; SBUF=dispbuf[3]; while(TI==0); TI=0; SBUF=dispbuf[2]; while(TI==0); TI=0; SBUF=dispbuf[1]; while(TI==0); TI=0; SBUF=dispbuf[0]; while(TI==0); TI=0; SBUF=0xFB;//标志位 while(TI==0); TI=0; }
vb怎样接收单片机发送的数据 刚学vb,有一个单片机程序,请高手帮忙! #include <stc12c2052ad.h> #define uchar unsigned char #define uint unsigned int //sbit dis=P1^7;//用于串口发送及工作状态指示 uchar i,Temp_dat=8; uchar shuju[8]; void delay(uint x) { uint a,b; for(a=0;a<200;a++) for(b=x;b>0;b--); } uchar get_AD_result(uchar channel) { uchar AD_finished = 0; // 存储 A/D 转换标志 ADC_DATA = 0; ADC_CONTR = channel; // 选择 A/D 当前通道? //使输入电压达到稳定 ADC_CONTR |= 0x88; //1000,1000 令 ADC_START = 1, 启动A/D 转换 delay(1); AD_finished = 0; while ( AD_finished == 0 ) // 等待A/D 转换结束 { AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否 } ADC_CONTR &=0x80; //10000000 令 ADC_START = 0, 关闭A/D 转换 return (ADC_DATA); // 返回 A/D 转换结果 } void inint_ser()//初始化串口,波特率19200 { TMOD=0x20; TH1=0xfd; TL1=0xfd; REN=1; TR1=1; ES=1; EA=1; SM0=0; SM1=1; PCON=0X80; } void send_data(uchar x) { ES=0; SBUF=shuju[x]; delay(20); while(!TI); TI=0; ES=1; Temp_dat=8; } void main() { inint_ser(); P1M0=0XFF; P1M1=0xFF; P1=0XFF; while(1) { switch(Temp_dat) { case 0:shuju[0]=get_AD_result(0);send_data(0);break; case 1:shuju[1]=get_AD_result(1);send_data(1);break; case 2:shuju[2]=get_AD_result(2);send_data(2);break; case 3:shuju[3]=get_AD_result(3);send_data(3);break; case 4:shuju[4]=get_AD_result(4);send_data(4);break; case 5:shuju[5]=get_AD_result(5);send_data(5);break; case 6:shuju[6]=get_AD_result(6);send_data(6);break; case 7:shuju[7]=get_AD_result(7);send_data(7);break; } } } void serial() interrupt 4 { RI=0; Temp_dat=SBUF; }
vb怎么接收单片机发的数据 我是刚学vb,我有一个单片机程序,不知道怎么用vb怎么接收单片机数据,请那位高手帮忙! #include <stc12c2052ad.h> #define uchar unsigned char #define uint unsigned int //sbit dis=P1^7;//用于串口发送及工作状态指示 uchar i,Temp_dat=8; uchar shuju[8]; void delay(uint x) { uint a,b; for(a=0;a<200;a++) for(b=x;b>0;b--); } uchar get_AD_result(uchar channel) { uchar AD_finished = 0; // 存储 A/D 转换标志 ADC_DATA = 0; ADC_CONTR = channel; // 选择 A/D 当前通道? //使输入电压达到稳定 ADC_CONTR |= 0x88; //1000,1000 令 ADC_START = 1, 启动A/D 转换 delay(1); AD_finished = 0; while ( AD_finished == 0 ) // 等待A/D 转换结束 { AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否 } ADC_CONTR &=0x80; //10000000 令 ADC_START = 0, 关闭A/D 转换 return (ADC_DATA); // 返回 A/D 转换结果 } void inint_ser()//初始化串口,波特率19200 { TMOD=0x20; TH1=0xfd; TL1=0xfd; REN=1; TR1=1; ES=1; EA=1; SM0=0; SM1=1; PCON=0X80; } void send_data(uchar x) { ES=0; SBUF=shuju[x]; delay(20); while(!TI); TI=0; ES=1; Temp_dat=8; } void main() { inint_ser(); P1M0=0XFF; P1M1=0xFF; P1=0XFF; while(1) { switch(Temp_dat) { case 0:shuju[0]=get_AD_result(0);send_data(0);break; case 1:shuju[1]=get_AD_result(1);send_data(1);break; case 2:shuju[2]=get_AD_result(2);send_data(2);break; case 3:shuju[3]=get_AD_result(3);send_data(3);break; case 4:shuju[4]=get_AD_result(4);send_data(4);break; case 5:shuju[5]=get_AD_result(5);send_data(5);break; case 6:shuju[6]=get_AD_result(6);send_data(6);break; case 7:shuju[7]=get_AD_result(7);send_data(7);break; } } }
1 下一页