?? rx.asm
字號:
;***************************************
;* 接收控制系統(tǒng)軟件程序(RX.ASM)
;***************************************
;
;*************************************************
LAMPBLAK EQU P1.4 ;背光燈控制,=0時開,=1時關.
CS EQU P1.5 ;液晶使能,=1操作,=0禁止.
SID EQU P1.6 ;液晶串行數(shù)據(jù)輸入口
SCLK EQU P1.7 ;液晶串行操作時鐘口
;***************************************
; 主程序和中斷程序入口
; ***************************************
ORG 0000H ; 復位地址
LJMP START
ORG 0003H ; 外中斷0中斷入口地址
RETI
ORG 000BH ; 定時器T0中斷入口地址
RETI
ORG 0013H ; 外中斷1中斷入口地址
RETI
ORG 001BH ; 定時器T1中斷入口地址
RETI
ORG 0023H ; 串行口中斷入口地址
RETI
ORG 002BH ; 定時器T2中斷入口地址
RETI
;
;***************************************
; 主程序
; ***************************************
START: MOV SP,#60H ;設堆棧
CLR CS ;液晶操
LCALL SETUP ;LCD初始化
LCALL LOGON ;開機顯示畫面
NOP
MAIN: JNB P3.7,RX ;
AJMP MAIN
NOP
NOP
LJMP START ;設置軟件陷阱
;
;***************************************
; 紅外線遙控信號接收程序
; ***************************************
RX: JNB P3.7,INT0SERVE1;確認中斷
RXOUT : LJMP MAIN
INT0SERVE1: CLR A
MOV DPH,A ;清DPTR
MOV DPL,A
INT0SERVE2: JB P3.7,INT0SERVE3;用DPTR對第一個低電平計時 2
INC DPTR ; 2
NOP ; 1
NOP ; 1
AJMP INT0SERVE2 ;循環(huán)周期是8US 2
INT0SERVE3: MOV A,DPH ;DPTR的高8位放入A中
JZ RXOUT ;不為0,說明DPL有進位則8*255=2MS,即是第一個脈沖。為0,說明小于2MS是一干擾。
CLR A
INT0SERVE4: INC A ;脈沖個數(shù)加1
INT0SERVE5: JNB P3.7,INT0SERVE5;等待低電平
MOV R1,#06H ;幀間高電平寬度判斷定時值,即一幀結束的判斷
INT0SERVE6: JNB P3.7,INT0SERVE4;低電平時轉脈沖個數(shù)加1
LCALL DELAY513US ;延時513US
DJNZ R1,INT0SERVE6
DEC A ;超過3MS判定為一幀結束
DEC A
JZ FUNCTION0 ;為0則轉功能0
DEC A
JZ FUNCTION1 ;為0則轉功能1
DEC A
JZ FUNCTION2 ;為0則轉功能2
DEC A
JZ FUNCTION3 ;為0則轉功能3
DEC A
JZ FUNCTION4 ;為0則轉功能4
DEC A
JZ FUNCTION5 ;為0則轉功能5
NOP
NOP
LJMP RXOUT ;返回
FUNCTION0: CPL P0.2
LJMP RXOUT ;返回
FUNCTION1: CPL P3.3
LJMP RXOUT ;返回
FUNCTION2: CPL P3.4
LJMP RXOUT ;返回
FUNCTION3: CPL P0.2
LJMP RXOUT ;返回
FUNCTION4: CPL P3.3
LJMP RXOUT ;返回
FUNCTION5: CPL P3.4
LJMP RXOUT
;
;***************************************
; 延時513US程序
; ***************************************
DELAY513US: MOV R5,#254
DELAY513US1: DJNZ R4,DELAY513US1
RET
;**********以下液晶開機顯示程序**************
;
;***************開機顯示畫面***********************
LOGON: MOV A,#80H ;第一行左第一個字開始
LCALL WRITE_COM
MOV DPTR,#CHINESE ;WORD 16*16點陣TEST
LCALL WRITE_HZ
MOV A,#90H ;第二行左第一個字開始
LCALL WRITE_COM
MOV DPTR,#CHINESE1 ;WORD 16*16點陣TEST
LCALL WRITE_HZ
CLR LAMPBLAK ;開背光燈
LCALL DELAY5S ;顯示5秒
SETB LAMPBLAK ;關背光燈
RET
;**********初始化程序*************
SETUP:
MOV A,#01H ;CLEAR DISPLAY
LCALL WRITE_COM
MOV A,#00110000B ;FUNCTION SETTING
LCALL WRITE_COM
MOV A,#00000010B ;DDRAM SET TO '00H'
LCALL WRITE_COM
MOV A,#00000100B ;
LCALL WRITE_COM
MOV A,#00001100B ;DISPLAY ON
LCALL WRITE_COM
MOV A,#00000001B ;CLEARING SCREEN
LCALL WRITE_COM
MOV A,#10000000B ;SET DDRAM ADDRESS
LCALL WRITE_COM
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
RET
;************串行命令寫入子程序****************
;寫入命令字在A中
WRITE_COM:
LCALL DELAY1 ;
SETB CS
PUSH ACC
MOV R0,#8
MOV A,#11111000B
COMM1:
CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM1
POP ACC
MOV R5,A
ANL A,#0F0H
MOV R0,#8
COMM2: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM2
MOV A,R5
SWAP A
ANL A,#0F0H
MOV R0,#8
COMM3: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,COMM3
CLR CS
RET
;
;***********串行數(shù)據(jù)寫入子程序****************
;寫入數(shù)據(jù)字在A中
WRITE_DAT:
LCALL DELAY1
SETB CS
PUSH ACC
MOV R0,#8
MOV A,#11111010B
DATA1: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA1
POP ACC
MOV R5,A
ANL A,#0F0H
MOV R0,#8
DATA2: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA2
MOV A,R5
SWAP A
ANL A,#0F0H
MOV R0,#8
DATA3: CLR C
RLC A
MOV SID,C
CLR SCLK
SETB SCLK
DJNZ R0,DATA3
CLR CS
RET
;
;**************延時子程序**********************
;0.544ms
DELAY1:
MOV R7,#010H
D11: MOV R6,#010H
DJNZ R6,$
DJNZ R7,D11
RET
;0.13s
DELAY:
MOV R1,#00H
D2: MOV R2,#00H
DJNZ R2,$
DJNZ R1,D2
RET
;5.2s
DELAY5S:MOV R3,#28H
DE5S: LCALL DELAY
DJNZ R3,DE5S
RET
;
;************16*8點陣字寫入子程序共16個******************
WRITE_ASCII:
MOV R4,#16
DDDD: CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
DJNZ R4,DDDD
RET
;************16*8點陣字寫入子程序共7個******************
WRITE_ASCII7:
MOV R4,#7
DDDD7: MOV A,@R0
LCALL WRITE_DAT
INC R0
DJNZ R4,DDDD7
RET
;************16*16點陣漢字寫入子程序共7個***********
WRITE_HZ: ;WRITE 7 CHINESE TO LCD
MOV R4,#7
DD: CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
DJNZ R4,DD
RET
;************16*16點陣漢字寫入子程序共2個***********
WRITE_HZ2: ;WRITE 8 CHINESE TO LCD
MOV R4,#2
DD4: CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL WRITE_DAT
DJNZ R4,DD4
RET
;
;*****************************16*8點陣的字符代碼表**********************************
TABLE1: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH,20H
; 0 1 2 3 4 5 6 7 8 9 : ; < = > "不顯"
;**********************************自造字符地址表***********************************
;
;******************"這里是16*16點陣的漢字代碼表"************************************
CHINESE: DW 0DBA0H,0D5E3H,0BDADH,0BAA3H,0D1F3H,0D1A7H,0D4BAH,0DBA0H;—浙江海洋學院—
CHINESE1: DB "遙控接收器---- ";單片機實驗—
;;;;;;;;;;;;;;;;;;;;;;
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -