发明内容
本发明的主要目的在于提供一种普通IO口识别输入状态的方法及装置,旨在提高普通IO口的功能及降低成本。
为了达到上述目的,本发明提出一种普通IO口识别输入状态的方法,包括:
将待读取输入状态的普通IO口设置为输入功能,读取所述普通IO口的初始电平状态;
根据所述初始电平状态对单片机的内部配置模块进行模式配置,并基于外部电阻模块及内部配置模块对所述普通IO口进行检测;
基于检测的结果识别所述普通IO口的输入状态。
优选地,所述根据所述初始电平状态对单片机的内部配置模块进行模式配置,并基于外部电阻模块及内部配置模块对所述普通IO口进行检测的步骤具体为:
根据所述初始电平状态进行所述内部配置模块的模式配置,基于配置的所述内部配置模块及所述外部电阻模块对供电电源的电压进行分压,并对所述普通IO口的高低电平状态进行检测,获取检测结果。
优选地,当所述初始电平状态为高电平状态时,所述根据所述初始电平状态对单片机的内部配置模块进行配置,并基于外部电阻模块及内部配置模块对所述普通IO口进行检测的步骤具体包括:
将所述内部配置模块配置成强下拉模式,对所述普通IO口的高低电平状态进行检测得到状态A;
基于所述状态A将所述内部配置模块配置成弱下拉模式,对所述普通IO口的高低电平状态进行检测得到状态B;
所述基于检测的结果识别所述普通IO口的输入状态的步骤具体为:
根据所述状态A、状态B识别所述普通IO口的输入状态。
优选地,当所述初始电平状态为低电平状态时,所述根据所述初始电平状态对单片机的内部配置模块进行模式配置,并基于外部电阻模块及内部配置模块对所述普通IO口进行检测的步骤具体包括:
将所述内部配置模块配置成强上拉模式,对所述普通IO口的高低电平状态进行检测得到状态C;
基于所述状态C将所述内部配置模块配置成弱上拉模式,对所述普通IO口的高低电平状态进行检测得到状态D;
所述基于检测的结果识别所述普通IO口的输入状态的步骤具体为:
根据所述状态C、状态D识别所述普通IO口的输入状态。
优选地,所述基于检测的结果识别所述普通IO口的输入状态的步骤还包括:
根据预先设定的所述普通IO口不同的输入状态与其代表的不同标示制定一查询表,识别出所述普通IO口的不同输入状态后,在所述查询表中进行查找比对,识别出与之对应的标示。
本发明还提出一种普通IO口识别输入状态的装置,包括:
读取模块,用于将待读取输入状态的普通IO口设置为输入功能,读取所述普通IO口的初始电平状态;
配置检测模块,用于根据所述初始电平状态对单片机的内部配置模块进行模式配置,并基于外部电阻模块及内部配置模块对所述普通IO口进行检测;
识别模块,用于基于检测的结果识别所述普通IO口的输入状态。
优选地,所述配置检测模块用于:
根据所述初始电平状态进行所述内部配置模块的模式配置,基于配置的所述内部配置模块及所述外部电阻模块对供电电源的电压进行分压,并对所述普通IO口的高低电平状态进行检测,获取检测结果。
优选地,所述外部电阻模块为外部上拉电阻,所述外部上拉电阻的一端与单片机的供电电源连接,所述外部上拉电阻的另一端与所述普通IO口连接;所述内部配置模块用于配置强下拉模式、弱下拉模式。
优选地,所述外部电阻模块为外部下拉电阻,所述外部下拉电阻的一端与所述普通IO口连接,所述外部下拉电阻的另一端接地;所述内部配置模块用于配置强上拉模式、弱上拉模式。
优选地,所述识别模块用于:
根据预先设定的所述普通IO口不同的输入状态与其代表的不同标示制定一查询表,识别出所述普通IO口的不同输入状态后,在所述查询表中进行查找比对,识别出与之对应的标示。
本发明提出的一种普通IO口识别输入状态的方法及装置,根据读取的所述普通IO口的初始电平状态对单片机的内部配置模块进行模式配置,再通过配置的所述内部配置模块及外部电阻模块对供电电源的电压进行分压,并对所述普通IO口的高低电平状态进行检测,根据检测的结果识别所述普通IO口的输入状态,由于所述内部配置模块能配置出内部强、弱上拉模式、内部强、弱下拉模式等多种模式,因此,即可通过单片机的普通IO口来对多种状态的输入进行识别判断,十分灵活,且无需增加AD转换功能,降低了成本。
具体实施方式
本发明实施例的解决方案主要是:根据读取的所述普通IO口的初始电平状态对单片机的内部配置模块进行模式配置,再通过配置的所述内部配置模块及外部电阻模块对供电电源的电压进行分压,并对所述普通IO口的高低电平状态进行检测,根据检测的结果识别所述普通IO口的输入状态。
如图1所示,本发明较佳实施例提出一种普通IO口识别输入状态的方法,包括:
步骤S101,将待读取输入状态的普通IO口设置为输入功能,读取所述普通IO口的初始电平状态;
单片机的普通IO(Input/Output,输入/输出)口具有输入输出功能,单片机可根据不用应用选择IO口相应的输入输出状态,对于待读取输入状态的普通IO口,首先由单片机将该普通IO口设置为输入功能,即该普通IO口作为输入口接收输入信号。
单片机外与所述普通IO口接有一外部电阻模块,所述外部电阻模块可为一外部上拉电阻或外部下拉电阻,当所述外部电阻模块为外部上拉电阻时,所述外部上拉电阻的一端与单片机的供电电源连接,所述外部上拉电阻的另一端与所述普通IO口连接;当所述外置分压模块为外部下拉电阻时,所述外部下拉电阻的一端与所述普通IO口连接,所述外部下拉电阻的另一端接地。进一步地,根据取值大小的不同,外部上拉电阻还可分为外部强上拉电阻和外部弱上拉电阻,外部下拉电阻可分为外部强下拉电阻和外部弱下拉电阻,且在一种情况下,所述外部电阻模块中还可既无外部上拉电阻,也无外部下拉电阻。所述普通IO口连接的所述外部电阻模块中电阻的连接位置及大小不同时,对应的输入状态也会不同,因此,本实施例中即可通过判断所述普通IO口连接的所述外部电阻模块中电阻的连接位置及大小的不同来对不同的输入状态进行识别。
根据所述外部电阻模块中电阻的连接位置及大小的不同,所述普通IO口初始的输入状态也会不同,检测待读取输入状态的普通IO口的高低电平状态,获取所述普通IO口的初始电平状态。
步骤S102,根据所述初始电平状态对单片机的内部配置模块进行模式配置,并基于外部电阻模块及内部配置模块对所述普通IO口进行检测;
根据获取的所述普通IO口的初始电平状态判断所述外部电阻模块中电阻的连接位置,当所述初始电平状态为高电平状态时,则判断与所述普通IO口连接的所述外部电阻模块中的电阻为外部上拉电阻;当所述初始电平状态为低电平状态时,则判断与所述普通IO口连接的所述外部电阻模块中的电阻为外部下拉电阻。因此,根据获取到的所述普通IO口的初始电平状态即可判断出所述普通IO口连接的所述外部电阻模块中的电阻是外部上拉电阻还是外部下拉电阻,从而对单片机的内部配置模块进行模式配置。
根据所述初始电平状态判断出所述外部电阻模块中的电阻是外部上拉电阻还是外部下拉电阻后,单片机通过内部寄存器进行所述内部配置模块的模式配置,所述内部配置模块可根据所述外部电阻模块中的电阻是外部上拉电阻还是外部下拉电阻而相应的配置为下拉模式或上拉模式,具体地,本实施例中,所述内部配置模块可配置为强上拉模式、强下拉模式、弱上拉模式及弱下拉模式。
需要说明的是,不同型号的单片机其内部配置模块配置的模式种类也会有所不同,如有的单片机内部配置模块可配置成强、弱上拉模式及强、弱下拉模式,进一步地,有的单片机内部配置模块还可更加细化配置成强强上拉、强上拉模式,弱弱上拉、弱上拉模式,强强下拉、强下拉模式,弱弱下拉、弱下拉模式,其工作原理均相同,都是基于所述外部电阻模块及配置的所述内部配置模块对所述供电电源的电压进行分压,并对所述普通IO口的高低电平状态进行检测,为了便于说明,本实施例中以单片机内部配置模块配置成强、弱上拉模式及强、弱下拉模式为例进行说明,当然,也不限定单片机内部配置模块配置成其他更多种类的模式,其工作原理可参照单片机内部配置模块配置成强、弱上拉模式及强、弱下拉模式的工作原理,在此不再赘述。
具体地,本实施例中,当判断所述外部电阻模块中的电阻为外部上拉电阻时,则将单片机的内部配置模块配置成下拉模式,如可配置成强下拉模式、弱下拉模式后对所述普通IO口的高低电平状态进行检测,对配置成强下拉模式、弱下拉模式来进行检测的顺序不作进一步地限定,如可先配置成强下拉模式、再配置成弱下拉模式,也可先配置成弱下拉模式、再配置成强下拉模式,为了便于说明,在此仅以先配置成强下拉模式、再配置成弱下拉模式为例进行详细说明。先将单片机的内部配置模块配置成强下拉模式,对所述普通IO口的高低电平状态进行检测得到状态A;并基于状态A将单片机的内部配置模块配置成弱下拉模式,对所述普通IO口的高低电平状态进行检测得到状态B。
当判断所述外部电阻模块中的电阻为外部下拉电阻时,则将单片机的内部配置模块配置成上拉模式,如可配置成强上拉模式、弱上拉模式后对所述普通IO口的高低电平状态进行检测,对配置成强上拉模式、弱上拉模式来进行检测的顺序不作进一步地限定,如可先配置成强上拉模式、再配置成弱上拉模式,也可先配置成弱上拉模式、再配置成强上拉模式,为了便于说明,在此仅以先配置成强上拉模式、再配置成弱上拉模式为例进行详细说明。先将单片机的内部配置模块配置成强上拉模式,对所述普通IO口的高低电平状态进行检测得到状态C;并基于状态C将单片机的内部配置模块配置成弱上拉模式,对所述普通IO口的高低电平状态进行检测得到状态D。
步骤S103,基于检测的结果识别所述普通IO口的输入状态。
根据获取的状态A、B或状态C、D对所述普通IO口的输入状态进行识别,具体地,当判断所述外部电阻模块中的电阻为外部上拉电阻时,先将单片机的内部配置模块配置成强下拉模式,对此时所述普通IO口的高低电平状态进行检测得到状态A,若状态A为高电平状态,则识别出此时所述普通IO口的输入状态为强上拉电源正输入状态;若状态A为低电平状态,则继续将单片机的内部配置模块配置成弱下拉模式,对所述普通IO口的高低电平状态进行检测得到状态B,若状态B为高电平状态,则识别出此时所述普通IO口的输入状态为弱上拉电源正输入状态,若状态B为低电平状态,则识别出此时所述普通IO口的输入状态为高阻输入状态。
当判断所述外部电阻模块中的电阻为外部下拉电阻时,先将单片机的内部配置模块配置成强上拉模式,对所述普通IO口的高低电平状态进行检测得到状态C;若状态C为高电平状态,则识别出此时所述普通IO口的输入状态为强下拉电源负输入状态;若状态C为低电平状态,则继续将单片机的内部配置模块配置成弱上拉模式,对所述普通IO口的高低电平状态进行检测得到状态D,若状态D为高电平状态,则识别出此时所述普通IO口的输入状态为弱下拉电源负输入状态,若状态D为低电平状态,则识别出此时所述普通IO口的输入状态为高阻输入状态。
由此,本实施例中由于所述内部配置模块能配置出强、弱上拉模式、强、弱下拉模式等多种模式,因此,即可通过单片机的普通IO口来对多种状态的输入进行识别判断,十分灵活,且无需增加AD转换功能,降低了成本。具体在本实施例中,根据所述初始电平状态将所述内部配置模块配置成强、弱上拉模式或强、弱下拉模式后对所述普通IO口的高低电平状态进行检测,基于检测结果普通IO口可至少识别出强上拉电源正输入状态、弱上拉电源正输入状态、强下拉电源负输入状态、弱下拉电源负输入状态及高阻输入状态这5种状态,比现有技术中普通IO口只能识别出高电平输入状态及低电平输入状态多出3种,能基本满足实际应用中需普通IO口识别多种状态的要求,且不同单片机的内部配置模块中可配置的模式种类可能更多,则相应的可识别出的输入状态种类也更多。可利用本实施例中普通IO口能对多种输入状态进行识别来通过普通IO口标示不同的版本号,如PCB版本号等,本实施例中的普通IO口即能对5个不同的PCB版本号进行标示,进一步地,还可通过若干普通IO口输入状态的组合来对版本号进行标示,则能标示的版本号数目也大大增加,如通过2个普通IO口的组合来对PCB版本号进行标示时,则可标示25个不同的PCB版本号,在实际应用中可为产品的开发、设计带来很大的方便。
在本实施例的一个可选实施方式中,还可在需识别不同标示如PCB版本号时,预先设定所述普通IO口不同的输入状态与其代表的不同标示即对应的PCB版本号,并根据预先设定所述普通IO口不同的输入状态与其代表的不同标示制定一查询表,在识别出所述普通IO口的不同输入状态后,在所述查询表中进行查找比对,识别出与之对应的标示,能更加方便、快捷的应用在识别PCB版本号等不同标示上。
如图2所示,本发明较佳实施例提出一种普通IO口识别输入状态的装置,包括:读取模块201、配置检测模块202以及识别模块203,其中:
读取模块201,用于将待读取输入状态的普通IO口设置为输入功能,读取所述普通IO口的初始电平状态;
单片机的普通IO(Input/Output,输入/输出)口具有输入输出功能,单片机可根据不用应用选择IO口相应的输入输出状态,对于待读取输入状态的普通IO口,首先由单片机将该普通IO口设置为输入功能,即该普通IO口作为输入口接收输入信号。
单片机外与所述普通IO口接有一外部电阻模块,所述外部电阻模块可为一外部上拉电阻或外部下拉电阻,当所述外部电阻模块为外部上拉电阻时,所述外部上拉电阻的一端与单片机的供电电源连接,所述外部上拉电阻的另一端与所述普通IO口连接;当所述外置分压模块为外部下拉电阻时,所述外部下拉电阻的一端与所述普通IO口连接,所述外部下拉电阻的另一端接地。进一步地,根据取值大小的不同,外部上拉电阻还可分为外部强上拉电阻和外部弱上拉电阻,外部下拉电阻可分为外部强下拉电阻和外部弱下拉电阻,且在一种情况下,所述外部电阻模块中还可既无外部上拉电阻,也无外部下拉电阻。所述普通IO口连接的所述外部电阻模块中电阻的连接位置及大小不同时,对应的输入状态也会不同,因此,本实施例中即可通过判断所述普通IO口连接的所述外部电阻模块中电阻的连接位置及大小的不同来对不同的输入状态进行识别。
根据所述外部电阻模块中电阻的连接位置及大小的不同,所述普通IO口初始的输入状态也会不同,检测待读取输入状态的普通IO口的高低电平状态,获取所述普通IO口的初始电平状态。
配置检测模块202,用于根据所述初始电平状态对单片机的内部配置模块进行模式配置,并基于外部电阻模块及内部配置模块对所述普通IO口进行检测;
根据获取的所述普通IO口的初始电平状态判断所述外部电阻模块中电阻的连接位置,当所述初始电平状态为高电平状态时,则判断与所述普通IO口连接的所述外部电阻模块中的电阻为外部上拉电阻;当所述初始电平状态为低电平状态时,则判断与所述普通IO口连接的所述外部电阻模块中的电阻为外部下拉电阻。因此,根据获取到的所述普通IO口的初始电平状态即可判断出所述普通IO口连接的所述外部电阻模块中的电阻是外部上拉电阻还是外部下拉电阻,从而对单片机的内部配置模块进行模式配置。
根据所述初始电平状态判断出所述外部电阻模块中的电阻是外部上拉电阻还是外部下拉电阻后,单片机通过内部寄存器进行所述内部配置模块的模式配置,所述内部配置模块可根据所述外部电阻模块中的电阻是外部上拉电阻还是外部下拉电阻而相应的配置为下拉模式或上拉模式,具体地,本实施例中,所述内部配置模块可配置为强上拉模式、强下拉模式、弱上拉模式及弱下拉模式。
需要说明的是,不同型号的单片机其内部配置模块配置的模式种类也会有所不同,如有的单片机内部配置模块可配置成强、弱上拉模式及强、弱下拉模式,进一步地,有的单片机内部配置模块还可更加细化配置成强强上拉、强上拉模式,弱弱上拉、弱上拉模式,强强下拉、强下拉模式,弱弱下拉、弱下拉模式,其工作原理均相同,都是基于所述外部电阻模块及配置的所述内部配置模块对所述供电电源的电压进行分压,并对所述普通IO口的高低电平状态进行检测,为了便于说明,本实施例中以单片机内部配置模块配置成强、弱上拉模式及强、弱下拉模式为例进行说明,当然,也不限定单片机内部配置模块配置成其他更多种类的模式,其工作原理可参照单片机内部配置模块配置成强、弱上拉模式及强、弱下拉模式的工作原理,在此不再赘述。
具体地,本实施例中,当判断所述外部电阻模块中的电阻为外部上拉电阻时,则将单片机的内部配置模块配置成下拉模式,如可配置成强下拉模式、弱下拉模式后对所述普通IO口的高低电平状态进行检测,对配置成强下拉模式、弱下拉模式来进行检测的顺序不作进一步地限定,如可先配置成强下拉模式、再配置成弱下拉模式,也可先配置成弱下拉模式、再配置成强下拉模式,为了便于说明,在此仅以先配置成强下拉模式、再配置成弱下拉模式为例进行详细说明。先将单片机的内部配置模块配置成强下拉模式,对所述普通IO口的高低电平状态进行检测得到状态A;并基于状态A将单片机的内部配置模块配置成弱下拉模式,对所述普通IO口的高低电平状态进行检测得到状态B。
当判断所述外部电阻模块中的电阻为外部下拉电阻时,则将单片机的内部配置模块配置成上拉模式,如可配置成强上拉模式、弱上拉模式后对所述普通IO口的高低电平状态进行检测,对配置成强上拉模式、弱上拉模式来进行检测的顺序不作进一步地限定,如可先配置成强上拉模式、再配置成弱上拉模式,也可先配置成弱上拉模式、再配置成强上拉模式,为了便于说明,在此仅以先配置成强上拉模式、再配置成弱上拉模式为例进行详细说明。先将单片机的内部配置模块配置成强上拉模式,对所述普通IO口的高低电平状态进行检测得到状态C;并基于状态C将单片机的内部配置模块配置成弱上拉模式,对所述普通IO口的高低电平状态进行检测得到状态D。
识别模块203,用于基于检测的结果识别所述普通IO口的输入状态。
根据获取的状态A、B或状态C、D对所述普通IO口的输入状态进行识别,具体地,当判断所述外部电阻模块中的电阻为外部上拉电阻时,先将单片机的内部配置模块配置成强下拉模式,对此时所述普通IO口的高低电平状态进行检测得到状态A,若状态A为高电平状态,则识别出此时所述普通IO口的输入状态为强上拉电源正输入状态;若状态A为低电平状态,则继续将单片机的内部配置模块配置成弱下拉模式,对所述普通IO口的高低电平状态进行检测得到状态B,若状态B为高电平状态,则识别出此时所述普通IO口的输入状态为弱上拉电源正输入状态,若状态B为低电平状态,则识别出此时所述普通IO口的输入状态为高阻输入状态。
当判断所述外部电阻模块中的电阻为外部下拉电阻时,先将单片机的内部配置模块配置成强上拉模式,对所述普通IO口的高低电平状态进行检测得到状态C;若状态C为高电平状态,则识别出此时所述普通IO口的输入状态为强下拉电源负输入状态;若状态C为低电平状态,则继续将单片机的内部配置模块配置成弱上拉模式,对所述普通IO口的高低电平状态进行检测得到状态D,若状态D为高电平状态,则识别出此时所述普通IO口的输入状态为弱下拉电源负输入状态,若状态D为低电平状态,则识别出此时所述普通IO口的输入状态为高阻输入状态。
由此,本实施例中由于所述内部配置模块能配置出强、弱上拉模式、强、弱下拉模式等多种模式,因此,即可通过单片机的普通IO口来对多种状态的输入进行识别判断,十分灵活,且无需增加AD转换功能,降低了成本。具体在本实施例中,根据所述初始电平状态将所述内部配置模块配置成强、弱上拉模式或强、弱下拉模式后对所述普通IO口的高低电平状态进行检测,基于检测结果普通IO口可至少识别出强上拉电源正输入状态、弱上拉电源正输入状态、强下拉电源负输入状态、弱下拉电源负输入状态及高阻输入状态这5种状态,比现有技术中普通IO口只能识别出高电平输入状态及低电平输入状态多出3种,能基本满足实际应用中需普通IO口识别多种状态的要求,且不同单片机的内部配置模块中可配置的模式种类可能更多,则相应的可识别出的输入状态种类也更多。可利用本实施例中普通IO口能对多种输入状态进行识别来通过普通IO口标示不同的版本号,如PCB版本号等,本实施例中的普通IO口即能对5个不同的PCB版本号进行标示,进一步地,还可通过若干普通IO口输入状态的组合来对版本号进行标示,则能标示的版本号数目也大大增加,如通过2个普通IO口的组合来对PCB版本号进行标示时,则可标示25个不同的PCB版本号,在实际应用中可为产品的开发、设计带来很大的方便。
在本实施例的一个可选实施方式中,还可在需识别不同标示如PCB版本号时,预先设定所述普通IO口不同的输入状态与其代表的不同标示即对应的PCB版本号,并根据预先设定所述普通IO口不同的输入状态与其代表的不同标示制定一查询表,在识别出所述普通IO口的不同输入状态后,在所述查询表中进行查找比对,识别出与之对应的标示,能更加方便、快捷的应用在识别PCB版本号等不同标示上。
上述普通IO口识别输入状态的方法及装置,根据读取的所述普通IO口的初始电平状态对单片机的内部配置模块进行模式配置,再通过配置的所述内部配置模块及外部电阻模块对供电电源的电压进行分压,并对所述普通IO口的高低电平状态进行检测,根据检测的结果识别所述普通IO口的输入状态,由于所述内部配置模块能配置出内部强、弱上拉模式、内部强、弱下拉模式等多种模式,因此,即可通过单片机的普通IO口来对多种状态的输入进行识别判断,十分灵活,且无需增加AD转换功能,降低了成本。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元或模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述装置中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。