完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
为啥这个程序上位机不能显示返回值 i 这是为什么 大神们
#include unsigned char flag,a; int i; void main () { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; while(1) { if(flag==1) { ES=0; flag=0; SBUF=i; while(!ti); TI=0; SBUF=a; while(!TI); TI=0; ES=1; } } } void inti () interrupt 4 { RI=0; a=SBUF; P0=SBUF; i=0; i++; if(i==256) i=0; flag=1; } |
|
相关推荐
10个回答
|
|
void inti () interrupt 4
{ RI=0; a=SBUF; P0=SBUF; i=0; i++; if(i==256) i=0; flag=1; } 你每次进入中断都i=0;i++;那就是i永远都是1了 |
|
|
|
本帖最后由 西雅图之恋 于 2013-8-12 10:55 编辑
那应该怎么改 求指导 谢谢 那把i=0放外面? |
|
|
|
在最前面那个int i改回unsigned int i,那个i=0就不需要了 |
|
|
|
|
|
|
|
|
|
|
|
{:12:}{:12:}{:12:}
|
|
|
|
我想输出i的值 比如说 子函数那个当i=2时 SBUF输出2 不知道怎么做 |
|
|
|
首先我也是新手,也是最近才开始接触到单片机,最近刚刚看到串口通讯,有什么不对的地方,还请见谅。 1.你程序的问题,二楼已经指出来了,中断中i=0这条语句是多余的。 还有就是main函数中,REN=1这条语句放在main最后,这个不放的话单片机上电后默认SM0和SM1为零,如果先使REN=1,就会接受串口数据,但这个数据不是你发送的,是单片机和上位机之间的通讯数据,会影响实验。 2.你用的是串口调试助手吗?是的话看下面。 串口调试助手有两种显示和输入方式,十六进制和ASSIC码,这两种。因为你要输出,SBUF=i,你这里i采用的是十进制(i在0到256之间变化),若只按我上面的两条该好程序的话,就能显示了,调试结果如下(要选择串口调试助手显示和发送方式为十六进制) 会发现一个问题,因为显示方式为十六进制,所以不能达到你要以十进制方式显示1到255的目的。 |
|
|
|
忘了一点,在定义int i时,就因该给i赋值,int i=0;
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11787 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 14:42 , Processed in 0.784280 second(s), Total 92, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号