打印
[51单片机]

一个很简单的汇编程序我却无法用C语言做出来

[复制链接]
1969|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
黑夜彩虹|  楼主 | 2013-10-17 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 黑夜彩虹 于 2013-10-17 15:09 编辑

程序要求用t0计数器,计满N个数后使发光二极管发光,我用PROTEUS仿真,简单的说下原理:一个按钮接一个与非门(CD4011)消抖从P3.4口输入,按钮按下5次后从P1.0口输出高电平使发光二极管亮,汇编程序正常工作,程序如下:
                 N EQU 5
    START:  CLR P1.0
                 MOV TMOD,#06H
                 CLR A
                 CLR C
                 SUBB A,#N  ;
                 MOV TH0,A                                                                                                
                 MOV TL0,A
                 SETB TR0
     LOOP:   JBC TF0,ALARM
                SJMP LOOP
   ALARM:  SETB P1.0;
                END
我写的无fa zheng常的C程序如下
#include<reg51.h>
sbit LED=P1^0;
void main()
{
        LED=0;
        TMOD=0x06;
        TH0=0xfb;
        TL0=0xfb;
        TR0=1;
//        ET0=1;
        while(TF0)
                LED=1;
//        EA=1;
}
/*void timer0()interrupt 1
{
        LED=1;
}*/
我试过用中断法也不行,不知道错在哪里,求高人指点

相关帖子

沙发
南宫云明| | 2013-10-17 11:25 | 只看该作者
这写的什么程序呀?这样的C程序也能工作?

使用特权

评论回复
板凳
laoxu| | 2013-10-17 12:24 | 只看该作者
汇编这句
LOOP:   JBC TF0,ALARM
                SJMP LOOP
ALARM:  SETB P1.0;
对应C
        while(TF0)
            {
                  TF0=0;  //一定要加清除TF0
                  LED=1;
            }

另:
C语言中断法, 漏写了开 timer0中断
             ET0=1;  //开 timer0中断


使用特权

评论回复
地板
黑夜彩虹|  楼主 | 2013-10-17 14:54 | 只看该作者
TF0清0了也不行呀,中断我注释掉的哪里呀,开了也不行

使用特权

评论回复
5
lzqxs89| | 2013-10-17 15:13 | 只看该作者
你这个程序一下就跑完了,你要是看到灯亮了才怪呢!至少
while(1)
{
//控制程序
}

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
黑夜彩虹 + 1 赞一个!
6
黑夜彩虹|  楼主 | 2013-10-17 15:35 | 只看该作者
这仿真软件就是老实,一上电它就闪了一下,表示上电它是高电平,我按就不行

使用特权

评论回复
7
lzqxs89| | 2013-10-17 15:40 | 只看该作者
黑夜彩虹 发表于 2013-10-17 15:35
这仿真软件就是老实,一上电它就闪了一下,表示上电它是高电平,我按就不行 ...

动手多了,21IC逛多了,慢慢就提高了!

使用特权

评论回复
8
黑夜彩虹|  楼主 | 2013-10-17 15:46 | 只看该作者
搞定了,我马上结贴,谢谢

使用特权

评论回复
9
puppet21| | 2013-10-18 09:31 | 只看该作者
话说,没有大循环吧?

使用特权

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

本版积分规则

3

主题

20

帖子

0

粉丝