新手求助,51串口每秒发送数据。

2019-03-24 19:59发布

使用delay函数能串口能接收到字符串。但是,中断就悲剧了想来很久,还是不知道原因在哪里。求解。。。





#include <reg51.h>typedef unsigned char uint8;typedef unsigned int uint16;
uint16 cnt=0;
uint8 Buf[]="hello world! ";
void delay(uint16 ms){ uint8 i; while(ms--) { for(i=0;i<120;i++); }

}
void UART_init(void){
ES=1; EA=1;
SCON=0x50; TMOD=0x20;// TMOD=0x21; PCON=0x00;   
// TH0=0xD8; //设置定时器0// TL0=0xF0;

TH1=0xFA; //设置波特率 TL1=0xFA;
// TR0=1; TR1=1;
// ET0=1; ET1=0;}
void UART_send_byte(uint8 dat){ SBUF=dat; while(TI==0); TI=0;}
void UART_send_string(uint8 *buf){ while(*buf!='') { UART_send_byte(*buf++); }}
main(){ UART_init(); while(1) { UART_send_string(Buf); delay(1000); }// while(1);}/*void timeint() interrupt 1{
cnt++; TH0=0xD8; TL0=0xF0; if(cnt==200) { UART_send_string(Buf); cnt=0; }

} */ 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
she1987
1楼-- · 2019-03-27 15:11

原帖由 xu__changhua 于 2011-5-12 21:44 发表   再看最后一个程序说说你对功能的要求

我是想把从PC机里接到的数据存储到93C46中,同时又想检测一下单片机中接收的数据是否正确,所以就把单片机接收到的数据发送到PC机中。我是把93C46的写入函数放在ES=0的下边,加上去之后从单片机中返回的数据丢失了。93C46读写程序与串口通信程序各自运行都没有问题。我觉得应该是串口通信程序有缺陷,因为我加入别的函数比如delay(50)也会出现同样的问题,但问题的根本原因我还没有找到。

一周热门 更多>