?? 21-0 紅外發射接收程序.asm
字號:
;//****************************************************************
;//*文件名:紅外發射接受實驗程序
;//*創建人:巫升輝
;//*2005.9.25
;功能:程序由定時器T0產生1HZ的調制信號由.P1.0產生,T1口對紅外接收頭
;接受的信號進行處理并送顯示,注:一般紅外線接受模塊的解調信號頻率
;為38KHZ,當它接受到38khz左右的紅外信號時將輸出低電平,但輸出低電
;平的時間是有限制的如(100ms),也就是說發送數據的低電平寬度是有限的。
;接線:p1.0接八位邏輯輸出電平的任意一個口,同時接到紅外發射頭的調
;制信號輸入口將產生的38KHZ信號接如紅外發射頭的載波輸入口,在將紅外
;接受頭的的輸出端接到T1, RXD----DIN TXD----CLK。
;//****************************************************************
ConterSoft EQU 50H ;定時計數值
;LEDBuf EQU 30H
;TEMP EQU 40H
DBUF DATA 030H
BIT_COUNT DATA 040H
TIMER DATA 041H
DATA_IN DATA 020H
DATA_OUT DATA 021H
CLK BIT P1.6
DAT BIT P1.7
ORG 0000H
ljmp MAIN
ORG 000BH
LJMP INT_T0 ;T0中段入口
MAIN:
MOV TMOD,#51H ;T0定時模式1/T1計數模式0
MOV TL0,#00H ;11.0592晶振
MOV TH0,#4CH
mov TH1, #0 ;根據波特率設置的初值
mov TL1, #0
MOV ConterSoft,#10;改變立即數則改變調制信號的發生頻率觀查實驗效果
SETB ET1
setb TR1 ; 開始記數
SETB TR0
SETB ET0
SETB EA
Mloop:
ACALL TOBCD
ACALL DISPLAY
ACALL DELAY
Ljmp MLoop
INT_T0:
CLR EA
PUSH ACC
MOV A,ConterSoft
DEC A
MOV ConterSoft,A
JNZ BACK ;(10次定時)軟件計數,次數不到返回,不為零時則轉移
CPL P1.0
MOV ConterSoft,#10 ;改變立即數則改變調制信號的發生頻率觀查實驗效果
BACK: MOV TL0,#00H
MOV TH0,#4CH
SETB ET0 ;允許T0中斷
SETB TR0
SETB EA
POP ACC
RETI
;雙字節十六進制整數轉換三字節BCD碼
TOBCD:;===================
MOV R7,TL1
MOV R6,TH1
HB2: CLR A ;BCD碼初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;轉換雙字節十六進制整數
HB3: MOV A,R7 ;從高端移出待轉換數的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD碼帶進位自身相加,相當于乘2
ADDC A,R5
DA A ;十進制調整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;雙字節十六進制數的萬位數不超過6,不用調整
DJNZ R2,HB3 ;處理完16bit
;BCD碼拆開送緩存
DisplayResult:
mov a, R3
anl a,#0fh
mov DBUF+4,A ;R3低四位送緩存0
mov a, R4
swap a
anl a,#0fh
mov DBUF+3,a ;R4高四位送緩存1
mov a, R4
anl a,#0fh
mov DBUF+2,a ;R4低四位送緩存2
mov a, R5
swap a
anl a,#0fh
mov DBUF+1,a ;R5高四位送緩存3
mov a, R5
anl a,#0fh
mov DBUF,a ;R5低四位送緩存4
ret
DELAY: LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
RET
DELAY1:MOV R1, #0
DLOOP: DJNZ R1, DLOOP
DJNZ R0, DELAY1
RET
Delay2:
mov r5, #2
A0: mov r6, #20
A1: mov r7, #50
DelayLoop:
NOP
NOP
djnz r7, DelayLoop
djnz r6, A1
djnz r5, A0
RET
DISPLAY:
ANL P2,#00H ; CS7279有效
MOV DATA_OUT,#10100100B ; A4H,復位命令
CALL SEND
MOV DATA_OUT,#10000000B ; 在第一個數碼管上顯示
CALL SEND
MOV DATA_OUT,DBUF
CALL SEND
MOV DATA_OUT,#10000001B ; 譯碼方式0,2位顯示在第二個數碼管上顯示
CALL SEND
MOV DATA_OUT,DBUF+1
CALL SEND
MOV DATA_OUT,#10000010B ; 譯碼方式0,3位顯示在第三個數碼管上顯示
CALL SEND
MOV DATA_OUT,DBUF+2
CALL SEND
MOV DATA_OUT,#10000011B ; 譯碼方式0,4位顯示在第四個數碼管上顯示
CALL SEND
MOV DATA_OUT,DBUF+3
CALL SEND
MOV DATA_OUT,#10000100B ; 譯碼方式0,5位顯示在第五個數碼管上顯示
CALL SEND
MOV DATA_OUT,DBUF+4
CALL SEND
RET
SEND: MOV BIT_COUNT,#8 ; 發送字符子程序
ANL P2,#00H
CALL LONG_DELAY
SEND_LOOP:MOV C,DATA_OUT.7
MOV DAT,C
SETB CLK
MOV A,DATA_OUT
RL A
MOV DATA_OUT,A
CALL SHORT_DELAY
CLR CLK
CALL SHORT_DELAY
DJNZ BIT_COUNT,SEND_LOOP
CLR DAT
RET
LONG_DELAY: MOV TIMER,#80 ;延時約200US
DELAY_LOOP: DJNZ TIMER,DELAY_LOOP
RET
SHORT_DELAY: MOV TIMER,#6 ;延時約20US
SHORT_LP: DJNZ TIMER,SHORT_LP
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -