?? ir.asm
字號:
;參考程序A:IR.ASM:
;此程序接收紅外發射過來的數據,解碼后由CPU讀取并顯示在LED數碼管上.
;紅外遙控器 IR.ASM 2005.9.21
$include (c8051f020.inc) // SFR declarations
PPA EQU 8000H ;8255的端口地址,8255驅動數碼管顯示溫度值
PPB EQU 8001H ;8255驅動數碼管顯示LM74測量出的溫度值
PPC EQU 8002H ;LM74是高精度數字式溫度傳感器
CWR EQU 8003H
DataPort EQU 8400H ;紅外數據接收口
BUZ EQU P3.5 ;P3.5驅動蜂鳴器
ORG 0
AJMP main
ORG 93H ; INT6中斷入口
AJMP INT6_ISR
ORG 100H
INITEXINT67: ;初始化外部中斷INT6
ORL EIE2,#10H ;允許外部中斷6
RET
;外部中斷6的中斷服務程序
INT6_ISR:
ANL P3IF,#NOT(40H) ;清外部中斷6標志
MOV R1,#01H ;置允許讀標志
RETI
MAIN:MOV WDTCN,#0deH ;無效看門狗
MOV WDTCN,#0adH
LCALL PORT_Init ;輸入/輸出口初始化
LCALL INITEXINT67 ;初始化外部中斷INT6
SETB EA ;開總中斷
MOV R1,#00H
LOOP:
CJNE R1,#01H,LOOP ;是否允許讀紅外數據
MOV DPTR,#DataPort
MOVX A,@DPTR ;讀紅外數據
CPL A
ANL A,#0FH
MOV 79H,A ;保存收到的紅外數據 CLR BUZ ;蜂鳴器響
LCALL Del0
LCALL Del0
SETB BUZ ;蜂鳴器滅
MOV R1,#0
LCALL DISPLED
AJMP LOOP
;配置交叉開關和輸入/輸出口
PORT_Init:
MOV XBR2,#40H ;使能交叉開關和弱上拉
ORL P74OUT,#0ffH ;使能P4,P5,P6,
ORL EMI0CF,#2cH ;EMIF工作在地址/數據復用方式,只用外部存儲器,
;ALE高/低脈寬占1個SYSCLK周期
ORL EMI0TC,#6cH ;地址建立/保持時間占0個SYSCLK周期,
;/WR和/RD占12個SYSCLK周期
RET
;顯示功能子程序:被顯示的數據在79H中.
DISPLED: ACALL C8255 ;8255初始化
MOV R2,#01H
MOV R5,#1
MOV R0,#79H ;顯示一位,其值在79H中
DSP1: MOV DPTR,#PPB
MOV A,R2
MOVX @DPTR,A
MOV A,@R0
ANL A,#0FH
DSP2: MOV DPTR,#BCD
MOVC A,@A+DPTR
MOV B,A
MOV DPTR,#PPC
MOV A,R5
CJNE A,#3,SS0
MOV A,B
ADD A,#80H
AJMP SS1
SS0: MOV A,B
SS1: MOVX @DPTR,A
ACALL DEL0
MOV A,R2
RL A
MOV R2,A
INC R0
DJNZ R5,DSP1
RET
BCD: DB 3FH,06H,5BH,4FH ;顯示數值,0,1,2,3
DB 66H,6DH,7DH,07H ;4,5,6,7
DB 7FH,6FH,77H,7CH ;8,9,A,B
DB 39H,5EH,79H,71H ;C,D,E,F
DB 73H,3EH,31H,6EH ;P,U,Z,Y
DB 0FFH,00H ;8,滅
C8255: MOV A,#80H ; 設置PC口,PB口為輸出,PA口為輸入
MOV DPTR,#CWR ;#8003H為8255的控制寄存器地址
MOVX @DPTR,A
RET
DEL0: MOV R6,#3FH ;延時子程序
TM: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,TM
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -