找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 4436|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)匯編程序編寫 求大神

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:188604 發(fā)表于 2017-4-11 20:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1)用P1.0控制發(fā)光二極管LED0,使其以0.5s的周期閃爍;
2)用P1.1控制發(fā)光二極管LED1,使其以1.5s的周期閃爍;
3)用P2口控制發(fā)光二極管LED2——LED7,每個(gè)LED亮 1s,做跑馬燈。
要求程序中使用定時(shí)計(jì)數(shù)器和中斷。


求大神幫忙 謝謝

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:111634 發(fā)表于 2017-4-11 22:12 | 只看該作者
《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學(xué)習(xí)51單片機(jī)原理,雙解c和匯編程序
回復(fù)

使用道具 舉報(bào)

板凳
ID:187614 發(fā)表于 2017-4-12 07:27 | 只看該作者
自己動(dòng)手吧,否則永遠(yuǎn)學(xué)不好,用匯編寫兩三個(gè)程序,什么都清楚了
回復(fù)

使用道具 舉報(bào)

地板
ID:188604 發(fā)表于 2017-4-12 17:40 | 只看該作者
51Lovers 發(fā)表于 2017-4-12 07:27
自己動(dòng)手吧,否則永遠(yuǎn)學(xué)不好,用匯編寫兩三個(gè)程序,什么都清楚了

會(huì)分開寫第一個(gè)和第二個(gè)  不會(huì)第三個(gè) 也不會(huì)一起寫 能不能幫幫忙
  謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:47286 發(fā)表于 2017-4-12 20:23 | 只看該作者
sbit led0=P1^0;                //定義led0
sbit led1=P1^1;                //定義led1
sbit ledg=P2;                //定義led組 ledg=led group

uchar num50a=0,num50b=0,num50c=0;        //3個(gè)50ms計(jì)數(shù)變量

void led_ctrl()                //燈控
{
        if(num50a==10)        //如果 計(jì)數(shù)器50a值為10 500ms
        {
                num50a=0;                //計(jì)數(shù)器50a清零
                led0=~led0;                //led0取反
        }

        if(num50b==30)        //如果 計(jì)數(shù)器50b值為30 1500ms 1.5s
        {
                num50b=0;                //計(jì)數(shù)器50b清零
                led1=~led1;                //led1取反
        }

        if(num50c==20)        //如果 計(jì)數(shù)器50c值為20 1000ms 1s
        {
                num50c=0;                //計(jì)數(shù)器50c清零

                if(P2==0x80)        //如果 P2值為0x80 1000 0000
                {
                        P2=0x04;                //賦值 P2值為0x04 0000 0100
                }

                P2<<1;                        //P2值左移1位
        }
}

void Server_Time0() interrupt 1        //計(jì)時(shí)器服務(wù)程序
{
        TH0 = xx;        //重裝定時(shí)初值 50ms
        TL0 = xx;        //重裝定時(shí)初值 50ms
       
        num50a++;        //50ms計(jì)數(shù)器a自加
        num50b++;        //50ms計(jì)數(shù)器b自加
        nun50c++;                //50ms計(jì)數(shù)器c自加
}

void main()
{
        init_time();        //初始化計(jì)時(shí)器 沒寫 這個(gè)是最基本的函數(shù)了

        led0=1;                        //開led0
        led1=1;                        //開led1
        p2=0x04;                        //開led2

        while(1)
        {
                led_ctrl();        //調(diào)用 led控制函數(shù)
        }
}
回復(fù)

使用道具 舉報(bào)

6#
ID:47286 發(fā)表于 2017-4-12 20:30 | 只看該作者
dzbj 發(fā)表于 2017-4-12 20:23
sbit led0=P1^0;                //定義led0
sbit led1=P1^1;                //定義led1
sbit ledg=P2;                //定義led組 ledg=led group
...

補(bǔ)充 用P2和用ledg是一樣的 寫亂了 下班回來(lái)挺累 寫東西不專心 湊合看吧
回復(fù)

使用道具 舉報(bào)

7#
ID:188604 發(fā)表于 2017-4-12 20:32 | 只看該作者
有沒有匯編語(yǔ)言呀 剛開始學(xué) 不太會(huì)
回復(fù)

使用道具 舉報(bào)

8#
ID:111634 發(fā)表于 2017-4-12 20:49 | 只看該作者
不是已經(jīng)給你介紹了那本《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》,是雙解c和匯編程序,你的問題上面都有,是最簡(jiǎn)單最基礎(chǔ)的,去圖書館或書店翻翻看吧,不會(huì)讓你失望的!
回復(fù)

使用道具 舉報(bào)

