日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

带注释的c51汇编语言,51单片机汇编语言实现交通灯 代码有详细注释

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 带注释的c51汇编语言,51单片机汇编语言实现交通灯 代码有详细注释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ORG 0000H;程序起始地址

LJMP START;初始化標號

ORG 0003H;外部中斷地址--東西緊急按鈕觸發

LJMP DXJJ;東西緊急標號

ORG 0013H;外部中斷地址--南北緊急按鈕觸發

LJMP NBJJ;南北緊急標號

ORG 000BH;定時器T0中斷地址

LJMP OT? ?? ?? ?;定時器T0標號

ORG 0100H;程序起始位置

START:? ?? ???SETB EA? ?? ?? ?;中斷允許

SETB ET0 ;允許定時器T0中斷

CLR IT0 ;設置外部中斷為電平觸發

CLR IT1 ;同上

SETB EX0 ;允許外部中斷

SETB EX1 ;同上

SETB PX0 ;設置外部中斷優先級高于定時器中斷

SETB PX1 ;

CLR PT0? ?? ?? ?;

MOV TMOD,#01H;設置定時器模式1

MOV TH0,#3CH ;

MOV TL0,#0B0H;設置定時器初值--50ms

SETB TR0? ???;開啟定時器

MAIN:? ?? ???MOV R0,#20;設置R0 記錄20個50ms 產生1s

MOV R1,#56;設置主時間判斷時間軸 表示循環周期

MOV R2,#3 ;

MOV R3,#3 ;東西南北初始紅燈時間為3S

MOV R4,#0FCH;初始全紅 1111 1100

MOV 70H,#0;判斷是否按下了緊急按鈕的標志位 0 第一次按(進入緊急狀態) 1 第二次按(退出緊急狀態)

MOV R7,#00H ;判斷是要執行緊急程序還是正常交通燈顯示??00H正常交通燈 01H 東西緊急 02H南北緊急

XS:? ?? ???LCALL DISPLAY;調用顯示程序

LJMP XS? ???;循環進行顯示

SJMP [? ? ? ? DISCUZ_CODE_3? ? ? ? ]nbsp;? ???;死循環 保護程序執行? 可能沒用

OT:? ?? ???CJNE R7,#00H,PD ;R7不等于0跳轉判斷是哪個緊急,R7=0 說明未中斷正常跑程序

ZCP:? ?? ???DJNZ R0,OVER2;? ?? ???;R0 不為零說明沒有記夠20個50ms即沒有產生1s,跳出中斷等待下一次50ms產生中斷信號

MOV TH0,#3CH ;

MOV TL0,#0B0H;記完一次50ms 重新裝載定時器初值

DEC R1? ?? ???;進入此部分說明已經經過了1s 那么總時間-1

DEC R2? ?? ???;顯示時間-1

DEC R3? ?? ???;顯示時間-1

KK1:? ?? ???CJNE R1,#53,KK2? ?? ???;判斷是否經過了3s 到達了第一個狀態(初始狀態全紅為第狀態)

MOV R2,#20? ?? ???;

MOV R3,#23? ?? ???;賦值顯示

MOV R4,#0F9H;DX綠,NB紅 1111 1001

LJMP OVER2

KK2:? ?? ???CJNE R1,#33,KK3? ?? ???;判斷是否又經過了20s 到達了第二個狀態

MOV R2,#3? ?? ???;賦值顯示

MOV R4,#0EDH;DX黃,NB紅 1110 1101

LJMP OVER2

KK3:? ?? ???CJNE R1,#30,KK4? ?? ???;判斷是否又經過了3s 到達了第三個狀態

MOV R2,#33? ?? ???;

MOV R3,#30? ?? ???;賦值顯示

MOV R4,#0F6H;DX紅,NB綠 1111 0110

LJMP OVER2

KK4:? ?? ???CJNE R1,#0,OVER1 ;判斷是否又經過了30s 到達了第四個狀態? ?此時為了跳出中斷 還不能重新賦值記錄50ms的個數 采用了OVER1和OVER2

MOV R3,#3? ?? ???;賦值顯示

MOV R4,#0DEH;DX紅,NB黃 1101 1110

MOV R1,#56? ?? ???;重新賦值總時間

OVER1:? ?? ???MOV R0,#20? ?? ???;重新賦值20 以產生1s

OVER2:? ?? ???RETI? ?? ?? ?? ?? ???;跳出中斷 如果用ERT是跳出子程序調用 兩者有區別!

PD:? ?? ???CJNE R7,#01H,NB;判斷是哪種緊急 01H 是DX緊急??02H是NB緊急

DX:? ?? ???MOV R4,#0B9H;DXJJ將東西車和綠燈打開,將南北燈變紅 1011 1001

MOV P2,#0FFH;關掉數碼管選通 達到暫停數碼管效果

RETI

NB:? ?? ???MOV R4,#76H;NBJJ將南北車和南北綠燈打開,將東西燈變紅 0111 0110

MOV P2,#0FFH;關掉數碼管選通 達到暫停數碼管效果

RETI

DXJJ:? ?? ???JB 70H,OFF1;判斷是否第一次按下緊急按鈕

ON1:? ?? ???CPL 70H? ?? ?? ???;按下一次后就翻轉 下次就能檢測出是第二次

MOV R7,#01H;第一次按下說明開啟中斷 那么進入緊急狀態 緊急狀態標志變為#01H表示產生東西中斷

LJMP OUT1

OFF1:? ?? ???CPL 70H? ?? ?? ???;如果要關掉中斷那么也要對標志位取反 下次就能檢測出是要開啟

MOV R7,#00H;第二次按下說明是關閉中斷 緊急標志變為#00H進入正常交通燈顯示

OUT1:? ?? ???RETI

NBJJ:? ?? ???JB 70H,OFF2;道理同上

ON2:? ?? ???CPL 70H

MOV R7,#02H

LJMP OUT2

OFF2:? ?? ???CPL 70H

MOV R7,#00H

OUT2:? ?? ???RETI

DISPLAY:MOV DPTR,#TAB;東西的數碼管十位顯示

MOV A,R2;

MOV B,#10

DIV AB

MOVC A,@A+DPTR;

MOV P2,#11111101B;

MOV P0,A

LCALL YS

MOV DPTR,#TAB;東西的數碼管個位顯示

MOV A,B;

MOVC A,@A+DPTR;

MOV P2,#11111110B

MOV P0,A;

LCALL YS

MOV DPTR,#TAB;南北的數碼管十位顯示

MOV A,R3;

MOV B,#10

DIV AB

MOVC A,@A+DPTR;

MOV P2,#11110111B;

MOV P0,A

LCALL YS

MOV DPTR,#TAB;南北的數碼管個位顯示

MOV A,B;

MOVC A,@A+DPTR;

MOV P2,#11111011B

MOV P0,A;

LCALL YS

MOV P1,R4;紅綠燈的顯示

LCALL YS

RET

YS:? ?? ???MOV R5,#150 ;延時函數

JY:? ?? ???DJNZ R5,JY ;減一操作

RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;數碼管共陰極

END

總結

以上是生活随笔為你收集整理的带注释的c51汇编语言,51单片机汇编语言实现交通灯 代码有详细注释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。