• 大小: 45KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: 微机原理  

资源简介

实验要求:利用 8086 芯片,8253 芯片,8255 芯片等芯片实现对汽车系统的控制。实验结果由指示器显示。

资源截图

代码片段和文件信息

#define IOCON	9006H//16位总线,高8位用来传送地址信号,低8位用来传输数据
#define IOA     9000H
#define IOB     9002H
#define IOC     9004H
#define AD0809 0E002H
#define OUT373  8000H
#define TCONTRO   0A006H
#define TCON0     0A000H

unsigned char table1[8]={0x220x260x240x2c0x280x290x210x23};//两个数组元素高位不同跟控制后车灯有关
unsigned char table2[8]={0x030x010x090x080x0c0x040x060x02};

void outp(unsigned int addr char data)
// Write a byte to the specified I/O port 向接口写入数据
 { __asm
    { mov dx addr
      mov al data
      out dx al
    }
 }

char inp(unsigned int addr)
// Read a byte from the specified I/O port 从接口读出数据
 { char result;
   __asm
    { mov dx addr
      in al dx
      mov result al
    }
   return result;
 }
void delay(int i)
{
    while(i--){};
}
void main(void)
{
    unsigned char itmpinvtemp;
   //初始化8253计数器工作命令
    outp(TCONTRO0x16);//计数器0,只写计算值低8位,方式3,二进制计数
    outp(TCON0100);//输入100HZ,输出1HZ
   //初始化并行接口工作命令
    outp(IOCON0x90);//A口作为输入B、C口作为输出
    outp(IOB0x20);//初始化PB4口为高电压,防止后车灯闪烁
    temp=0;//记录AD转换器输出的结果
    i=0;//记录从A口读入的数据
    while(1){
      i=inp(IOA);//从A口读入数据
     
      if(i==0xfe){//1档

 v=70;
 while(1){
    //初始化AD0809工作命令
    outp(AD08090);
            in=inp(AD0809);
            outp(OUT373in);
    
    temp=~in;//取反
    temp=temp/0x14;//等比例缩小到一定范围防止大于V,产生负数
     for(tmp=0;tmp<8;tmp++){
outp(IOBtable1[tmp]);//向B口写数据 控制步进电机
outp(IOC0xf9);//向C口写数据 控制数码管
i=inp(IOA);//再次读A口数据,即监听是否按下其他档位
if(i==0xfd||i==0xf7||i==0xfb||i==0xef)break;
delay(v-temp);//延时
     }
     if(i==0xfd||i==0xf7||i==0xfb||i==0xef)break;
 }
      }
      if(i==0xfd){//2档
v=50;
        while(1){
     outp(AD08090);
             in=inp(AD0809);
             outp(OUT373in);
     temp=~in;
     temp=temp/0x14;
     for(tmp=0;tmp<8;tmp++){
outp(IOBtable1[tmp]);
outp(IOC0xa4);
i=inp(IOA);
if(i==0xfe||i==0xf7||i==0xfb||i==0xef)break;
delay(v-temp);
     }
     if(i==0xfe||i==0xf7||i==0xfb||i==0xef)break;
}
     }
     if(i==0xfb){//3档
v=30;
while(1){
     outp(AD08090);
             in=inp(AD0809);
             outp(OUT373in);
     temp=~in;
     temp=temp/0x14;
     for(tmp=0;tmp<8;tmp++){
outp(IOBtable1[tmp]);
outp(IOC0xb0);
i=inp(IOA);
if(i==0xfe||i==0xf7||i==0xfd||i==0xef)break;
        delay(v-temp);
     }
     if(i==0xfe||i==0xf7||i==0xfd||i==0xef)break;
}
     }
if(i==0xf7)//倒车
while(1){
     for(tmp=0;tmp<8;tmp++){
outp(IOBtable2[tmp]);
outp(IOC0x08);
i=inp(IOA);
if(i==0xfe||i==0xfb||i==0xfd||i==0xef)break;
        delay(80);
     }
     if(i==0xfe||i==0xfb||i==0xfd||i==0xef)break;
}
if(i==0xef){//刹车
   outp(IOB0x30);
   outp(IOC0x92);
}
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-07-03 19:34  汽车控制系统\
     目录           0  2020-07-03 19:34  汽车控制系统\8086\
     目录           0  2020-07-03 19:34  汽车控制系统\8086\Debug\
     文件        3104  2016-01-07 16:39  汽车控制系统\8086\Debug\Debug.exe
     文件        2016  2016-01-07 16:39  汽车控制系统\8086\Debug\main.obj
     文件        1231  2016-01-07 16:39  汽车控制系统\8086\Debug\Makefile
     文件         190  2016-01-07 16:39  汽车控制系统\8086\Debug\rtl.obj
     文件        3028  2016-01-07 16:39  汽车控制系统\8086\main.c
     文件         559  2016-01-03 21:13  汽车控制系统\8086\rtl.asm
     文件       38287  2016-01-20 20:43  汽车控制系统\car.pdsprj
     文件        1810  2020-06-08 23:28  汽车控制系统\car.pdsprj.DESKTOP-OEO3EFN.Lenovo.workspace

评论

共有 条评论