打印

一个普通IO读取3中状态(高、低、悬空)

[复制链接]
2081|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
老鱼探戈|  楼主 | 2010-10-21 19:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, pid, pi, ic, sic
本帖最后由 老鱼探戈 于 2010-10-21 19:24 编辑

一般用在单片机IO口有限,而需要3个器件ID的情况:


;--------------------------------------------------
;功    能:   定义外部变量
;内    容:   
;用    法:   在主程序的.data处放入
;--------------------------------------------------
_DefData_ReadID        macro
.data
;1口读3ID参数

         PID            EQU    P0.0
         MPID         EQU    P0M.0
         ID_IOURD1        equ    #00000001B   ;上拉电阻值对应P0.0位改变
         ID_IOURD0        equ    #00000000B   
          PUR         EQU    P0UR

         EdlyClk      equ     1           ;1CPU=4,1/2CPU=2,1/4CPU=1
         EdlyTm        equ     6*EdlyClk
         VBasicID      ds    1           ;ID结果=0:接地,=1悬空,=2:接高.


/==================================================
//函数功能: 读ID号
//输入参数:
//输出参数: VBasicID =0,1,2
//使用说明: 在大循环中调用
//==================================================
ReadID: bts1    FClk_128ms                 ;128ms检测一次
            ret
              Movi    PUR,ID_IOURD1          ;上拉使能
            b0bclr    MPID                              ;输入
            DelayUs #(3*EdlyTm)                   ;延时时间需根据Fcpu定
            clr    VBasicID          ;ID="0"
            bts1    PID
            ret
            Movi    PUR,ID_IOURD0             ;上拉禁止
            DelayUs #EdlyTm
            b0bset    MPID                           ;输出
            bclr    PID
            DelayUs #EdlyTm
            b0bclr    MPID                        ;输入
            DelayUs #EdlyTm
            incms    VBasicID        ;ID="1"
            bts0    PID
            incms    VBasicID        ;ID="2"
            ret

该方**有短时间(极短)VDD和GND短路的现象,不过一般不会有什么大的问题。
不到万不得已,一般不要用这种方法  。
评分
参与人数 1威望 +1 收起 理由
whilebreak + 1

相关帖子

沙发
老鱼探戈|  楼主 | 2010-10-22 12:29 | 只看该作者
这是用SONIX的汇编写的。

使用特权

评论回复
板凳
hwq362202| | 2010-10-22 13:55 | 只看该作者
:)

使用特权

评论回复
地板
yangyicheng| | 2010-10-22 15:14 | 只看该作者
使能上拉:读到高,使能下拉 读到高:IO 状态高
使能上拉:读到高,使能下拉 读到低:IO 状态浮空
使能上拉:读到低,使能下拉 读到低:IO 状态低,只要IO口内部同时有上下拉电阻使能,很容易做到3种状态!

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
老鱼探戈 + 1
5
老鱼探戈|  楼主 | 2010-10-22 17:23 | 只看该作者
不是所有IC同是有上拉和下拉的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:先思而后动~ 生活迢迢几十秋,几处安乐;人生寥寥数十载,何不快活。!

11

主题

5262

帖子

251

粉丝