问大家一个51单片机程序的问题。

有两个51单片机,第一个单片机里有一个变量uint a,我如何通过nrf905无线模块用第二个单片机去控制变量a的大小,能使a为三个不同的数就行,比如 a=100 a=1000 a=10000. 不用连续,这程序该怎么写啊?当然最好详细写一下,提一下大体思路也行啊!

部分程序代码:
#include "C8051F020.h" //包含C8051F020硬件信息的头文件
#include "absacc.h" //包含绝对地址访问信息的头文件
#include"math.h"
sbit LCD_EP=P2^4;
sbit LCD_RW=P2^2;
sbit LCD_RS=P2^0;
#define LCD_Data_BUS_Out P7
#define LCD_Data_BUS_In P7

#define key P5
unsigned char keyval;
int i;
typedef unsigned int uint;
code unsigned char LCD_InitialCode[]=;

unsigned char temp;

void Reset_Sources_Init() //禁止看门
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}

void Port_IO_Init() //交叉开关配置
{

//P74OUT = 0xC0; //p7推挽
P2MDOUT = 0xff; //p2推挽
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40; //交叉开关使能

}

void Oscillator_Init() //振荡器初始化,使用片外晶体振荡器
{
uint i = 0;
OSCXCN = 0x67; //使用片外晶体谐振器,f>6.7MHz
for (i = 0; i < 3000; i++); //Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0); //检测外部振荡器是否有效
OSCICN = 0x08; //选择外部振荡器作为系统时钟,禁止内部时钟
}

//定时器1初始化函数,定时器1作为波特率发生器
void Timer_Init()
{
CKCON = 0x10; //C/T1直接使用系统时钟作为时钟源
TCON = 0x40; //C/T1允许
TMOD = 0x20; //C/T1方式2(8位重装填计数)
TL1 = 0xFA; //C/T1波特率115200计数值
TH1 = 0xFA;
}

void Init_Device() // 设备初始化函数,在主程序中调用Init_Device()
{
Reset_Sources_Init(); //复位源初始化
Port_IO_Init(); //端口初始化
Oscillator_Init(); //时钟源初始化
Timer_Init(); //定时器1初始化

}

有东西就发出来分享啊,我就直接写下面了。

ORG 0000H
SJMP MAIN
ORG 0030H

MAIN :
MOV SP,#60H
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV R2,#00H
MOV R3,#00
MOV R4,#00
MOV B,#00H
MOV 33H,#00H;十位
MOV 34H,#00H;个位
MOV 35H,#00H;高四位
KEYCODE EQU 35H
S0: LCALL PRESSKEY ;长调用有无按键按下

S1: LCALL DISPLAY ;长调用数字处理程序段
LJMP S0 ;返回S0

;******************* 有无按键按下
PRESSKEY:
MOV P1,#0F0H
MOV A,P1
CJNE A,#0F0H,D2
LJMP D5
D2: LCALL DELAY10MS

MOV A,P1
CJNE A,#0F0H,KEYVALUE
LJMP D5
;*********************按键键值判断
KEYVALUE:MOV 33H,#00H
mov 34H,#00H
MOV P1,#0F0H
MOV A,P1
ANL A,#0F0H ;ANL与操作
MOV B,A
MOV P1,#0FH
MOV A,P1
ANL A,#0FH ;ANL与操作
ORL A,B ;ORL或操作
MOV KEYCODE,A

MOV R3,#00
D4: MOV A,R3
MOV DPTR,#TABBLE2
MOVC A,@A+DPTR
CJNE A,KEYCODE,D3
MOV A,R3
MOV R2,A
LJMP D5
D3: INC R3
LJMP D4
D5: RET
;***********************************数字处理程序段
DISPLAY:
MOV A,R2
CJNE A,#10,CMP1
CMP1: JC LOOP2
LJMP LOOP3
LOOP2: MOV A, R2
MOV 34H,A
LJMP DISPLAY1

LOOP3: MOV B,#10
DIV AB
MOV 33H,A
MOV A,B
MOV 34H,A
LJMP DISPLAY1
;**********************************************************显示程序段
DISPLAY1:

MOV DPTR,#TABBLE1
MOV A,34H
MOVC A,@A+DPTR
MOV P2,#07FH
MOV P0,A
ACALL DELAY5MS

MOV DPTR,#TABBLE1
MOV A,33H
MOVC A,@A+DPTR
MOV P2,#0BFH
MOV P0,A
ACALL DELAY5MS
RET ;子程序返回
;*****************************************************
DELAY:
;延时子程序
MOV R5,#100
DELAY0: LCALL DELAY10MS
DJNZ R5,DELAY0
LJMP HUJK

DELAY10MS:MOV R4,#2
DELAY2 : LCALL DELAY5MS
DJNZ R4,DELAY2
LJMP HUJK
DELAY5MS:
MOV R6,#25
DELAY1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY1

HUJK : RET ;子程序返回

;***************************************************
TABBLE1:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,08H
;?******************************************************
TABBLE2:
DB 0EBH,77H,7BH,7DH,0B7H,0BBH,0BDH,0D7H,0DBH,0DDH,7EH,0BEH,0DEH,0EEH,0E7H,0EDH,0FFH
;*****************************************************
END追问

谢谢了,我好好研究研究,汇编我一点不懂,还是来C吧。问一下 我的这个想法真的能做到吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-08
你可以在一个单片机上利用串口将控制数据用NRF905发送到另一个单片机,另一个单片机接收到控制数据之后判断接受到的数据,然后再设置变量去相应的更改或者控制变量a的大小。其实这就是一个无线遥控
第2个回答  2011-03-08
用接收的数更新a
第3个回答  2011-03-08
加油追问

呵呵

相似回答