在淘宝网上买了两块nRF401无线数传模块。
与51系列单片机的接口设计如下:
Nrf401端 51单片机端
TXEN ----- P3.5
POUP ----- P3.6
GND ----- GND
D in ------ TXD(P3.1)
D out ----- RXD(P3.0)
VCC ----- VCC
发射和接收端的接线是一样的。
采用汇编语言编写的程序如下:
发射程序:
;这是一个AT89C51单片机向串口单向发送数据ASCII码的演示程序
;串行口上可以直接接MAX232连接上DB9串口,或者连接nRF401模块
;通讯波特率为9600KBPS,连续发送ASCII字符,延时一秒,0-9的循环。
;连线图 TXEN -- P3.5
; POUP -- P3.6
; GND -- GND
; D in -- TXD (P3.1)
; D out -- RXD (P3.0)
; VCC -- VCC
;发射端的接法与接收端的接法是一样的。
ORG 0000H
MOV SCON,#50H;设置成串口1方式
MOV TMOD,#20H;波特率发生器T1工作在模式2上
MOV PCON,#00H;波特率不翻倍
MOV TH1,#0FdH;预置初值(按照波特率9600BPS预置初值)
MOV TL1,#0FdH;预置初值(按照波特率9600BPS预置初值)
SETB TR1;启动定时器T1
setb p3.5
setb p3.6 ;使txen为1 发射模式 poup为1 工作模式
;以上完成通讯初始化设置
begin:mov a,#00h ;将ascii字符发送到串口去
w2: MOV SBUF,A ;将字符通过串口发送出去
wait: jnb ti,wait
clr ti
PUSH ACC
CPL A
MOV P1,A
POP ACC
inc a
call yshi1
cjne a,#0Ah,w2
JMP begin
yshi1:clr ea
mov r7,#40;延时子程序(精确定时一秒#10)
d1:mov r6,#200
d2:mov r5,#229
djnz r5,$
djnz r6,d2
djnz r7,d1
setb ea
ret
END
;这是一个AT89C51单片机从串口单向接收数据ASCII码的演示程序
;串行口上可以直接接MAX232连接上DB9串口,或者连接nRF401模块
;通讯波特率为9600KBPS,接收ASCII字符
;连线图 TXEN -- P3.5
; POUP -- P3.6
; GND -- GND
; D in -- TXD (P3.1)
; D out -- RXD (P3.0)
; VCC -- VCC
;发射端的接法与接收端的接法是一样的。
ORG 0000H
MOV SCON,#50H;设置成串口1方式
MOV TMOD,#20H;波特率发生器T1工作在模式2上
MOV PCON,#00H;波特率不翻倍
MOV TH1,#0FdH;预置初值(按照波特率9600BPS预置初值)
MOV TL1,#0FdH;预置初值(按照波特率9600BPS预置初值)
SETB TR1;启动定时器T1
CLR p3.5 ;使txen为0 接收模式
setb p3.6 ;使poup为1 工作模式
;以上完成通讯初始化设置
begin: MOV A,SBUF ;将字符通过串口接收
wait: jnb ri,wait
clr ri
cpl a
mov p1,a
JMP begin
END
与2009年7月19日调试成功。
是为记。
