欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機數碼管那一段匯編程序看不懂
[打印本頁]
作者:
wuyuetian
時間:
2021-6-7 17:12
標題:
單片機數碼管那一段匯編程序看不懂
DQ EQU P3.3 ;P3.3定義接口,參考STC89C51數據手冊
EX2 EQU P3.2 ;外部中斷0,參考STC89C51數據手冊
SEG1 EQU 0ffech ;數碼管1(最右)
SEG2 EQU 0ffedh ;數碼管2
SEG3 EQU 0ffeeh ;數碼管3
SEG4 EQU 0ffefh ;數碼管4(最左)
BYT_DLY EQU 5FH ;延時函數參數變量
DA_BUF EQU 40H ;解碼出的數據緩沖區,包括41H
ORG 0000h
LJMP MAIN
ORG 003H ;外部中斷0入口地址,參考STC89C51數據手冊
LJMP EINT3
ORG 40H
MAIN: MOV SP,#60H
SETB EA
SETB EX0
SJMP $; ;原地踏步,等中斷解碼
;//中斷接收解碼模塊
EINT3: CLR EA;//關閉
MOV R6,#10
SB: MOV BYT_DLY,#13 ;834uS
LCALL DELAY ;調用834微秒延時子程序
JB DQ,EXIT ;延時834微秒后判斷DQ腳是否出現高電平如果有就退出解碼程序
DJNZ R6, SB ;重復 10 次,目的是檢測在 9000 微秒內如果出現高電平就退出解碼程序
;-------------------------------;以上完成對遙控信號 起始碼 的 9000 微秒的初始低電平信號的識別!!!!!
JNB DQ, $; ;等待,避開 起始碼 低電平
JB DQ,$; ;避開結果碼
;/*;測試按鍵一次有多少位低電平,不同遙控器不一樣*/
;/*;電工電子中心投影遙控器只有32位,這對后邊程序參數設置關系重大
; CLR A
;ADDLOOP: JNB DQ,$
; ADD A,#1
; MOV P1,A
; JB DQ,cADD
; sjmp $
;*/
MOV R7,#16 ;忽略前16位系統識別碼 (即地址碼)
AAQQ: JNB DQ,$; ;通過低電平段
;JB DQ,[ DISCUZ_CODE_1 ]nbsp; ;以下6行代碼可以用本行替換,但這樣容易出現死機。
MOV R6,#255
CTN2: JNB DQ,DER7 ;等待有效低電平到來,避開 結果碼 高電平
MOV BYT_DLY,#3 ;42uS
ACALL DELAY ;調用42微秒延時子程序,延時太短,計數器R6不夠大,延時太長,會錯過最佳檢測點
DJNZ R6,CTN2
LJMP EXIT ;防止死機
DER7: DJNZ R7,AAQQ
MOV R1,#DA_BUF ;設定1AH為起始RAM區
MOV R2,#2 ;接收從DA_BUF到DA_BUF+1的2個內存,用于存放操作碼 (即數據碼) 和操作反碼
PP: MOV R3,#8 ;每組數據為8位
JJJJ: JNB DQ,[ DISCUZ_CODE_0 ]nbsp; ;等待通過數據碼的低電平信號,等高電平到來后出去;
MOV BYT_DLY,#13 ;834uS
ACALL DELAY ;高電平開始后用840(560<t<1125,)微秒的時間尺去判斷信號此時的高低電平狀態
MOV C,DQ ;將DQ引腳此時的電平狀態0或1存入C中
JNC UUU ;如果為0就跳轉到UUU
;JB DQ,[ DISCUZ_CODE_1 ]nbsp; ;以下6行代碼可以用本行替換,但這樣容易出現死機。
MOV R6,#255
CTN3: JNB DQ,UUU ;等待有效低電平到來,避開 結果碼 高電平
MOV BYT_DLY,#3 ;42uS
ACALL DELAY ;調用840微秒延時子程序
DJNZ R6,CTN3
LJMP EXIT ;防止死機
UUU: MOV A,@R1 ;將R1中地址的給A
RRC A ;將C中的值0或1移入A中的最低位
MOV @R1,A ;將A中的數暫時存放在R1數值的內存中
DJNZ R3,JJJJ ;接收滿8位換一個內存
INC R1 ;對R1中的值加1,換下一個RAM
DJNZ R2,PP ;接收完8位數據碼和8位數據反碼,存放在1AH/1BH中
MOV A,DA_BUF
CPL A ;對1AH取反后和1BH比較
CJNE A,DA_BUF+1,EXIT ;如果不等表示接收數據發生錯誤,放棄
MOV R7,DA_BUF ;將按鍵的鍵值通過數碼管顯示出來!
ACALL DISP
; CLR P1.0 ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功
; MOV BYT_DLY,#50
; ACALL DELAY
; SETB P1.0 ;蜂鳴器停止
EXIT: SETB EA
RETI
;-------------------------延時子程序---------------------------------
;晶振22.1184M
DELAY: ;誤差 0us
MOV R6,#03H
DL0:
MOV R5,#89H
DJNZ R5,$
DJNZ R6,DL0
RET
;//數碼管顯示,數據由R7傳入
DISP: MOV DPTR #LEDMAP
MOV A,R7
ANL A,#0FH
MOVC A,@A+DPTR
MOV DPTR,#SEG1
CPL A
MOVX @DPTR,A
MOV DPTR,#LEDMAP
mov a,r7
swap a
anl a,#0fh
movc a,@a+dptr
mov dptr,#SEG2
cpl a
movx @dptr,a
mov dptr,#SEG3
mov a,#0ffh
movx @dptr,a
mov dptr,#SEG4
movx @dptr,a
ret
ledmap: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,
END
復制代碼
作者:
xuyaqi
時間:
2021-6-7 19:26
要看懂,先要理解數碼管顯示原理。
作者:
angmall
時間:
2021-6-7 20:24
軟件都是基于硬件條件編寫的,沒有原理圖 …不知道可不可以幫到你……
;//數碼管顯示,數據由R7傳入 數碼管靜態顯示電路 總線方式驅動
DISP: MOV DPTR #LEDMAP ;指針指向 數碼管段碼表
MOV A,R7 ;將數據由R7放入累加器
ANL A,#0FH ;清除高 4 位
MOVC A,@A+DPTR ;將數碼管段碼表 轉換數據放入累加器
MOV DPTR,#SEG1 ;指針指向數碼管1 0FFECH
CPL A ;將 累加器 A中的值按位取反
MOVX @DPTR,A ;輸出段碼
MOV DPTR,#LEDMAP ;指針指向 數碼管段碼表
MOV A,R7 ;將數據由R7放入累加器
SWAP A ;累加器 A 中 低四位與高四位內容交換
ANL A,#0FH ;清除高 4 位
MOVC A,@A+DPTR ;將數碼管段碼表 轉換數據放入累加器
MOV DPTR,#SEG2 ;指針指向數碼管2 0FFEDH
CPL A ;將 累加器 A中的值按位取反
MOVX @DPTR,A ;輸出段碼
MOV DPTR,#SEG3 ;指針指向 數碼管3 0FFEEH
MOV A,#0FFH ;將數據0FFH 放入累加器 消隱
MOVX @DPTR,A ;輸出段碼
MOV DPTR,#SEG4 ;指針指向 數碼管4 0FFEFH
MOVX @DPTR,A ;輸出段碼
RET
LEDMAP: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h, ;共陰極數碼管段碼表
復制代碼
作者:
hz_dyg
時間:
2021-6-8 15:04
為什么還要匯編?如果純粹學習,倒是可以研究一番
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1