矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 8094|回复: 13

stc 15单片机,这个io口模式配置的代码有点问题吧。

[复制链接]
     
发表于 2018-4-12 23:29:07 | 显示全部楼层 |阅读模式
如图!
stc的15单片机,io口可以配置4种模式,图中最上面两行设置了p3内8个io口的工作模式,然后下面两行是单独调整p3.5为推挽模式的代码,好像不太对吧。最末尾那句P3M0 &= (1<<5);执行后,虽然把p3.5置一了,但是把其他位也都清零了,没有达到注释中那样的只更改p3.5的模式,而保留其他口的原来模式不变的设计初衷啊,还是我学艺不精没看透。
老师指导下。
上图了。
z.jpg
     
发表于 2018-4-17 10:19:27 | 显示全部楼层
直接给端口设置赋值,简单程序问题还不大,对于一些稍复杂有中断程序,并且需要在主程序和中断程序中,随时随地都要修改端口状态的,那么问题就来了,因为在执行中断程序时,它不知道在主程序中当前端口被设置成什么状态,此时用赋值语句重新给端口修改状态,中断返回后,其他端口状态就有可能发生错误。
用位操作方法设置寄存器,可以避免编程中意想不到的错误发生。
除C51外,位操作方法是;
P &=~ (1<<Bit);  //复位
P |= (1<<Bit);  //置位
回复 支持 1 反对 0

使用道具 举报

     
发表于 2018-4-13 01:22:16 | 显示全部楼层
本帖最后由 壹法拉 于 2018-4-13 01:45 编辑

楼主分析的对;楼上计算的也对;
如果把后面那行的 & 改成 | 的话,就能保持其他位不变;
怎么感觉这样计算不嫌费劲呢,直接赋值不就完了吗!

P3M1 &=0XDF;
P3M0 |=0X20;

原作者调试程序时可能没发现出错,所以他没发现这个BUG;
这样的错误很隐蔽!

评分

2

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2018-4-13 00:07:21 | 显示全部楼层
某个位清零: P & = ~(1<<X);

某个位置位: P | =  (1<<X);

评分

2

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2018-4-13 18:21:22 来自手机 | 显示全部楼层
输出模式设定后一般程序中不需要修改了,直接赋值就完了,整辣么多弯弯绕绕,累心。我都是直接赋值设置,用哪一位直接指定即可
回复 支持 反对

使用道具 举报

     
发表于 2018-4-13 20:12:05 | 显示全部楼层
用汇编
就不会有这样的bug
回复 支持 反对

使用道具 举报

     
发表于 2018-4-13 22:03:27 来自手机 | 显示全部楼层
lxa000 发表于 2018-4-13 20:12
用汇编
就不会有这样的bug

正解,汇编一对一,这个绝对错不了。c就直接赋值吧,c的直接赋值和汇编一样
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-4-13 22:29:39 | 显示全部楼层
zaq 发表于 2018-4-13 18:21
输出模式设定后一般程序中不需要修改了,直接赋值就完了,整辣么多弯弯绕绕,累心。我都是直接赋值设置,用 ...

师傅,不知你所说的那个直接赋值是怎么个操作法,能举个例子做个例程参考下。
回复 支持 反对

使用道具 举报

     
发表于 2018-4-14 01:13:43 | 显示全部楼层
本帖最后由 autopccopy 于 2018-4-14 01:15 编辑

有人说STC IO 配置就四个状态,很容易配置。的确,如果将该端口全部初始化为同一个状态是很简单的 ,就是2个00与0XFF的事。
但若是一个端口初始化为不同模式或仅对某个别IO就稍麻烦一点。

大家可以使用STC15的库函数或宏替换也很方便。

懒人可以更使用一些小工具,直接得到端口的设置的值。

例如一下的STC单片机端口设置工具:STCIOset , (注意其不直接支持STC12C56系列...)

下载地址:w w w.stcisp.com/stcioset  
STC单片机IO设置小工具v10b9-2.jpg
STC单片机IO设置小工具v10b9-1.jpg

STCio设置v10b9c.part4.rar

249.12 KB, 下载次数: 224

STCio设置v10b9c.part3.rar

540 KB, 下载次数: 195

STCio设置v10b9c.part2.rar

540 KB, 下载次数: 184

STCio设置v10b9c.part1.rar

540 KB, 下载次数: 157

回复 支持 反对

使用道具 举报

     
发表于 2018-4-14 16:05:03 | 显示全部楼层
autopccopy 发表于 2018-4-14 01:13
有人说STC IO 配置就四个状态,很容易配置。的确,如果将该端口全部初始化为同一个状态是很简单的 ,就是2 ...

格式被损坏,打不开了
回复 支持 反对

使用道具 举报

     
发表于 2018-4-15 14:40:46 | 显示全部楼层
本帖最后由 autopccopy 于 2018-4-15 14:52 编辑

不会啊。我专门下载了测试,可以解压并运行。
(因论坛单个附件大小有限制,故分卷上传,要全部下载后对其中一个解压即可。)

下载地址:w w w.stcisp.com/stcioset  

或者到上面的链接下载最新版吧。。。



(216)
stcioset1.jpg
回复 支持 反对

使用道具 举报

     
发表于 2018-4-15 15:10:49 | 显示全部楼层
壹法拉 发表于 2018-4-13 01:22
楼主分析的对;楼上计算的也对;
如果把后面那行的 & 改成 | 的话,就能保持其他位不变;
怎么感觉这样计 ...

原作者应该是笔误了: & 应改成 |  。
回复 支持 反对

使用道具 举报

     
发表于 2018-4-15 15:12:04 | 显示全部楼层
zaq 发表于 2018-4-13 18:21
输出模式设定后一般程序中不需要修改了,直接赋值就完了,整辣么多弯弯绕绕,累心。我都是直接赋值设置,用 ...

简单的程序当然这样。更简单的程序甚至不用设置端口的模式,直接用上电的弱上拉模式。
回复 支持 反对

使用道具 举报

     
发表于 2018-4-17 23:35:57 | 显示全部楼层
本帖最后由 autopccopy 于 2018-4-17 23:38 编辑

STCIOset v1.0b9e 也升级了,支持单IO 位设置。欢迎测试。
(附件分卷上传,需全部下载至同一文件夹解压即可)

直接下载:www. stcisp.com/stcioset  



(286)
QQ图片20180417233138.png
QQ图片20180417233815.png
QQ图片20180417233808.png

STCio设置工具v10b9e.zip

245.83 KB, 下载次数: 210

STCio设置工具v10b9e.z03

537.11 KB, 下载次数: 132

STCio设置工具v10b9e.z02

537.11 KB, 下载次数: 127

STCio设置工具v10b9e.z01

537.11 KB, 下载次数: 118

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表