9#
ID:111634 發(fā)表于 2017-4-12 20:50 | 只看該作者
Cvilan 發(fā)表于 2017-4-12 20:32
有沒有匯編語(yǔ)言呀 剛開始學(xué) 不太會(huì)

不是已經(jīng)給你介紹了那本《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》,是雙解c和匯編程序,你的問題上面都有,是最簡(jiǎn)單最基礎(chǔ)的,去圖書館或書店翻翻看吧,不會(huì)讓你失望的!
回復(fù)

使用道具 舉報(bào)

10#
ID:188604 發(fā)表于 2017-4-12 21:07 | 只看該作者
zl2168 發(fā)表于 2017-4-12 20:50
不是已經(jīng)給你介紹了那本《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》,是雙解c和匯編程序,你的問題 ...

是最近要做這個(gè)實(shí)驗(yàn)了  但是書還沒買到  不能先教一下么?
回復(fù)

使用道具 舉報(bào)

11#
ID:188604 發(fā)表于 2017-4-12 21:13 | 只看該作者
dzbj 發(fā)表于 2017-4-12 20:23
sbit led0=P1^0;                //定義led0
sbit led1=P1^1;                //定義led1
sbit ledg=P2;                //定義led組 ledg=led group
...

有沒有匯編語(yǔ)言的呢?
回復(fù)

使用道具 舉報(bào)

12#
ID:188246 發(fā)表于 2017-4-13 13:13 來(lái)自觸屏版 | 只看該作者
Cvilan 發(fā)表于 2017-4-12 17:40
會(huì)分開寫第一個(gè)和第二個(gè)  不會(huì)第三個(gè) 也不會(huì)一起寫 能不能幫幫忙
  謝謝

我給一個(gè)我的思路,第一,第二段你都能自己寫了,第三斷段,指令里有一個(gè)位移指令,可以直接實(shí)現(xiàn)跑馬燈,0.5秒的延時(shí)可以用中斷完成。中斷里可以對(duì)累加器A分別賦值,用來(lái)記錄1秒和1.5秒的延時(shí)標(biāo)志,也可以在中斷外完成這個(gè)操作。
回復(fù)

使用道具 舉報(bào)

13#
ID:155507 發(fā)表于 2017-4-13 19:48 | 只看該作者
  1. /*
  2. 1)用P1.0控制發(fā)光二極管LED0,使其以0.5s的周期閃爍;
  3. 2)用P1.1控制發(fā)光二極管LED1,使其以1.5s的周期閃爍;
  4. 3)用P2口控制發(fā)光二極管LED2——LED7,每個(gè)LED亮 1s,做跑馬燈。
  5. 要求程序中使用定時(shí)計(jì)數(shù)器和中斷。

  6. */

  7. #include<reg52.h>
  8. #define uchar unsigned char
  9. #define uint unsigned int

  10. sbit led0=P1^0;       //定義led0
  11. sbit led1=P1^1;       //定義led1
  12. sbit ledg=P2;         //定義led組 ledg=led group

  13. uchar num50a=0,num50b=0,num50c=0;        //3個(gè)50ms計(jì)數(shù)變量

  14. void led_ctrl()                //燈控
  15. {
  16.         if(num50a==10)        //如果 計(jì)數(shù)器50a值為10 500ms
  17.         {
  18.                 num50a=0;           //計(jì)數(shù)器50a清零
  19.                 led0=~led0;         //led0取反
  20.         }

  21.         if(num50b==30)        //如果 計(jì)數(shù)器50b值為30 1500ms 1.5s
  22.         {
  23.                 num50b=0;                //計(jì)數(shù)器50b清零
  24.                 led1=~led1;                //led1取反
  25.         }

  26.         if(num50c==20)        //如果 計(jì)數(shù)器50c值為20 1000ms 1s
  27.         {
  28.                 num50c=0;           //計(jì)數(shù)器50c清零

  29.                 if(P2==0x80)        //如果 P2值為0x80 1000 0000
  30.                 {
  31.                         P2=0x04;          //賦值 P2值為0x04 0000 0100
  32.                 }

  33.                 P2<<=1;             //P2值左移1位
  34.         }
  35. }

  36. init_time()
  37. {
  38.         TMOD = 0x01; //打開定時(shí)器0,并設(shè)定其工作方式為16位定時(shí)模式。
  39.         TH0=(65536-50000)/ 256;
  40.         TL0=(65536-50000)% 256;   //設(shè)定定時(shí)器的初值,使得沒10ms中斷一次
  41.         EA = 1;   //允許總中斷
  42.         ET0 = 1;   //允許定時(shí)器0終端
  43.         TR0 = 1;  //啟動(dòng)定時(shí)器0
  44. }

  45. void Server_Time0() interrupt 1  //計(jì)時(shí)器服務(wù)程序
  46. {
  47.         TH0 = (65536-50000)/ 256;   //重裝定時(shí)初值 50ms
  48.         TL0 = (65536-50000)% 256;   //設(shè)定定時(shí)器的初值,使得沒50ms中斷一次  //重裝定時(shí)初值 50ms
  49.        
  50.         num50a++;        //50ms計(jì)數(shù)器a自加
  51.         num50b++;        //50ms計(jì)數(shù)器b自加
  52.         num50c++;        //50ms計(jì)數(shù)器c自加
  53. }

  54. void main()
  55. {
  56.         init_time();        //初始化計(jì)時(shí)器 沒寫 這個(gè)是最基本的函數(shù)了

  57.         led0=1;             //開led0
  58.         led1=1;             //開led1
  59.         P2=0x04;            //開led2

  60.         while(1)
  61.         {
  62.                 led_ctrl();        //調(diào)用 led控制函數(shù)
  63.         }
  64. }


