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

[复制链接]
2323|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了也不行呀,中断我注释掉的哪里呀,开了也不行
lzqxs89 发表于 2013-10-17 15:13 | 显示全部楼层
你这个程序一下就跑完了,你要是看到灯亮了才怪呢!至少
while(1)
{
//控制程序
}

评分

参与人数 1威望 +1 收起 理由
黑夜彩虹 + 1 赞一个!

查看全部评分

 楼主| 黑夜彩虹 发表于 2013-10-17 15:35 | 显示全部楼层
这仿真软件就是老实,一上电它就闪了一下,表示上电它是高电平,我按就不行
lzqxs89 发表于 2013-10-17 15:40 | 显示全部楼层
黑夜彩虹 发表于 2013-10-17 15:35
这仿真软件就是老实,一上电它就闪了一下,表示上电它是高电平,我按就不行 ...

动手多了,21IC逛多了,慢慢就提高了!
 楼主| 黑夜彩虹 发表于 2013-10-17 15:46 | 显示全部楼层
搞定了,我马上结贴,谢谢
puppet21 发表于 2013-10-18 09:31 | 显示全部楼层
话说,没有大循环吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

20

帖子

0

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