久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2965|回復: 1
打印 上一主題 下一主題
收起左側

51單片機入門程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:71407 發表于 2014-12-31 14:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
;工程名稱:點亮單片機P1端口所接的八盞LED ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H ;ORG是偽指令,大概的意思是程序從地址0000H處開始保存程序 MAIN: ;主程序開始的標號,標號可以自己任意定義,標號就是地址 MOV P1,#00000000B ;給P1端口送數00000000B,點亮P1端口的LED AJMP MAIN ;跳轉到標號MAIN處運行,AJMP是控制短轉移指令 ;AJMP在這里有循環的作用,即讓單片機不斷給P1端口送數 END ;匯編結束指令 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;51單片機入門程序2 ;工程名稱:熄滅單片機P1端口所接的八盞LED ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H ;ORG是偽指令,大概的意思是程序從地址0000H處開始保存程序 MAIN: ;主程序開始的標號,標號可以自己任意定義,標號就是地址 MOV P1,#11111111B ;給P1端口送數11111111B,熄滅P1端口的LED SJMP MAIN ;跳轉到標號MAIN處運行,SJMP是無條件短轉移指令 ;AJMP在這里有循環的作用,即讓單片機不斷給P1端口送數 END ; 匯編結束指令 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;51單片機入門程序3 ;工程名稱:點亮單片機P1.0和P1.7所接的LED ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: MOV P1,#01111110B ;給P1端口送數01111110B,右邊的0是P1.0腳對應的代碼 ;左邊的0是P1.7腳對應的代碼,要記住這種對應關系 LJMP MAIN ;跳轉到標號MAIN處運行,LJMP是控制長轉移指令 ;AJMP在這里有循環的作用,即讓單片機不斷給P1端口送數 END ; 匯編結束指令 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;51單片機入門程序4 ;工程名稱:讓單片機P1端口的LED不斷的亮滅起來 ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: MOV P1,#00000000B ;給P1端口送數00000000B,先點亮P1端口的LED ACALL YS ;調用延時子程序,讓LED亮一小段時間 MOV P1,#11111111B ;給P1端口送數11111111B,熄滅P1端口的LED ACALL YS ;調用延時子程序,讓LED滅一小段時間 AJMP MAIN ;跳轉到標號MAIN處運行,反復讓LED一亮一滅 YS: ;延時子程序YS,功能是能讓LED亮起來或者滅掉一小段時間 MOV R1,#200 ;讓燈亮滅時間的長短也就是延時的長短跟#號后面的數據有關 D: MOV R2,#200 ;延時長點#號后面的數據就大點,延時短點#號后面的數據 T: MOV R3,#200 ;就小點,但#號后面最大的數據是255 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行別的語句的 END ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;51單片機入門程序5 ;工程名稱:讓單片機P1端口的LED實現跑馬燈效果,循環移位點亮一盞LED ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: MOV P1,#11111110B;點亮P1.0所接的燈 ACALL YS ;調用延時子程序,讓P1.0所接的燈亮一小段時間 MOV P1,#11111101B;點亮P1.1所接的燈 ACALL YS ;調用延時子程序,讓P1.1所接的燈亮一小段時間 MOV P1,#11111011B;點亮P1.2所接的燈 ACALL YS ;調用延時子程序,讓P1.2所接的燈亮一小段時間 MOV P1,#11110111B;點亮P1.3所接的燈 ACALL YS ;調用延時子程序,讓P1.3所接的燈亮一小段時間 MOV P1,#11101111B;點亮P1.4所接的燈 ACALL YS ;調用延時子程序,讓P1.4所接的燈亮一小段時間 MOV P1,#11011111B;點亮P1.5所接的燈 ACALL YS ;調用延時子程序,讓P1.5所接的燈亮一小段時間 MOV P1,#10111111B;點亮P1.6所接的燈 ACALL YS ;調用延時子程序,讓P1.6所接的燈亮一小段時間 MOV P1,#01111111B;點亮P1.7所接的燈 ACALL YS ;調用延時子程序,讓P1.7所接的燈亮一小段時間 LJMP MAIN ;循環.這回用長調用指令LJMP,當程序比較長的時候就用LJMP YS: ;延時子程序YS,功能是能讓LED亮起來或者滅掉一小段時間 MOV R1,#200 ;讓燈亮滅時間的長短也就是延時的長短跟#號后面的數據有關 D: MOV R2,#200 ;延時長點#號后面的數據就大點,延時短點#號后面的數據 T: MOV R3,#200 ;就小點,但#號后面最大的數據是255 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