復(fù)制代碼





  1. led0 BIT P1.0                ;定義led0
  2. led1 BIT P1.1                ;定義led1

  3. ORG 00H
  4. JMP START
  5. ORG 0BH
  6. JMP TIM0
  7. led_ctrl:
  8.                 ; FUNCTION led_ctrl (BEGIN)
  9.                 MOV     A,R5
  10.                 CJNE    A,#0AH,LC0001 ;如果 計(jì)數(shù)器50a值為10 500ms
  11.                 CLR     A                                ;計(jì)數(shù)器50a清零
  12.                 MOV     R5,A
  13.                 CPL     led0                        ;led0取反
  14. LC0001:
  15.                 MOV     A,R6
  16.                 CJNE    A,#01EH,LC0002 ;如果 計(jì)數(shù)器50b值為30 1500ms 1.5s
  17.                 CLR     A                                ;計(jì)數(shù)器50b清零
  18.                 MOV     R6,A
  19.                 CPL     led1                        ;led1取反
  20. LC0002:
  21.                 MOV     A,R7                ;如果 計(jì)數(shù)器50c值為20 1000ms 1s
  22.                 CJNE    A,#014H,LC0005
  23.                 CLR     A                                ;計(jì)數(shù)器50c清零
  24.                 MOV     R7,A
  25.                 MOV     A,P2                        ;
  26.                 CJNE    A,#080H,LC0004        ;如果 P2值為0x80 1000 0000
  27.                 MOV     P2,#04H                        ;賦值 P2值為0x04 0000 0100
  28. LC0004:
  29.                 MOV     A,P2                        ; P2值左移1位
  30.                 ADD     A,ACC                        ;
  31.                 MOV     P2,A                        ;
  32. LC0005:
  33.                 RET     
  34.                 ; FUNCTION led_ctrl (END)
  35. init_time:
  36.                 ; FUNCTION init_time (BEGIN)
  37.                 MOV     TMOD,#01H                ;打開定時(shí)器0,并設(shè)定其工作方式為16位定時(shí)模式。
  38.                 MOV     TH0,#03CH                ;(65536-50000)/ 256 設(shè)定定時(shí)器的初值,使得沒50ms中斷一次
  39.                 MOV     TL0,#0B0H                ;(65536-50000)% 256
  40.                 SETB    EA                                ;允許總中斷
  41.                 SETB    ET0                                ;允許定時(shí)器0終端
  42.                 SETB    TR0                                ;啟動(dòng)定時(shí)器0
  43.                 RET     
  44.                 ; FUNCTION init_time (END)
  45. TIM0:
  46.                 ; FUNCTION Server_Time0 (BEGIN)
  47.                 MOV     TH0,#03CH                ;重裝定時(shí)初值 50ms
  48.                 MOV     TL0,#0B0H                ;重裝定時(shí)初值 50ms
  49.                 INC     R5                        ;50ms計(jì)數(shù)器a自加
  50.                 INC     R6                        ;50ms計(jì)數(shù)器b自加
  51.                 INC     R7                        ;50ms計(jì)數(shù)器c自加
  52.                 RETI   
  53.                 ; FUNCTION Server_Time0 (END)
  54. START:
  55.                 ; FUNCTION main (BEGIN)
  56.                 LCALL   init_time                 ;初始化計(jì)時(shí)器 這個(gè)是最基本的函數(shù)了
  57.                 SETB    led0                        ;開led0
  58.                 SETB    led1                        ;開led1
  59.                 MOV     P2,#04H                        ;開led2
  60. LC0008:
  61.                 LCALL   led_ctrl                ;調(diào)用 led控制函數(shù)
  62.                 SJMP    LC0008
  63.                 ; FUNCTION main (END)


  64. end


復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表