微机原理与接口技术毕业设计

猜忌十字路口东西向和南北向的车流量,并送主机;交通灯智能控制,根据车流量实时调整红绿灯持续时间,车流超过上限报警,并将另一方向的红灯时间延长一倍;电子眼,记录违章车辆号码,并送主机数据库记录
邮箱:[email protected]

第1个回答  2007-03-24
十字路口交通流量监控系统的实施
1. 实时采样(下位机)
在下位机,我们通过A/D转换通道的电压变化模拟实际环境下的交通流量变化,通过查询方式采用并行端口实时采集,并将采集的数据发送到主机,并实时检测接收反馈信号,并将反馈信号用屏幕模拟的十字路口交通灯显示出来。
2. 实时监控(主机)
主机收集到发送端发送过来的数据后,与设定的交通流量峰值相比较(峰值为90),然后作出判断得出下一周期的红绿灯控制信号,然后反馈给下位机。
3. 报警
当主机发现交通流量超过预警值90后,会在主机屏幕上显示出报警信息。随后会将当前通行方向延长一个周期。
4. 双机通讯
发送端和接受端采用查询方式,和串行传送方式传输数据。
(三)本人任务:8251,8253,8255,AD转换器初始化程序设计以及源程序清单

主程序8255,8253,8251的设计
首先设置8255的工作方式控制字

8255的口A,口B,口C均作为输出,工作方式为0
固工作方式控制字为10000000即0x80

其次设置8255的对口C的按位置位/复位控制字
设置PC6=1打开8253的GATE2门输出方波
即控制字为00001101,为0x0d
8255的初始化程序代码如下:

void ST_8255(void)
{
outportb(Com8255,0x80); /* 初始化 */
outportb(Com8255,0x0d); /* 按位置位复位命令 */
/* 设置 8255 的 PC6=1 来打开 8253 的 GATE2 ,输出方波 */
}
其次设置8253的初始化
8253使用2号计数器,读/写方式选择为先写低8位计数值,再写高8位计数值
工作方式为3
计数初值为二进制数,减一计数器按二进制规律减一
所以8253的工作方式控制字为10110110
即0Xb6
8253的计数器时钟脉冲频率为1193182HZ
计数初值为1193182/(16*1200)即62
最后将计数值先高位再低位分两次写入CLK中

8253的初始化程序代码如下:

void ST_8253(void)
{
int bps=1200;
int datah;
int datal;
int tp;
tp = 1193182/(16*bps);
datah = (tp >> 8)&0x00ff;
datal = tp & 0x00ff;
outportb(timctrl,0xb6); /* 8253 初始化 */
outportb(timer2,datal);
outportb(timer2,datah);
}

最后设置8251的初始化
首先激活8251,将0写入命令口ctr151
其次进行复位操作,即D6=1,命令码为01000000, 即 OX40
再进行方式命令字设置,异步位为1位,无奇偶校验,字符长度为8位,波特率因子为16 综合得命令码为01001110 即0X4E
最后进行工作命令字设置,D5位(RTS发送请求)D2位(RxE接受允许),D1位(DTR数据终端准备好),D0位(发送允许)设置为1
命令码为00100111 即0X27

8251的初始化程序设计代码如下:
void ST_8251(void)
{
int i;
/* 激活8251 */
outportb(ctrl51,0);
outportb(ctrl51,0x40); /* 8251 内部复位 */
for(i=20;i>0;i--){;}
outportb(ctrl51,0x4e); /* 8251 方式命令 */
for(i=20;i>0;i--){;}
outportb(ctrl51,0x27); /* 8251 工作命令 */
/*i=inportb(ctrl51);*/
/*printf("%d",i);*/
}

[2]从程序8253,8251,的初始化设计
8253使用2号计数器,读/写方式选择为先写低8位计数值,再写高8位计数值
工作方式为3
计数初值为二进制数,减一计数器按二进制规律减一
所以8253的工作方式控制字为10110110
即0Xb6
8253的计数器时钟脉冲频率为1193182HZ
计数初值为1193182/(16*1200)即62
最后将计数值先高位再低位分两次写入CLK中

8253的初始化程序代码如下:
_ #define timer2 0x306 /* 8253 counter 2 port address */
#define timctrl 0x307 /* 8253 control port address */
void ST 8253(void)
{
int bps=1200;
int datah;
int datal;
long tp;

tp = 1193182/(16*bps);
datah = tp>> 8;
datal = tp & 0x00ff;
outportb(timctrl,0x0b6); /* 8253 初始化 */
outportb(timer2,datal);
outportb(timer2,datah);
}

最后设置8251的初始化
已经发给你了,加分。本回答被提问者采纳
第2个回答  2007-03-22
好麻烦,多看点资料
相似回答