xuyaqi 发表于 2019-4-18 21:49 后来用一个字符串的也不行哈哈 |
wulin 发表于 2019-4-18 22:23 好的,我试试。 |
|
改这样试试 #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; //sbit LED=P2^0; sbit key=P2^0; u8 dat; u8 table[]="haha"; void delay(u16 i) { while(i--); } void UstartInit() //波特率4800 晶振12MHz { PCON= 0x80; //使能波特率倍速位SMOD SCON= 0x50; //8位数据,可变波特率 TMOD= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xF3; //设定定时初值 TH1 = 0xF3; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 ES=1; EA=1; } void SendOneByte(u8 c) { SBUF = c; //发送数据 while(!TI); //等待发送完成 TI = 0; //发送中断请求标志位清0 } void main() { u8 i; UstartInit(); while(1) { if(key==0) { delay(1000); if(key==0) { while(!key); EA=0; for(i=0;i<4;i++) SendOneByte(table[i]); EA=1; } // SBUF = "haha"; // while(!TI); // TI=0; } } } void Ustart() interrupt 4 { u8 receiveData; RI=0; receiveData=SBUF; SBUF=receiveData; while(!TI); TI=0; } |
| SBUF里只能放一个字符,不能放字符串的。 |
| 我用串口助手HEX显的话,全是零,但是接受数是增加的,这是为什么呢,是我初始参数设置错了吗? |
|
#include "reg52.h" typedef unsigned int uint; typedef unsigned char uchar; uchar zifuchuan[]="6544 "; void delay(unsigned char i) { unsigned char j,k; for(j=i;j>0;j--) { for(k=90;k>0;k--); } } void ustartinit() { SCON=0X50; //???????1 TMOD=0X20; //?????????2 PCON=0X80; //????? TH1=0XF3; //????????,??????4800? TL1=0XF3; ES=1; //?????? EA=1; //????? TR1=1; //????? } void send(uchar d) { SBUF=d; TI=1; while(!TI); TI=0; } void sendc(uchar *pd) { while((*pd)!='\0') { send(*pd); pd++; } } void main() { ustartinit(); while(1) { sendc(zifuchuan); } } void uart(void) interrupt 4 { uchar receiveData; receiveData=SBUF;//???????? RI = 0;//????????? SBUF=receiveData;//??????????????? while(!TI); //???????? TI=0; } |
|
#include "reg52.h" typedef unsigned int uint; typedef unsigned char uchar; uchar zifuchuan[]="6544 "; void delay(unsigned char i) { unsigned char j,k; for(j=i;j>0;j--) { for(k=90;k>0;k--); } } void ustartinit() { SCON=0X50; //???????1 TMOD=0X20; //?????????2 PCON=0X80; //????? TH1=0XF3; //????????,??????4800? TL1=0XF3; ES=1; //?????? EA=1; //????? TR1=1; //????? } void send(uchar d) { SBUF=d; TI=1; while(!TI); TI=0; } void sendc(uchar *pd) { while((*pd)!='\0') { send(*pd); pd++; } } void main() { ustartinit(); while(1) { sendc(zifuchuan); } } void uart(void) interrupt 4 { uchar receiveData; receiveData=SBUF;//???????? RI = 0;//????????? SBUF=receiveData;//??????????????? while(!TI); //???????? TI=0; } 这个程序也不行,在HEX显示的时候接收端全是零,但是为什么什么都不显示呢,这是为什么呢,hex显示就表示我这个数据实际没写进去吧,这该怎么办呢,问题出在哪里呢,是我初始参数设置错误了吗,还是怎么回事? |
|
#include "reg52.h" typedef unsigned int uint; typedef unsigned char uchar; uchar zifuchuan[]="6544 "; void delay(unsigned char i) { unsigned char j,k; for(j=i;j>0;j--) { for(k=90;k>0;k--); } } void ustartinit() { SCON=0X50; //???????1 TMOD=0X20; //?????????2 PCON=0X80; //????? TH1=0XF3; //????????,??????4800? TL1=0XF3; ES=1; //?????? EA=1; //????? TR1=1; //????? } void send(uchar d) { SBUF=d; TI=1; while(!TI); TI=0; } void sendc(uchar *pd) { while((*pd)!='\0') { send(*pd); pd++; } } void main() { ustartinit(); while(1) { sendc(zifuchuan); } } void uart(void) interrupt 4 { uchar receiveData; receiveData=SBUF;//???????? RI = 0;//????????? SBUF=receiveData;//??????????????? while(!TI); //???????? TI=0; } |
| 这里HEX显示全是零,也就是都未送进去?到底是为什么呢,希望大神能够说一下,小白实在是没办法。 |