打印
[AVR单片机]

一段小程序

[复制链接]
1948|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huamunv|  楼主 | 2010-2-17 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;--------------------------------------------
        ORG    0000H
        AJMP   MAIN
        ORG    0030H        ;程序从30H开始
MAIN:   JB     P1.0,Check ;检测p1.0是否为高
        AJMP   MAIN         ;循环检测
Check:   MOV R1,#05H         ;赋值给R1
        JB P1.0,START        ;在检测P1.0是否为高,是跳至
        RET                 ;
START:   CPL    P1.4         ;LED灯亮
        LCALL  DELAY        ;延时
        SETB  P1.4          ;LED灯消灭
        LCALL DELAY         ;延时
        DJNZ  R1,START       ;不是5次继续
        JNB P1.0, $         ;等待下次按键被按下      
        RET
;------ 延时子程序 ------
DELAY:  MOV   R7,#228
SDL1:   MOV   R6,#0FFH
SDL0:   DJNZ  R6,SDL0
        DJNZ  R7,SDL1
        RET
        END
程序的作用是P1。0连接一个按键,被按下在台起后(不考虑去抖),使连接在P1。4的LED灯闪亮5次后停止,等待下次触发P1。0

用C语言怎样写
#include <reg51.h>
#define on  1
#define off 0
sbit led=P1^4;
sbit key=P1^0;
void delay100ms();//延时100ms函数
void led_flash(unsigned char count);//led闪烁函数
void main()
{
while(1)
        {
                key=1;//置1输入
                while(key==1);//等键按下
                //delay();去抖延时
                while(key==0);//等键抬起
                led_flash(5);//led闪5次
         }
}
void delay100ms()
{
        unsigned char i,j;
        for(i=200;i!=0;i--)
                for(j=250;j!=0;j--);
}
void led_flash(unsigned char count)
{
        while(count--)
                {
                        led=on;
                        delay100ms();
                        led=off;
                        delay100ms();
                 }
}

相关帖子

沙发
lovelyegle| | 2010-2-17 10:40 | 只看该作者
原来是两段程序对比那

使用特权

评论回复
板凳
易达口香糖| | 2010-2-17 22:45 | 只看该作者
什么意思?呵呵

使用特权

评论回复
地板
laslison| | 2010-2-21 16:20 | 只看该作者
是用C语言和汇编写的同一段程序?

使用特权

评论回复
5
xiaoxin1986| | 2010-2-21 18:59 | 只看该作者
不错,这是一个很好的例子教我怎么写汇编

使用特权

评论回复
6
ls5000| | 2010-2-24 12:54 | 只看该作者
看看
了解下

使用特权

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

本版积分规则

88

主题

730

帖子

1

粉丝