[AVR单片机] 一段小程序

[复制链接]
 楼主| 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语言和汇编写的同一段程序?
xiaoxin1986 发表于 2010-2-21 18:59 | 显示全部楼层
不错,这是一个很好的例子教我怎么写汇编
ls5000 发表于 2010-2-24 12:54 | 显示全部楼层
看看
了解下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

730

帖子

1

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

88

主题

730

帖子

1

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