;51單片機入門程序6 ;工程名稱:實現跑馬燈效果,循環移位點亮一盞LED,運用左移指令 ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: MOV A,#11111110B ;先把數11111110B送到累加器A, LOOP: MOV P1,A ;把A里面的數11111110B送到P1端口輸出顯示 ACALL YS ;顯示一小段時間 RL A ;把A里的數11111110B左移一位 AJMP LOOP ;回到LOOP處循環,即把左移后得到新的數碼再顯示,再刷新A YS: ;延時子程序YS,功能是能讓LED亮起來或者滅掉一小段時間 MOV R1,#200 ;讓燈亮滅時間的長短也就是延時的長短跟#號后面的數據有關 D: MOV R2,#200 ;延時長點#號后面的數據就大點,延時短點#號后面的數據 T: MOV R3,#200 ;就小點,但#號后面最大的數據是255 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


;51單片機入門程序7 ;工程名稱:讓單片機P0和P2端口所接的燈同時全亮全滅 ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: MOV P0,#00000000B ;同時點亮兩個端口的LED的時候, MOV P2,#00000000B ;兩個MOV語句間不用調用延時子程序 LCALL YS ;調用延時子程序,讓P0 P2口的LED同時亮一小段時間 MOV P0,#11111111B ;同時熄滅兩個端口的LED的時候, MOV P2,#11111111B ;兩個MOV語句間不用調用延時子程序 LCALL YS ;調用延時子程序,讓P0 P2口的LED同時滅一小段時? LJMP MAIN ;循環 YS: ;延時子程序YS,功能是能讓LED亮起來或者滅掉一小段時間 MOV R1,#200 ;讓燈亮滅時間的長短也就是延時的長短跟#號后面的數據有關 D: MOV R2,#200 ;延時長點#號后面的數據就大點,延時短點#號后面的數據 T: MOV R3,#200 ;就小點,但#號后面最大的數據是255 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;51單片機


入門程序8 ;工程名稱:讓單片機P0、P1、P2和P3端口所接的燈同時全亮全滅 ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: MOV P0,#00000000B MOV P2,#00000000B MOV P1,#00000000B MOV P3,#00000000B LCALL YS ;調用延時子程序 MOV P0,#11111111B MOV P2,#11111111B MOV P1,#11111111B MOV P3,#11111111B LCALL YS ;調用延時子程序 LJMP MAIN ;循環 YS: ;延時子程序YS,功能是能讓LED亮起來或者滅掉一小段時間 MOV R1,#200 ;讓燈亮滅時間的長短也就是延時的長短跟#號后面的數據有關 D: MOV R2,#200 ;延時長點#號后面的數據就大點,延時短點#號后面的數據 T: MOV R3,#200 ;就小點,但#號后面最大的數據是255 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;補充說明:AJMP、SJMP、LJMP都是控制轉移類指令,功能都是一樣的, ; 但是當你所編寫的程序比較長的時候就要用LJMP。 ; ; ACALL和LCALL都是調用指令,當程序很長的時候就用LCALL ; ; 延時子程序內部的運作比較復雜,大家只知道延時子程序的 ; 功能是能延時一小段時間。CUP那些內部部件把數碼送出端口之后 ; 碰到了ACALL和LCALL這些指令后CPU就暫時不往端口送數了 ; 而是轉來運行延時子程序,子程序運行過程大概是這樣: ; 先把一些數分別送到一些寄存器里面去,然后進行減1判斷不為0的工作 ; 就象我們我們把一些水果送到一些房間里面去,然后在里面把這些水果吃 ; 完,再去做正式的工作 ,吃水果的過程是花費時間滴,呵呵! ; 延時子程序基本上是固定不變的,只要是要延長時間都把這段子程序輸進去就可以了!

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

使用道具 舉報

