?? host.asm
字號:
/***************************************************************
*文件名: host.asm
*版權(quán): www.zlgmcu.com
*日期: 16:27 04-3-16
*功能: 多機紅外通信發(fā)送端程序代碼
***************************************************************/
$NOMOD51
$INCLUDE(REG932.INC)
KEY1 EQU P0.0 ;定義KEY1鍵
KEY2 EQU P0.1 ;定義KEY2鍵
INFR EQU P0.3 ;定義紅外發(fā)送引腳
PLLEN BIT TCR20.7
;------------------------------
ORG 0000H
AJMP MAIN
ORG 003BH
AJMP KEY_ISR
;------------------------------
ORG 0080H
MAIN:
MOV P0M1,#0x00 ;定義P0口屬性
MOV P0M2,#0x00
MOV P2M1,#0x40 ;定義P2.6(OCA)口屬性
MOV P2M2,#0x40
ACALL CCU_INIT ;CCU初始化
ACALL KEYISR_INIT ;鍵盤中斷初始化
LOOP:
ACALL POWER_DOWN ;完全掉電
AJMP LOOP
RET
;-------------------------------
;功能:CCU初始化
;-------------------------------
CCU_INIT:
MOV TOR2H,#0x02 ;CCU定時器重裝值
MOV TOR2L,#0x05
MOV OCRAH,#0x01 ;(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比為50%
MOV OCRAL,#0x02
MOV TCR21,#0x85 ;PLL預(yù)分頻為5+1
MOV CCCRA,#0x01 ;非反相的PWM在比較匹配時置位,在CCU定時器向下溢出時清0
SETB PLLEN ;啟動PLL
SETB OCA
JNB PLLEN,$
MOV TCR20,#0x82 ;設(shè)置輸出模式,非反相PWM
RET
;--------------------------------
;功能:鍵盤中斷初始化
;--------------------------------
KEYISR_INIT:
MOV KBMASK,#0x03 ;設(shè)置P01->P00為中斷源
MOV KBCON,#0x00 ;清除鍵盤中斷標志
SETB EKBI ;鍵盤中斷允許
SETB EA ;開中斷
RET
;--------------------------------
;功能:完全掉電
;--------------------------------
POWER_DOWN:
MOV PCONA,#0xFF ;外部模塊掉電
MOV PCON,#0x03 ;進入完全掉電模式
RET
;--------------------------------
;功能:按鍵判斷程序
;--------------------------------
READ_KEY:
MOV A,#12
ACALL DELAYMS ;延時12MS
JNB KEY1,KEY1_DOWN ;判斷KEY1是否按下
JNB KEY2,KEY2_DOWN ;判斷KEY2是否按下
JMP NOKEY_DOWN
KEY1_DOWN: ;KEY1按下
JNB KEY1,$ ;等待KEY1為1
ACALL START_DEVICE01 ;發(fā)送啟動設(shè)備1(燈)的指令
JMP NOKEY_DOWN
KEY2_DOWN: ;KEY2按下
JNB KEY2,$ ;等待KEY2為1
ACALL START_DEVICE02 ;發(fā)送啟動設(shè)備2(門/窗)的指令
JMP NOKEY_DOWN
NOKEY_DOWN:
RET
;--------------------------------
;功能:啟動外部設(shè)備1
;--------------------------------
START_DEVICE01:
ACALL SEND_HEAD ;發(fā)送幀頭
MOV A,#0x01
ACALL SEND_DATA ;發(fā)送數(shù)據(jù)
RET
;--------------------------------
START_DEVICE02:
ACALL SEND_HEAD ;發(fā)送幀頭
MOV A,#0x02
ACALL SEND_DATA ;發(fā)送數(shù)據(jù)
RET
;--------------------------------
;功能:發(fā)送幀頭
;--------------------------------
SEND_HEAD:
CLR INFR ;拉低INFR
MOV A,#50
ACALL DELAYMS ;延時50ms
SETB INFR ;拉高INFR
MOV A,#10
ACALL DELAYMS ;延時10ms
CLR INFR ;拉低INFR
MOV A,#1
ACALL DELAYMS ;延時1ms
SETB INFR ;拉高INFR
MOV A,#1
ACALL DELAYMS ;延時1ms
CLR INFR ;拉低INFR
MOV A,#1
ACALL DELAYMS ;延時1ms
RET
;--------------------------------
;功能:通過紅外載波發(fā)送數(shù)據(jù)
;入口參數(shù):R6
;--------------------------------
SEND_DATA:
MOV R7,#8 ;循環(huán)次數(shù)
START_SEND:
MOV A,R6
RLC A ;將最高位移入A
JC BIT1 ;當(dāng)C為1時,跳至BIT1
JMP BIT0 ;跳至BIT0
BIT1:
SETB INFR ;INFR置高
AJMP SENDBIT
BIT0:
CLR INFR ;INFR置0
MOV R6,A ;將A保存進R6
SENDBIT:
ACALL DELAY400US ;延時400us
DJNZ R7,START_SEND
RET
;---------------------------------
;功能:延時100us(7.373MHz時)
;---------------------------------
DELAY100US:
MOV R5,#182
LOOP1:
DJNZ R5,LOOP1
RET
;---------------------------------
;功能:延時400us
;---------------------------------
DELAY400US:
MOV R3,#4
LOOP4:
ACALL DELAY100US
DJNZ R3,LOOP4
RET
;---------------------------------
;功能:ms級延時
;入口參數(shù):A
;---------------------------------
DELAYMS:
MOV R3,A
LOOP_N:
MOV R2,#10
LOOP10:
ACALL DELAY100US
DJNZ R2,LOOP10
DJNZ R3,LOOP_N
RET
;---------------------------------
;功能:鍵盤中斷服務(wù)程序
;---------------------------------
KEY_ISR:
CLR EA ;關(guān)中斷
MOV PCONA,#0x00 ;外部功能模塊上電
ACALL CCU_INIT ;CCU初始化
MOV A,#10
ACALL DELAYMS ;延時10ms
ACALL READ_KEY ;調(diào)用判斷按鍵子程序
MOV KBCON,#0x00 ;清中斷標志位
MOV A,#50
ACALL DELAYMS ;延時50ms
SETB EA ;開中斷
RETI
;--------------------------------
END
;--------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -