如下是我的下位机的程序:
**********************************************定义部分**************************************************
.DEFINE P_ADC_MUX_Ctrl 0x702b
.DEFINE P_ADC_MUX_DATA 0x702C
.INCLUDE hardware.inc
.ISRAM
.PUBLIC chanal_data
chanal_data:
.DW 2 DUP(?)
.RAM
.var AD_RESULT;
*******************************************初始化,主函数***********************************************
.CODE
.PUBLIC _main
_main:
_L_INIT:
int off;
r1=0x0700;
[P_IOA_Attrib]=r1
[P_IOA_Dir]=r1;
r1=0x0000;
[P_IOA_Data]=r1
r1 = 0x0480;
[P_IOB_Attrib] =r1;
r1 = 0x0400;
[P_IOB_Dir] = r1;
r1 = 0x0000;
[P_IOB_Data] = r1;
r1 = 0x0000; //设置波特率为9600bps
[P_UART_BaudScalarLow] = r1;
r1 = 0x0005;
[P_UART_BaudScalarHigh] = r1;
r1 = 0x0000;
r4 = 0x00C0; //使能输入和输出
[P_UART_Command1] = r1;
[P_UART_Command2] = r4;
r1 = 0xefff; //设置定时器2s
[P_TimerA_Data] = r1;
r1 = 0x0005;
[P_TimerA_Ctrl] = r1;
r1 = 0x1000;
[ P_INT_Ctrl] = r1;
int IRQ;
loop:
R1 = 0x0001;
[P_Watchdog_Clear] = R1 ;
call _F_UART_Read;
goto loop;
***********************************************接受模块********************************************
.public _F_UART_Read
_F_UART_Read:
L_Check_RxRDY:
R1 = 0x0001;
[P_Watchdog_Clear] = R1 ;
r2 = [P_UART_Command2]; //检测是否有数据接收
r2 &= 0x0080;
JZ L_Check_RxRDY;
r1 = [P_UART_Data]; //接收数据
cmp r1,0x0000;
je out;
cmp r1,0x0001;
je out1;
cmp r1,0x0002;
je out2;
jne out3;
out:
r3=0x0100;
[P_IOA_Data]=r3; //做动作
retf;
out1:
r3 = 0x0200;
[P_IOA_Data]=r3; //做动作
retf;
out2:
r3=0x0400;
[P_IOA_Data]=r3; //做动作
retf;
out3:
r3=0x0000;
[P_IOA_Data]=r3; //做动作
retf;
****************************************************************发送模块*******************************************
.PUBLIC _F_UART_Write
_F_UART_Write:
L_Check_TxRDY:
R1 = 0x0001;
[P_Watchdog_Clear] = R1 ;
r2 = [P_UART_Command2];
r2 &= 0x0040;
JZ L_Check_TxRDY;
L_Clear:
R2 = 0x0000
R3=chanal_data
L_Chanal:
CMP R2, 0x0002
JE _tiao;
R2+=1
[P_ADC_MUX_Ctrl] = R2
R1 = 0x0001
[P_ADC_Ctrl] = R1
call L_AD
[R3++]=R1
R1=0
L_DelayLoop:
R4 = 0x0001;
[P_Watchdog_Clear] = R4;
R1+=1
JNZ L_DelayLoop
JMP L_Chanal
_tiao:
retf;
*******************************************AD子模块************************************
L_AD: //AD
R1 = [P_ADC_MUX_Ctrl]
TEST R1,0x8000
JZ L_AD
R1 = [P_ADC_MUX_DATA]
R1 = R1 LSR 4
R1 = R1 LSR 2
[AD_RESULT] = R1
R4 = [AD_RESULT];
[P_UART_Data] = r4;
R1 = R1 LSR 4
R1 = R1 LSR 4
R1 &=0x0003
[AD_RESULT] = R1
R4 = [AD_RESULT];
[P_UART_Data] = r4;
retf;
*************************************************中断***************************************************
.TEXT
.PUBLIC _IRQ1;
_IRQ1:
int off
push r1,r5 to [sp];
call _F_UART_Write;
r1 = 0x1000;
[P_INT_Clear] = r1;
pop r1,r5 from [sp];
int irq;
reti;
硬件部分是通过串口电平转换电路连接61单片机的b07和b10口,请问如果用labview做上位机通过串口发送程序,应该怎么写啊?下位机要接受一个四位16进制的数,应该怎么通过串口来实现啊?急用,谢谢!
[此贴子已经被作者于2006-5-29 10:14:16编辑过]
|