[讨论] 关于51实验板

herot   2007-10-15 11:21 楼主
我的板子是在枫雪处购得的成品板。 小弟是菜鸟 今日照教材上的写了一段代码 下载到板子上没有反应。 想请教一下是怎么回事 代码很简单 #include<at89X51.h> #include<stdio.h> void main(void) { SCON=0x50; TMOD=0x20; TCON=0x40; TH1=0xE8; Tl1=0xE8; TI=1; TR1=1; while(1) { printf("Hello World!\n"); } } 编译正常。但是在串口收到不字符。

回复评论 (7)

回复: 关于51实验板

我不知道单片机的串口可以这样发送数据的啊??我用的是土方法,设置波特率,送数据到缓存区,然后触发发送。给个例你看看,你可以用串口助手看的 #include <REG51.H> #include <STRING.H> char *title="Hello World!"; #define uchar unsigned char #define uint unsigned int delay(uint t); init_rs232(void); tx_char(unsigned char c); //发送一个字符 tx_str(char *str); //送出字符串 char rx_char(); /*由串行端口接受字符进来*/ main() { uchar c; init_rs232(); //初始化串口 while(1) { delay(1200); tx_str(title); //字符输出测试 tx_char('\r'); tx_char('\n'); while(1) { c="rx"_char(); //字符输出测试 tx_char(c); } } } delay(uint t) { while(t--); } init_rs232(void)/*初始化串行端口*/ { SCON=0X50; //设定串行接口工作模式1,允许接收数据 TMOD=0X20; //设定计时器1 工作模式2 //TH1=0XFB; //设定波特率为9600BPS(用在stc4052ad上,18.432MHZ) TH1=0XFD; //设定波特率为9600BPS(用在普通89C51上,11.0592MHZ) TR1=1; //启动计时器1开始计数 TI=1; //发送准备好 } tx_char(unsigned char c) //发送一个字符 { while(1) if((SCON&0x02)==0x02) break; TI="0"; //清除发送中断标志 SBUF="c"; //将字符发送至串行输出缓冲器 } tx_str(char *str) //送出字符串 { char i; for(i=0;i<strlen(str);i++) tx_char(str); } char rx_char() /*由串行端口接受字符进来*/ { while(1) //循环 //判断数据接受是否准备好 if((SCON &0x01)==0x01) break;; RI="0"; //清除RI标志 return SBUF; /*由串行端口接受字符进来*/ }
点赞  2007-10-15 11:25

回复:关于51实验板

你贴的这段代码ok的。虽然有些地主有错误,我改改也跑起来了 。 我不知道我的代码是不是有问题,我是在“磁动力工作室”发布的51单片机C语言入门教程里抄来的代码。 不知为什么跑不起来
点赞  2007-10-15 11:27

回复:关于51实验板

我那段也跑起来了。不知为什么
点赞  2007-10-15 11:31

回复:关于51实验板

printf("Hello World!\n");这个我知道是标准C的写法,但不知道可以直接在单片机上运行,以后你要多来交流,让我学习学习
点赞  2007-10-15 11:33

6楼 net 

回复:关于51实验板

直接调用printf一类的函数编译出来的结果一般都比较大
点赞  2007-10-15 11:34

回复: 关于51实验板

引用: 原帖由 herot 于 2007-10-15 11:21:00 发表 我的板子是在枫雪处购得的成品板。 小弟是菜鸟 今日照教材上的写了一段代码 下载到板子上没有反应。 想请教一下是怎么回事 代码很简单 #include<at89X51.h> #include<stdio.h> void main(void......
楼主,你的这个程序不是在硬件上调试的,它是在KEIL上进行软件仿真的程序, printf("Hello World!\n"); 的输出是输出到serial windows窗口中去了,观察方法如下: view—>serial windows #1,就能看到输出了 实际的硬件中,发数据是把数据写入SBUF,如要将X发送出去, 就用SBUF=X;一次发送一个字节的数据
点赞  2007-10-15 12:31

回复:关于51实验板

查看一下反编译的代码。是用keil吗? 可以打开keil自带的模拟器的串口监视窗口,可以看到printf的打印。 实际在板子上的时候,这么写要看反编译的代码。因为器件型号的不同(tx/rx)脚的不同,可能接不到。
谁想我?我想谁?
点赞  2007-10-15 13:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复