|
发表于 2011-6-16 12:20:26
|
显示全部楼层
我最近用at89c2051单片机做了无线遥控下车的控制部分,就是说以单片机来代替编码解码芯片来编码解码,也是采用315MHZ的无线收发模块,
下面是我的程序,你有好方法可以分享一下吗?这个是我们老师交给我们的项目作业。
发射程序:XIN BIT P3.0 ;发射口
LED BIT P3.7
ORG 0000H
LJMP START
ORG 0030H
;;;;;;;;;;;;;;;;;;;;初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START: MOV P1,#0FFH
CLR C
CLR XIN ;315Mhz发射模块是NPN管,所以先将它置底
MOV R5,#08H
MOV R1,#03H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;编码格式采用 :引导码+8位数据码
; 引导码:1ms高电平,400us低电平,400us高电平
;低电平: 140us低电平,460us高电平
;高电平: 500us低电平,100us高电平
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN: SETB LED
KEY: JB P1.6,KEY1 ;左
CLR LED
MOV A,#0CCH
AJMP SEND
KEY1: JB P1.7,KEY3 ;右
CLR LED
MOV A,#0DDH
AJMP SEND
KEY3: JB P1.5,KEY2 ;后退
CLR LED
MOV A,#0BBH
AJMP SEND
KEY2: JB P1.4,MAIN ;前进
CLR LED
MOV A,#0AAH ;编码值
AJMP SEND
;;;;;;;;;;;;;;;;引导头部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SEND: SETB P3.0
MOV R3,#2
M1: MOV R2,#250
DJNZ R2,$
DJNZ R3,M1
CLR P3.0
M2: MOV R2,#200
DJNZ R2,$
SETB P3.0
MOV R2,#200
DJNZ R2,$
CLR P3.0
;;;;;;;;;;;;;;;;数据码值部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SS: RLC A
JC ONE
CLR P3.0 ;发0
M3: MOV R2,#230
DJNZ R2,$
SETB P3.0
M4: MOV R2,#70
DJNZ R2,$
LJMP OUT
ONE: CLR P3.0 ;发1
M6: MOV R2,#50
DJNZ R2,$
SETB P3.0
M5: MOV R2,#250
DJNZ R2,$
LJMP OUT
OUT: DJNZ R5,SS ;一个字节码值是否发完
MOV R5,#08H
CLR P3.0
ACALL DELAY ;延时约5ms
LJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY:
MOV R6,#7
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
END
解码程序:
XIN BIT P3.7
LED BIT P3.0
CUN EQU 33H
ORG 0000H
LJMP START
ORG 0030H
;;;;;;;;;;;;;;;;;;;初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START: MOV P1,#00H
mov p3,#0ffh
; MOV TMOD,#05H
MOV R5,#08H
MOV 33H,#00H
;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;引导码开始解码;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN: MOV P1,#00H
JIEMA: MOV R3,#250 ;
WAIT_0: JNB XIN,ST_L0
NOP
NOP
DJNZ R3,WAIT_0 ;超过1040us无效
lJMP ERR_OUT
ST_L0: MOV A,R3
SUBB A,#167
JNC ERR_OUT ;低于900u无效
MOV R3,#100
WAIT_1: JB XIN,ST_L1
NOP
NOP ;大于440us无效
DJNZ R3,WAIT_1
lJMP ERR_OUT
ST_L1: MOV A,R3
SUBB A,#67 ;小于360无效
JNC ERR_OUT
MOV R3,#100
WAIT_2: JNB XIN,ST_L2
NOP
NOP
DJNZ R3,WAIT_2
lJMP ERR_OUT
ST_L2: MOV A,R3
SUBB A,#67
JNC ERR_OUT
;;;;;;;;;;;码值解码部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SS: MOV R3,#100 ;超过500US无效
WAIT_3: JB XIN,SM_L1
NOP
NOP
DJNZ R3,WAIT_3
JMP ERR_OUT
SM_L1: MOV A,R3 ;小于50us无效
SUBB A,#92
JNC ERR_OUT
MOV A,R3
SUBB A,#67 ;200US比较
JNC ONE
LJMP ZERO
;;;;;;;;;;;;;;;;;;编码1;;;;;;;;;;;;;;;;;;;;;;;;;;;
ONE: MOV R3,#100
WAIT_4: JNB XIN,SM_11
NOP
NOP
DJNZ R3,WAIT_4
JMP ERR_OUT
SM_11: MOV A,R3
SUBB A,#50
JNC ERR_OUT
LJMP CUNCHU
;;;;;;;;;;;;;;;;;;;编码0;;;;;;;;;;;;;;;;;;;;;;;;;;
ZERO: MOV R3,#50
WAIT_5: JNB XIN,SM_01
NOP
NOP
DJNZ R3,WAIT_5
JMP ERR_OUT
SM_01: MOV A,#10
SUBB A,R3
JNC ERR_OUT
CLR C
;;;;;;;;;;;;;;;;;;;;解码值存储;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CUNCHU: MOV A,CUN
RLC A
MOV CUN,A
DJNZ R5,SS
MOV R5,#08H
LJMP M00
ERR_OUT:SETB LED
MOV R5,#08H
MOV CUN,#00H
; MOV P1,#00H
LJMP MAIN
M00:
;;;;;;;;;;;;;;;码值对应功能子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GONGNENG:
MOV A,CUN
ZUO: CJNE A,#0CCH,YOU
CLR LED
CLR P1.0
CLR P1.1
SETB P1.2
CLR P1.3
ACALL DELAY
AJMP JIEMA
YOU: CJNE A,#0DDH,HOU
CLR LED
CLR P1.0
CLR P1.1
CLR P1.2
SETB P1.3
ACALL DELAY
HOU: CJNE A,#0AAH,QIAN
CLR LED
SETB P1.1
CLR P1.0
ACALL DELAY
LJMP JIEMA
QIAN: CJNE A,#0BBH,M11
CLR LED
SETB P1.0
CLR P1.1
CLR P1.2
CLR P1.3
ACALL DELAY
AJMP JIEMA
LJMP JIEMA
M11:
LJMP MAIN
DELAY:
MOV R7,#100
D1: MOV R6,#100
DJNZ R6,$
DJNZ R7,D1
RET
END |
|