[STC单片机] 各位大侠,STC11L16XEd单片机帮忙做个程序功能如下

[复制链接]
3948|23
 楼主| longcomeon 发表于 2014-5-23 20:13 | 显示全部楼层 |阅读模式
本帖最后由 longcomeon 于 2014-5-23 20:13 编辑

各位大侠,STC11L16XEd单片机帮忙做个程序功能如下
单片机的晶体用的是22.1184Mhz
A,B,C,三个信号。
3个IO口,在P2口。
A为输入信号,有三种状态0,1,方波(频率大约在1Khz,占空比一直在变化的波形)。
单片机通过检测A信号的状态,来确定B,C输出状态。
当A=1时,B,C都为高电平,即B=1,C=1。
当A=0时,B,C都为低电平,即B=0,C=0。
当A为方波时,B为高电平,C为低电平,即B=1,C=0。
单片机通过uart串口接电脑,检测B,C的状态。

大侠们,帮忙看下这么做,谢谢。

 楼主| longcomeon 发表于 2014-5-23 20:37 | 显示全部楼层
有大侠帮下吗没,我是初学者
望断云山 发表于 2014-5-23 22:44 | 显示全部楼层
如果放一段你自己写的代码,会有人帮你看有什么问题.
但是像这样让人帮你从头到尾写一个工程,估计是没有人理的
 楼主| longcomeon 发表于 2014-5-24 00:03 | 显示全部楼层
望断云山 发表于 2014-5-23 22:44
如果放一段你自己写的代码,会有人帮你看有什么问题.
但是像这样让人帮你从头到尾写一个工程,估计是没有人理 ...

来个提示也行,呵呵
 楼主| longcomeon 发表于 2014-5-24 10:43 | 显示全部楼层
等待好人
diy1997 发表于 2014-5-24 12:09 | 显示全部楼层
你都知道要实现什么样的功能了,自己写吧.
 楼主| longcomeon 发表于 2014-5-24 12:20 | 显示全部楼层
diy1997 发表于 2014-5-24 12:09
你都知道要实现什么样的功能了,自己写吧.

不知道怎么用IO口检测外部输入到单片机的波形
yamato2011 发表于 2014-5-24 15:10 来自手机 | 显示全部楼层
使用中断的边沿触发检测A的状态。
 楼主| longcomeon 发表于 2014-5-24 20:32 | 显示全部楼层
yamato2011 发表于 2014-5-24 15:10
使用中断的边沿触发检测A的状态。

A的IO口不是中端口,是普通的IO口
yamato2011 发表于 2014-5-25 14:42 | 显示全部楼层
longcomeon 发表于 2014-5-24 20:32
A的IO口不是中端口,是普通的IO口

那你的A就是不能接到中断口上了?如果这样的话,就写程序检测吧,很简单。
 楼主| longcomeon 发表于 2014-5-26 12:33 | 显示全部楼层
yamato2011 发表于 2014-5-25 14:42
那你的A就是不能接到中断口上了?如果这样的话,就写程序检测吧,很简单。 ...

大侠能简单写下,让我参考下吗,谢谢饿
yamato2011 发表于 2014-5-26 13:15 | 显示全部楼层
具体不知道你要干嘛,根据你现在的需求,试试以下方案:
A = 0;
A_old = 0;
t = 0;

while(1)
{
        time_off();//关定时器
        t = get_counter();//获取定时器内部计数器的值。
        //此处加上初次运行的条件过滤
        time_open();//开定时器       
        A = Pxx;
       
        if( A != A_old )
        {
                //根据t的值折算时间T,看T有没有超过1ms(1KHZ)
                if(在1ms内)
                {
                        端口为1KHZ的情况
                }
                else
                {
                        if(A==0)
                        {
                                端口为0的情况
                        }
                        else
                        {
                                端口为1的情况
                        }
                }
        }
       
        A_old = A;
}
 楼主| longcomeon 发表于 2014-5-26 13:28 | 显示全部楼层
yamato2011 发表于 2014-5-26 13:15
具体不知道你要干嘛,根据你现在的需求,试试以下方案:
A = 0;
A_old = 0;

大侠,A = Pxx;这个Pxx是什么意思?
x13686626760 发表于 2014-5-26 13:33 | 显示全部楼层
PXX的意思端口分配,看你是分配在什么端口。想学习Q我392248167
 楼主| longcomeon 发表于 2014-5-26 13:55 | 显示全部楼层
x13686626760 发表于 2014-5-26 13:33
PXX的意思端口分配,看你是分配在什么端口。想学习Q我392248167

好的,我加你
ayb_ice 发表于 2014-5-26 14:43 | 显示全部楼层
过采样A输入即可,

检测方波:
计数一段时间内的电平变化次数

检测高电平:
一段时间内连续高电平

检测低电平:
一段时间内连续低电平

输出相关信号标志

主程序显示信号

采样可以通过定时中断来完成
 楼主| longcomeon 发表于 2014-5-26 15:25 | 显示全部楼层
ayb_ice 发表于 2014-5-26 14:43
过采样A输入即可,

检测方波:

采样的代码应该怎么写
ayb_ice 发表于 2014-5-26 15:49 | 显示全部楼层
longcomeon 发表于 2014-5-26 15:25
采样的代码应该怎么写

本次的值与上次的值班比较就可以了
 楼主| longcomeon 发表于 2014-5-26 16:19 | 显示全部楼层
ayb_ice 发表于 2014-5-26 15:49
本次的值与上次的值班比较就可以了

能具体点吗,谢谢哈,我是小白
 楼主| longcomeon 发表于 2014-5-28 14:46 | 显示全部楼层
还是不会,占空比不确定,无法定时啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

87

主题

170

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部