| INIT_COM: | | | | MOV SCON,#50H | ;串口方式1工作,8位数据位,1位停止位,无奇偶校验 | | | MOV PCON,#80H | ;SMOD=1,波特率增倍 | | | MOV TMOD,#20H | ;波特率设置,fOSC=12MHz,波特率=2*2400,N=0F3H | | | MOV TH1,#0F3H | | | | MOV TL1,#0F3H | | | | SETB TR1 | ;启动定时器T1 | | | RET | | | RS232: | | | | MOV R0,#30H | ;缓冲区首地址30H→R0 | | | MOV R5,#22 | ;发送数据长度→R5,11*2=22 | | LOOP: | | | | MOV A,@R0 | ;取数据→A | | | MOV SBUF,A | ;数据→SBUF | | WAIT: | | | | | JBC TI,CONT | ;判断发送中断标志,是1则转到CONT,并清TI | | | SJMP WAIT | | | CONT: | | | | INC R0 | | | | DJNZ R5,LOOP | | | | RET | | 4上位机串口接收程序设计 上位机接收数据所用C语言程序包括初始化子程序和接收子程序。各子程序分别如下: | void init_com1(void)/*初始化子程序*/ | | { | | outportb(0x3fb,0x80);/*线控制寄存器高位置1,使波特率设置有效*/ | | outportb(0x3f8,0x18);/*波特率设置,与单片机波特率一致为4800bps*/ | | outportb(0x3f9,0x00); | | outportb(0x3fb,0x03);/*线控制寄存器设置,8位数据位,1位停止位,无奇偶校验*/ | | outportb(0x3fc,0x03);/*Modem控制寄存器设置,使DTR和RTS输出有效*/ | | outportb(0x3f9,0x00);/*设置中断允许寄存器,禁止一切中断*/ | | } | | void receive_data(void)/*查询方式接收数据子程序*/ | | { | | while(!kbhit()) | | { | | | while(!(inportb(0x3fd)&0x01));/*若接收寄存器为空,则等待*/ | | | printf("%x ",inportb(0x3f8));/*读取结果并显示*/ | | } | | getch(); | | } | 5结论 本文给出的硬件和软件均经过实践检验,并且已经按照PC/104总线制作成数据采集卡,使用很方便,能够满足对数据采样频率要求不是特别高的应用场合。 本新闻共 4页,当前在第 3页 [1] [ 2] [ 3] [ 4] |