沙發
ID:71407 發表于 2014-12-31 14:40 | 只看該作者
51單片機入門程序9 ;工程名稱:用位指令CLR和SETB指令實現P2.0所接LED的亮滅(用12MHZ晶振) ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: CLR P2.0 ;清零位指令CLR,即讓P2.0恒定輸出0,位指令是針對一根引腳的指令 LCALL YS ;調用延時子程序,讓LED亮起來1秒種 SETB P2.0 ;置1位指令SETB,即讓P2.0恒定輸出1,位指令是針對一根引腳的指令 LCALL YS ;調用延時子程序,讓LED滅掉1秒種 LJMP MAIN YS: MOV R1,#10 D: MOV R2,#200 T: MOV R3,#248 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;51單片機入門程序10 ;工程名稱:用查表指令MOVC A,@A+DPTR實現P1端口LED的全亮全滅 ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: MOV R7,#0 ;查表程序要用到軟件計數器來計調出表中數據的次數(或個數) ;但是在用軟件計數器前先清零,這是給軟件計數器R7清零 MOV DPTR,#LIULIU ; 把表格的首地址放入寄存器DPTR, ;注意了DPTR里的地址是永恒不變的 LOOP:MOV A,R7 ;把軟件計數器里的數據送給累加器A,為查表作些準備 MOVC A,@A+DPTR ;查表,把查到的數據送到A MOV P1,A ;把A里的數送到P1端口顯示 ACALL YS ;調用延時子程序,顯示一小段時間 INC R7 ;軟件計數器自動加1 CJNE R7,#2,LOOP ;R7里的數到2了沒,到了順序往下運行,沒到轉移到LOOP處 MOV R7,#0 ;軟件計數器清零,也就是上面程序已經調出表里的最后一個數據 AJMP LOOP ;回到LOOP處重新把表里的第一個數調出來顯示 LIULIU: DB 00000000B,11111111B ;DB 00H ,0FFH 注意了如果是用十六進制表示時,#號后面不能 ;直接跟十六進制里面的那幾個英文字母,要用0隔開 YS: ;延時子程序,如果是用12MHZ作為時鐘電路的話,那么延時時間為1秒 MOV R1,#10 D: MOV R2,#200 T: MOV R3,#248 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;51單片機入門程序11 ;工程名稱:讓單個數碼管顯示5這個數字 ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: CLR P2.7 ;數碼管的硬件連接參看課本第六章,這個語句是讓數碼管亮起來的條件 MOV P0,#92H ;這個語句是讓數碼管顯示5,92H是數碼管顯示5的代碼,參看課本79頁 AJMP MAIN ;循環 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;51單片機入門程序12 ;工程名稱:個位數碼管計數顯示0-9(數碼管靜態顯示,結合仿真板) ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H MAIN: CLR P2.7 ;先讓數碼管能夠亮起來 MOV R7, #0 ;查表程序要用到軟件計數器來計調出表中數據的次數(或個數) ;但是在用軟件計數器前先清零,這是給軟件計數器R7清零 MOV DPTR, #LIULIU ;把表格的首地址放入寄存器DPTR, ;注意了DPTR里的地址是永恒不變的 LOOP:MOV A, R7 ;把軟件計數器里的數據送給累加器A,為查表作些準備 MOVC A,@A+DPTR ;查表,把查到的數據送到A MOV P0,A ;把A里的數送到P0端口顯示 ACALL YS ;調用延時子程序,顯示一小段時間 INC R7 ;軟件計數器自動加1 CJNE R7,#10,LOOP ;R7里的數到10了沒,到了順序往下運行,沒到轉移到LOOP處 MOV R7,#0 ;軟件計數器清零,也就是上面程序已經調出表里的最后一個數據 AJMP LOOP ;回到LOOP處重新把表里的第一個數調出來顯示 LIULIU:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ; 0 1 2 3 4 5 6 7 8 9 YS: ;延時子程序,如果是用12MHZ作為時鐘電路的話,那么延時時間為1秒 MOV R1,#10 D: MOV R2,#200 T: MOV R3,#248 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;51單片機入門程序13 ;工程名稱:讓數碼管顯示數字12(數碼管動態顯示,結合仿真板和課本第七章電路圖) ;編寫日期:2009.7.4 ;編寫者:藍柳柳 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ORG 0000H ;偽指令,規定下面的指令保存在程序存儲器的0000H單元 AJMP MAIN ;跳轉到主程序,以保留0003H開始的中斷入口地址 ORG 0050H ;偽指令 MAIN: SETB P2.7 ; 十位數碼管熄滅 CLR P2.6 ;個位數碼管亮 MOV A,#02H ;個位要顯示的數據送累加器A MOV DPTR,#TABLE1 ; DPTR用于保存表的首地址 MOVC A,@A+DPTR ; 查表指令,取出DPTR所對應表中的第A個數據(此處A為累加器, ;同時應注意數據的序號從0開始編號),即取出要顯示數據的段碼A4H MOV P0,A ;將取得的段碼A4H送到P0口顯示 ACALL YS ; 調用延時程序 SETB P2.6 ; 個位數碼管熄滅 CLR P2.7 ; 十位數碼管亮 MOV A,#01H ;十位要顯示的數據送累加器A MOV DPTR,#TABLE1 ; DPTR用于保存表的首地址(即到哪一個表中取數) MOVC A,@A+DPTR ; 查表指令,取出DPTR所對應的表中的第A個數據(此處A為累加器,;同時應注意數據的序號從0開始編號),即取出要顯示數據的段碼F9H MOV P0,A ;將取得的段碼F9H送到P0口顯示 ACALL YS ;調用延時程序 AJMP MAIN ;跳回交替繼續顯示 ;0 1 2 3 4 5 6 7 8 9 TABLE1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共陽數碼管段碼表 YS: ;延時子程序,如果是用12MHZ作為時鐘電路的話,那么延時時間為1秒 MOV R1,#10 D: MOV R2,#200 T: MOV R3,#248 DJNZ R3,$ DJNZ R2,T DJNZ R1,D RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的 END ;補充說明: ;1.數碼管顯示時一定要看好硬件連接,還要考慮數碼管公共端要有恒定的有效電平 ;2.用到查表指令的程序一般思路是這樣,首先編寫出只運行一次的條件,如軟件計數器 ;清零,把表的首地址放入DPTR和設置數碼管公共端的有效電平等。然后是把軟件計數器 ;里的數送到A,然后查表,接著就顯示延時,再接著就是計數器自動加1,跟著就是 ;CJNE判斷,后面就是循環了 ;3.數碼管的靜態顯示一般是指給數碼管的公共端一個恒定的有效電平,數碼管就一直 ;處于顯示狀態。數碼管的動態顯示是指雖然數碼管的公共端的有效電平 ;時有改變,但是改變的速度太快,利用人眼的視覺暫留效果我們看到的是不變動的 ;顯示。其實不管是靜態顯示還是動態顯示,只要大家能夠把硬件接好 ;然后會編出相應的程序出來就可以了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲尺码日本国产精品 | 欧美三级免费观看 | 日本三级网站在线 | 亚洲精品国产a久久久久久 午夜影院网站 | 伊人久久国产 | 超碰97免费 | 中文字幕1区2区 | 久久精品国内 | 99久久婷婷国产精品综合 | 欧美99 | 久草视频观看 | 女朋友的闺蜜3韩国三级 | 欧美黄色网| 国内在线视频 | 超碰地址 | 一区二区在线 | 2018国产大陆天天弄 | av免费网站在线 | 色婷婷综合久久久中字幕精品久久 | 欧美国产日韩在线 | 亚洲高清视频一区二区 | 日韩国产在线观看 | 欧区一欧区二欧区三免费 | 一级欧美一级日韩片 | av免费网址| 日韩网站在线观看 | 亚洲色图综合 | 亚洲一区二区网站 | 亚洲 欧美 日韩在线 | 在线观看黄视频 | 黄色片在线免费看 | 狠狠的日 | 国产成人精品一区二区三区在线 | 午夜小电影 | 成年视频在线观看福利资源 | 欧美日韩一区二区在线 | 日日夜夜天天 | 尤物在线精品视频 | 亚洲一区 中文字幕 | 亚洲精品欧洲 | 国产男女视频网站 |