而8155的C端口各引脚的工作方式3、工作方式4的定义见表4-3所列,详细资料请查阅手册。
表4-3 C端口各引脚的工作方式3、工作方式4定义 Table.4-3 Definition of work style of C port
端口C引脚
PC0 PC1 PC2 PC3 PC4 PC5
方式3
A INTR(端口A中断请求) A BF(端口A缓冲器) A STB(端口A选通)
输出口 输出口 输出口
方式4 同左 同左 同左
B INTR(端口B中断请求) B BF(端口B缓冲器) B STB(端口B选通)
本设计端口A和端口B均作为输出口,控制字PA位和PB位均为1其它的不用为0,控制字为3H。
由图4-5可知,8155的IO由AT89C51的端口2(作为高8位地址)的P2.0线选择,当IO为1时,做I/O端口;当IO为0时,作RAM用,所以,P2.0=1。由AT89C51的P2.7经反向器2404接到8155的片选引脚CE,所以P2.7=1。此外,在电路图中,AT89C51端口0作为低8位地址及双向数据线与8155的AD0~AD7想连。回8155内部有地址寄存器,AT89C51的ALE信号可与8155的ALE直接相连。
表4-4 I/O端口及定时器地址 Table.4-4 I/O port and timer address
I/O地址
A7 A6 A5 A4 A3 A2 A1 A0 × × × × × 0 0 0 × × × × × 0 0 1 × × × × × 0 1 0 × × × × × 0 1 1 × × × × × 1 0 0 × × × × × 1 0 1
寄存器选择
命令/状态寄存器
端口A 端口B 端口C 定时器低8位
定时器高6位和定时器方式2
31
4.2.4 速度显示程序框图
开始定时器工作方式1速度检测周期T=2s,JC列车前行NT=2sYC=∏D,C1=C/10,S=C1×JC,V=3.6S/(1000T)LED显示 图4-7速度检测显示的程序框图
Fig.4-7 The diagram of Speed display
其中,C为车轮圆周,C1为两块钢片间的圆周长,S为电机车2秒所走的路程,JC为单片机接收到的齿轮脉冲。
4.3 硬件及流程整体图
4.3.1 硬件整体框图
综合上面所给出的各种设计,我们便可以总结出系统总体硬件框图,如下图4-8所示,方便理解本设计的结构。
32
区段LED显示速度显示单元P2.3-P2.5P0.0-P0.7位置触发单元P1.2P2.2报警单元系统控制单元P2.1P1.0P1.1P1.3P1.4齿频脉冲单元1T0制动单元行车方式按钮报警复位触发复位
图4-8 电力机车自动停车装置系统总框图
Fig.4-8 The diagram of electric locomotive’s automatic stopping device
33
4.3.2 流程整体图
开始定时器工作方式1速度检测周期T=2S,JC中断列车前行C=∏D,C1=C/10,S=C1×JC,V=3.6S/(1000T)YP1.4=1YZd=0中断返回YNLED显示N是否有位置触发MC=414Y停车报警,锁N定V,MC=0,LEDCD亮YT=2S声光报警NNBj=1YNbj=0P1.3=1列车继续前行LEDBC亮NYzd=1,bj=1N方案130≥V>29N顶推N列车继续前行LEDAB亮NMC=414YMC=0N方案1031≥V>20Y方案229≥V>28NY列车继续前进NMC=NZd=1Y...YY电机车制动
图4-9 设计流程图 Fig.4-9 Flowing chart
34
4.4 整体程序
//头文件包含
#include \ //51定义文件
//全局宏定义
#define uint unsigned int #define uchar unsigned char
#define led1 0x04 //定义led1地址 #define led2 0x02 #define led3 0x01
#define CMD XBYTE[0x8100] //定义命令口地址 #define PA XBYTE[0x8101] //定义PA地址 #define PB XBYTE[0x8102] #define PC XBYTE[0x8103]
//全局变量的定义
int g_gear=0,g_gear_cnt; //g_gear用于速度检测,g_gear_cnt用于区域检测 float g_speed,date;
//led显示数据查询表
uchar led_table[17]=
{0x8f/*0*/,0x30/*1*/,0x5b/*2*/,0x4f/*3*/,0x66/*4*/,0x6d/*5*/,0x7d/*6*/,0x07/*7*/,0x7f/*8*/,0x67/*9*/,0x77/*A*/,0x7f/*B*/,0x39/*C*/,0x3f/*D*/,0x79/*E*/,0x31/*F*/,0x80/*.*/,0x76/*H*/};
void Led_Display(uchar addr, uchar data) //addr:在哪个数码管显示,data:显示的数字 { PA=addr; if(data==250/*\ addr=led_table[16]; //显示\ else addr=led_table[data]; //显示数字 }
void Result_Display(uint data) //**.* { data*=10; Led_Display(led1,(data/100)); //显示十位 Led_Display(led2,((data0)/10)); //显示个位 Led_Display(led2,16); //显示\ Led_Display(led3,(data)); //显示小数点后第一位 }
void zd_be() { if(g_gear_cnt==414)
{
date=g_speed; //锁定电机车通C点时的速度 p2.4=0; //LEDBC灭,LEDCD亮,并停止声光报警
35
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库毕业设计-基于AT89C51单片机的大型电力机车自动停车器的设计(7)在线全文阅读。
相关推荐: