3909|8

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【分享】单c,自己用汇编写出来了,呵呵,进步。 [复制链接]



这是c

#include                         //包括一个标准的51头函数

#define uchar unsigned char                         //预定义
#define uint  unsigned int                         //预定义
#define ulong unsigned long                         //预定义

sbit SDA_164=P0^0;                  //74HC164端口定义
sbit SCLK_164=P0^1;
sbit DIG1=P1^0;                          //数码管位选端口
sbit DIG2=P1^1;                          //数码管位选端口
sbit DIG3=P1^2;                          //数码管位选端口
sbit DIG4=P1^3;                          //数码管位选端口
sbit DIG5=P1^4;                          //数码管位选端口
sbit DIG6=P1^5;                          //数码管位选端口
sbit DIG7=P1^6;                          //数码管位选端口
sbit DIG8=P1^7;                          //数码管位选端口

uchar code LedNumber[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x00,0x04,0x5c,0x77,0x39,0x79,0x71};

void delay(int i,int j)                          //延时函数
{
        int m;
        for(;i>0;i--)
        {
                m=j;
                for(;m>0;m--);
        }
}

void wirteByte_74164 (uchar ch)                //往74164中写一个字节
{       
        uchar i;
        SCLK_164 = 0;
        for (i=0;i<8;i++)
        {
                SDA_164 = ch&0x80;
                SCLK_164 = 1;
                ch = ch<<1;
                delay(3,2);
                SCLK_164 = 0;
        }
}


void led_display (uchar ch)                           //一位数码管显示函数
{
        wirteByte_74164 (LedNumber[ch]);
        P1 = 0x00;
        delay(300,200);
        P1 = 0xff;
}

void main ()                                        //主函数
{
        uchar ch;
        while (1)                                //死循环
        {
                led_display (ch);         //显示数字
                ch++;                                 //计数
                if (ch>17)
                {
                        ch=0;
                }

        }       
}

这是汇编
;LED循环显示0~9:串口转并口74hc164
;此程序是依照zx-51学习板实验四的c语言改换为汇编,其硬件连接图参照zx-51board原理图
;其中74hc164是串口输入并口输出,P1.0选择八个LED中的一个,P0.0为串口输出,P0.1为CLK触发脉冲。


START:         MOV DPTR,#TABLE
                CLR  P1.0
                MOV R0,#0
LOOP:        MOV R3,#8
                MOV A,R0
                MOVC A,@A+DPTR
                CLR P0.1
                INC R0

KV:                  MOV P1,#00H  
            CLR C       
                MOV C,ACC.7
                MOV P0.0,C
                CPL P0.1
                RL A
                ACALL DELAY
                CPL P0.1
                DJNZ R3,KV
                ACALL DELAY1
                MOV P1,#0FFH
                CJNE R0,#10,LOOP
                JMP START

DELAY:         MOV R5,#2
D1:                MOV R6,#2
D2:                MOV R7,#1
                DJNZ R7,$
                DJNZ R6,D2
                DJNZ R5,D1
                RET
       
DELAY1: MOV R5,#50
D3:                MOV R6,#100
D4:                MOV R7,#100
                DJNZ R7,$
                DJNZ R6,D4
                DJNZ R5,D3
                RET

TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,80H,00H,04H,5CH

                END
两者功能差不多,都可以在keilc下编译通过。
汇编还不大会,可能某些地方实现的比较麻烦,各位大虾发现了多指点一下!!!

最新回复

呵呵,目前还是学生,先看汇编,然后再慢慢看单c。  详情 回复 发表于 2009-7-9 20:11
点赞 关注

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
搞嵌入式的还是认真系统的学习一下组成原理和汇编,但不一定要用它编程。
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 flypig8321 的回复:
搞嵌入式的还是认真系统的学习一下组成原理和汇编,但不一定要用它编程。

嗯,同意啊!
呵呵
目前还在看单片机原理!!!
嵌入式离我还有点远,我要加油了!!!
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
注释啊,注释。。。

 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
就我的感觉,只要大概能看懂汇编,在需要写的时候看资料能写出来就够了~
对我来说,貌似只有移植系统的时候才会用那么一小下的。
不用投入那么多时间在汇编上~

当然如果是学生,就例外了~
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
DELAY和DELAY1是不是只是时间长短的区别啊?
很冗余,改成寄存器寻址,调用前给相应寄存器取不同的值就可以了吧?
 
 
 

回复

117

帖子

0

TA的资源

一粒金砂(中级)

7
 
引用 5 楼 lmlmlmnew 的回复:
DELAY和DELAY1是不是只是时间长短的区别啊?
很冗余,改成寄存器寻址,调用前给相应寄存器取不同的值就可以了吧?

嗯,说的好,谢谢啊!!!
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 3 楼 lbing7 的回复:
注释啊,注释。。。

呵呵,有时候就是有点懒。不好意思啊.
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

9
 
呵呵,目前还是学生,先看汇编,然后再慢慢看单c。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表