vc6.0 实现串口通信问题
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<dos.h>#include<bios.h>#i...
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#include<windows.h>
#define A8251 0x308
#define Com8255 0x303
#define PA8255 0x300
#define PB8255 0x301
#define PC8255 0x302
#define data51 0x308 /* 8251 的数据口地址*/
#define ctrl51 0x309 /* 8251 的控制口地址*/
#define timer2 0x306 /* 8253 counter 2 port address */
#define timctrl 0x307 /* 8253 control port address */
#define clk00 0x12 /* 8251 的时钟频率为 1.193 Mhz */
#define clk01 0x34de
#define STA_EOC 0x30c
#define ALE_OE 0x30e
#define factor 16
int a=1,b=2,c,k=0;
void ST_8255(void)
{
_outp(Com8255,0x80); /* 初始化 */
_outp(Com8255,0x0d); /* 按位置位复位命令 */
/* 设置 8255 的 PC6=1 来打开 8253 的 GATE2 ,输出方波 */
}
void ST_8253(void)
{
int bps=1200;
int datah;
int datal;
int tp;
tp = 1193182/(16*bps);
datah = (tp >> 8)&0x00ff;
datal = tp & 0x00ff;
_outp(timctrl,0xb6); /* 8253 初始化 */
_outp(timer2,datal);
_outp(timer2,datah);
}
void ST_8251(void)
{
int i;
/* 激活8251 */
_outp(ctrl51,0);
_outp(ctrl51,0x40); /* 8251 内部复位 */
for(i=20;i>0;i--){;}
_outp(ctrl51,0x4e); /* 8251 方式命令 */
for(i=20;i>0;i--){;}
_outp(ctrl51,0x27); /* 8251 工作命令 */
/*i=_inp(ctrl51);*/
/*printf("%d",i);*/
}
int communication2(void)/*接收时时数据进行比较并反馈结果*/
{
int rletter,n,status,j;
status=_inp(ctrl51);
if((status&0x02)!=0)
{
rletter=_inp(data51);
printf("rletter=%d ",rletter);
n=rletter;/* 接收状态 */
if(n>90) /* 继续使用正在使用道路 */
{
if(k==2)
{
c=a;
a=b;
b=c;
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
if((status&0x01)!=0)/*已准备好,则将键入的字符发送出去*/
{
_outp(data51,a+48);
printf("send=%d ",a);
printf("normal change\n");
}
k=0;
}
else
{
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
if((status&0x01)!=0)/*已准备好,则将键入的字符发送出去*/
{
_outp(data51,a+48);
printf("send=%d ",a);
printf("delay change ALARM!!!!!!!!!!!\n");
}
k++;
}
}
else /* 道路使用情况为一般 */
{
c=a;
a=b;
b=c;
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
if((status&0x01)!=0)/*已准备好,则将键入的字符发送出去*/
{
_outp(data51,a+48);
printf("send=%d ",a);
printf("normal change\n");
}
}
}
}
void main(void)
{
int i=5;
int status;
ST_8253();
ST_8251();
ST_8255();
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
{
_outp(data51,'1');
}
for(;;)
{
communication2();
}
}
运行时出现unknown software exception (0xc0000096),位置为0x004014eb。
逐步调试时要我输入Please enter the path for OUTP.ASM
我是win xp ,MFID-5单片机(不知怎样连)。
我做是智能交通灯的毕业设计,各位高手帮帮忙啊。急!!! 展开
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#include<windows.h>
#define A8251 0x308
#define Com8255 0x303
#define PA8255 0x300
#define PB8255 0x301
#define PC8255 0x302
#define data51 0x308 /* 8251 的数据口地址*/
#define ctrl51 0x309 /* 8251 的控制口地址*/
#define timer2 0x306 /* 8253 counter 2 port address */
#define timctrl 0x307 /* 8253 control port address */
#define clk00 0x12 /* 8251 的时钟频率为 1.193 Mhz */
#define clk01 0x34de
#define STA_EOC 0x30c
#define ALE_OE 0x30e
#define factor 16
int a=1,b=2,c,k=0;
void ST_8255(void)
{
_outp(Com8255,0x80); /* 初始化 */
_outp(Com8255,0x0d); /* 按位置位复位命令 */
/* 设置 8255 的 PC6=1 来打开 8253 的 GATE2 ,输出方波 */
}
void ST_8253(void)
{
int bps=1200;
int datah;
int datal;
int tp;
tp = 1193182/(16*bps);
datah = (tp >> 8)&0x00ff;
datal = tp & 0x00ff;
_outp(timctrl,0xb6); /* 8253 初始化 */
_outp(timer2,datal);
_outp(timer2,datah);
}
void ST_8251(void)
{
int i;
/* 激活8251 */
_outp(ctrl51,0);
_outp(ctrl51,0x40); /* 8251 内部复位 */
for(i=20;i>0;i--){;}
_outp(ctrl51,0x4e); /* 8251 方式命令 */
for(i=20;i>0;i--){;}
_outp(ctrl51,0x27); /* 8251 工作命令 */
/*i=_inp(ctrl51);*/
/*printf("%d",i);*/
}
int communication2(void)/*接收时时数据进行比较并反馈结果*/
{
int rletter,n,status,j;
status=_inp(ctrl51);
if((status&0x02)!=0)
{
rletter=_inp(data51);
printf("rletter=%d ",rletter);
n=rletter;/* 接收状态 */
if(n>90) /* 继续使用正在使用道路 */
{
if(k==2)
{
c=a;
a=b;
b=c;
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
if((status&0x01)!=0)/*已准备好,则将键入的字符发送出去*/
{
_outp(data51,a+48);
printf("send=%d ",a);
printf("normal change\n");
}
k=0;
}
else
{
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
if((status&0x01)!=0)/*已准备好,则将键入的字符发送出去*/
{
_outp(data51,a+48);
printf("send=%d ",a);
printf("delay change ALARM!!!!!!!!!!!\n");
}
k++;
}
}
else /* 道路使用情况为一般 */
{
c=a;
a=b;
b=c;
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
if((status&0x01)!=0)/*已准备好,则将键入的字符发送出去*/
{
_outp(data51,a+48);
printf("send=%d ",a);
printf("normal change\n");
}
}
}
}
void main(void)
{
int i=5;
int status;
ST_8253();
ST_8251();
ST_8255();
status=_inp(ctrl51);/*获取8253 TXRDY 状态*/
{
_outp(data51,'1');
}
for(;;)
{
communication2();
}
}
运行时出现unknown software exception (0xc0000096),位置为0x004014eb。
逐步调试时要我输入Please enter the path for OUTP.ASM
我是win xp ,MFID-5单片机(不知怎样连)。
我做是智能交通灯的毕业设计,各位高手帮帮忙啊。急!!! 展开
1个回答
展开全部
你一定要用C++编么,用现成的不可以么,如果用现成的可以的话你可以用simens的winpcin软件,这个软件是开放的,而且使用很方便。一般的串口通信都能够完成的。
http://www.ad.siemens.com.cn/download/Soft/00002/winpcin.zip
http://www.ad.siemens.com.cn/download/Soft/00002/winpcin.zip
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询